数据分享|R语言生存分析模型因果分析:非参数估计、IP加权风险模型、结构嵌套加速失效(AFT)模型分析流行病学随访研究数据

简介: 数据分享|R语言生存分析模型因果分析:非参数估计、IP加权风险模型、结构嵌套加速失效(AFT)模型分析流行病学随访研究数据

原文链接:http://tecdat.cn/?p=26632


理解世界,我们可以从相关性的角度去描述,统计,机器学习,很多问题都是从相关的角度去描述的。我们去构建一个模型,不管是统计机器学习模型,还是深度学习模型,本质上是构建一个复杂映射。从特征到标签的一个映射,这个映射是有用的,但不完全有用。


因果分析


我们在这里用一个隐喻,下雨,来描述causal 和relevance。我们可以构建一个关于预测明天是否下雨的模型,从搜集到的大量特征,以及历史的下雨结果最为标签,构建模型。不管准确率多少,我们用这样一个模型能够预测明天是否能够下雨。

但是,我们很多时候要的不仅仅是预测,而是需要改变现状,例如沙漠中,我们想要哪些因素改变了,能够导致下雨。这就涉及到因果推断, causal inference 。


因果生存分析


在报告随机实验的结果时,除了意向治疗效应外,研究人员通常选择呈现符合方案效应。然而,这些符合方案的影响通常是回顾性描述的,例如,比较在整个研究期间坚持其指定治疗策略的个体之间的结果。这种对符合方案效应的回顾性定义经常被混淆,并且无法进行因果解释,因为它遇到了治疗混杂因素。

我们的目标是概述使用逆概率加权对生存结果的因果推断。这里描述的基本概念也适用于其他类型的暴露策略,尽管这些可能需要额外的设计或分析考虑。本文使用生存模型因果分析流行病学随访研究数据查看文末了解数据获取方式)。


生存曲线的非参数估计


# 对数据进行一些预处理 
ifelse(nes$death==0, 120, 
                         (ns$yrh-83)*12+nhefs$moh) # yrt从83到92不等

summary(survtime)

survdiff(Surv(srtm, dah) ~ qmk, data=nes)

fit <- survfit(Surv(rvie, dth) ~ sk, data=ns)
ggsurvplot(fit


点击标题查阅往期内容


R语言生存分析可视化分析


01

02

03

04


通过风险模型对生存曲线进行参数化估计

# 创建月数据
efsurv$ent <- ifelse(nhfs.rv$time==nhfs.urv$srvme-1 & 
                             nhf.srv$death==1, 1, 0)
# 拟合参数性风险模型
haads.el <- glm(event==0 ~ qs

#对每个人月的估计(1-风险)的分配 */
qk0$pnoevt0 <- predict(hardoel, mk0, type="response")
# 计算每个人月的生存率
qm0$uv0 <- cumprod(qm0$pnoet0)
# 一些数据管理来绘制估计的生存曲线
hadgrh$suvdff <- haardsgph$suv1-hardgrph$srv0
# 绘制
ggplot(hads.aph

通过IP加权风险模型估计生存曲线


# 估计ip权重的分母
nef$p.mk <- predict(enm, nes, type="response")
# 估计ip权重的分子
p.m <- glm(qk ~ 1, data=nefs, family=binomial() )
hfs$pnsm <- predict(p.m, nes, type="response")
# 估计权重的计算
nef$s.<- ifelse(hes$qsk==1, nefs$pqmk/nhes$d.qmk,
                     (1-nfs$p.smk)/(1-nef$pdqk))
summary(nhs$swa)

# 创建人月数据
nhfsw <- exnRos(nhfs, "srvtime", drop=F) 
nh.pw$ime <- sqee(rle(nefs.ipw$seqn)$lengths)-1
nhfipw$evnt <- ifele(nhf.iw$tie=nhefs.i$rv1 &) 
                            nhfs.w$eath==1, 1, 0)
nhefpw$tmesq <- nhfs.pw$me^2
# 拟合加权风险模型
imel <- glm(eve

# 创建生存曲线
ipw.k0 <- data.frame(cbind(seq(0, 119),0, (seq(0, 119))^2))
# 对每个人月的估计(1-危险)的分配 */
iwqk0$p.nvnt0 <- predict(ipwdl, pwm0, type="response")
iwsk1$povt1 <- predict(ip.el, ipmk1, type="response")
# 计算每个人月的生存率
ip.qs0$srv0 <- cumprod(ipwsk0$p.nevnt0)
ip.qm1$suv1 <- cumprod(iwqsk1$p.nvent1)
# 一些数据管理来绘制估计的生存曲线
ipwgph <- merge(ip.qmk0,pwsm1, by=c("time", "timesq") )
ipw.aph$surff <-ipw.ah$sv1-pwgrph$surv0
# 绘制
ggplot(ip.gph, ae

通过g-formula估计生存曲线


#  带有协变量的风险模型的拟合情况
g.mo <- glm(event==0 ~ qsm

# 创建数据集,包括每个治疗水平下的所有时间点 
# 每个人在每个治疗水平下的所有时间点
gf.qmk <- exanos(nfs, cunt=120, cotis.cl=F) 
gf.qm0$te <- rep(q(0, 119), now(nhf))
gqm0$tesq <- gqk0$tie^2
gqsk0$qmk <- 0
gfqsk1 <- gf.qm0
gf.sk1$mk <- 1
gfqk0$p.vnt0 <- predict(g.mdel, g.qk0, type="response")
gfqk1$p.eent1 <- predict(gf.mol, gf.mk1, type="response")
# 绘图
ggplot(gf.graph

通过结构嵌套AFT模型估计中位生存时间比率


# 对数据进行一些预处理
# 
modelA <- glm(qsmk ~ sex +
nhs$pqsk <- predict(moeA, nhe, type="response")
d <- nes\[!is.na(hf$surve),\] # 只选择有观察到的死亡时间的人
# 定义需要被最小化的估计函数
smf <- function(pi){
  
  # 创建delta指标
  if (psi>=0){
    delta <- ifelse
                    1, 0)
  } else if (psi < 0) {
    dlta <- ifelse
  }
  
 
  # 协方差
  sgma <- t(at) %*% smat
  if (sa == 0){
    siga <- 1e-16
  }
  etm <- svl\*solve(sia)\*t(sal)
  return(etmeq)
}
res <- optimize
# 使用简单的分割法找到95%置信度下限和上限的估计值
frcf <- function(x){
  return(smef(x) - 3.84)
}
if (bfuc < 3.84){
  # 找到sumeef(x)>3.84的估计值
  
  # 95%CI的下限
  while (tetlw < 3.84 & cnlow < 100){
    psl <- pilw - incre
    teslow <- sumeef(pslw)
    cunlow <- cunlow + 1
  }
  
  # 95%CI的上限值
 
  while (tsigh < 3.84 & onhih < 100){
    phigh <- pshih + inrem
    testig <- sumeef(pihigh)
    cunhgh <- cuntigh + 1
  }
  
  # 使用分切法进行更好的估计
  if ((tstig > 3.84) & (tslw > 3.84)){
    
    # 分割法
   
    cont <- 0
    dif <- right - left
    
    while {
      test <- fmiddle * fleft
      if (test < 0){
      } else {
      }
     
      diff <- right - left
    }
    
    psi_high <- middle
    objfunc_high <- fmiddle + 3.84
    
    # 95%CI的下限
    left <- psilow
   
    
    while(!){
      test <- fmiddle * fleft
      if (test < 0)

相关文章
|
3月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
2月前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
55 3
|
3月前
|
数据采集 数据可视化 数据挖掘
R语言在金融数据分析中的深度应用:探索数据背后的市场智慧
【9月更文挑战第1天】R语言在金融数据分析中展现出了强大的功能和广泛的应用前景。通过丰富的数据处理函数、强大的统计分析功能和优秀的可视化效果,R语言能够帮助金融机构深入挖掘数据价值,洞察市场动态。未来,随着金融数据的不断积累和技术的不断进步,R语言在金融数据分析中的应用将更加广泛和深入。
|
3月前
|
机器学习/深度学习 算法 前端开发
R语言基础机器学习模型:深入探索决策树与随机森林
【9月更文挑战第2天】决策树和随机森林作为R语言中基础且强大的机器学习模型,各有其独特的优势和适用范围。了解并熟练掌握这两种模型,对于数据科学家和机器学习爱好者来说,无疑是一个重要的里程碑。希望本文能够帮助您更好地理解这两种模型,并在实际项目中灵活应用。
|
4月前
|
机器学习/深度学习 数据采集 数据可视化
R语言在数据科学中的应用实例:探索与预测分析
【8月更文挑战第31天】通过上述实例,我们展示了R语言在数据科学中的强大应用。从数据准备、探索、预处理到建模与预测,R语言提供了完整的解决方案和丰富的工具集。当然,数据科学远不止于此,随着技术的不断发展和业务需求的不断变化,我们需要不断学习和探索新的方法和工具,以更好地应对挑战,挖掘数据的潜在价值。 未来,随着大数据和人工智能技术的普及,R语言在数据科学领域的应用将更加广泛和深入。我们期待看到更多创新的应用实例,为各行各业的发展注入新的动力。
|
4月前
|
数据采集 存储 数据可视化
R语言时间序列分析:处理与建模时间序列数据的深度探索
【8月更文挑战第31天】R语言作为一款功能强大的数据分析工具,为处理时间序列数据提供了丰富的函数和包。从数据读取、预处理、建模到可视化,R语言都提供了灵活且强大的解决方案。然而,时间序列数据的处理和分析是一个复杂的过程,需要结合具体的应用场景和需求来选择合适的方法和模型。希望本文能为读者在R语言中进行时间序列分析提供一些有益的参考和启示。
|
4月前
|
资源调度 数据挖掘
R语言回归分析:线性回归模型的构建与评估
【8月更文挑战第31天】线性回归模型是统计分析中一种重要且实用的工具,能够帮助我们理解和预测自变量与因变量之间的线性关系。在R语言中,我们可以轻松地构建和评估线性回归模型,从而对数据背后的关系进行深入的探索和分析。
|
7月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化
|
7月前
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
4月前
|
机器学习/深度学习 数据采集
R语言逻辑回归、GAM、LDA、KNN、PCA主成分分类分析预测房价及交叉验证
上述介绍仅为简要概述,每个模型在实施时都需要仔细调整与优化。为了实现高度精确的预测,模型选择与调参是至关重要的步骤,并且交叉验证是提升模型稳健性的有效途径。在真实世界的房价预测问题中,可能还需要结合地域经济、市场趋势等宏观因素进行综合分析。
89 3
下一篇
DataWorks