天天看點

R語言生存分析模型因果分析:非參數估計、IP權重風險模型、結構嵌套加速失效(AFT)模型分析流行病學随訪研究資料

了解世界,我們可以從相關性的角度去描述,統計,​​機器學習​​,很多問題都是從相關的角度去描述的。我們去建構一個模型,不管是統計機器學習模型,還是深度學習模型,本質上是建構一個複雜映射。從特征到标簽的一個映射,這個映射是有用的,但不完全有用。

因果分析

我們在這裡用一個隐喻,下雨,來描述causal 和relevance。我們可以建構一個關于預測明天是否下雨的模型,從搜集到的大量特征,以及曆史的下雨結果最為标簽,構模組化型。不管準确率多少,我們用這樣一個模型能夠預測明天是否能夠下雨。

但是,我們很多時候要的不僅僅是預測,而是需要改變現狀,例如沙漠中,我們想要哪些因素改變了,能夠導緻下雨。這就涉及到因果推斷, causal inference 。

因果生存分析

在報告随機實驗的結果時,除了意向治療效應外,研究人員通常選擇呈現符合方案效應。然而,這些符合方案的影響通常是回顧性描述的,例如,比較在整個研究期間堅持其指定治療政策的個體之間的結果。這種對符合方案效應的回顧性定義經常被混淆,并且無法進行因果解釋,因為它遇到了治療混雜因素。

我們的目标是概述使用逆機率權重對生存結果的因果推斷。這裡描述的基本概念也适用于其他類型的暴露政策,盡管這些可能需要額外的設計或分析考慮。

生存曲線的非參數估計

  1.  # 對資料進行一些預處理
  2.  ifelse(nes$death==0, 120,
  3.  (ns$yrh-83)*12+nhefs$moh) # yrt從83到92不等
R語言生存分析模型因果分析:非參數估計、IP權重風險模型、結構嵌套加速失效(AFT)模型分析流行病學随訪研究資料
summary(survtime)      
R語言生存分析模型因果分析:非參數估計、IP權重風險模型、結構嵌套加速失效(AFT)模型分析流行病學随訪研究資料
survdiff(Surv(srtm, dah) ~ qmk, data=nes)      
R語言生存分析模型因果分析:非參數估計、IP權重風險模型、結構嵌套加速失效(AFT)模型分析流行病學随訪研究資料
  1.  fit <- survfit(Surv(rvie, dth) ~ sk, data=ns)
  2.  ggsurvplot(fit
R語言生存分析模型因果分析:非參數估計、IP權重風險模型、結構嵌套加速失效(AFT)模型分析流行病學随訪研究資料

通過風險模型對生存曲線進行參數化估計

1.  # 建立月資料
2.   
3.  efsurv$ent <- ifelse(nhfs.rv$time==nhfs.urv$srvme-1 &
4.  nhf.srv$death==1, 1, 0)
5.   
6.   
7.  # 拟合參數性風險模型
8.  haads.el <- glm(event==0 ~ qs      
R語言生存分析模型因果分析:非參數估計、IP權重風險模型、結構嵌套加速失效(AFT)模型分析流行病學随訪研究資料
R語言生存分析模型因果分析:非參數估計、IP權重風險模型、結構嵌套加速失效(AFT)模型分析流行病學随訪研究資料
1.   
2.  #對每個人月的估計(1-風險)的配置設定 */
3.  qk0$pnoevt0 <- predict(hardoel, mk0, type="response")
4.   
5.  # 計算每個人月的生存率
6.  qm0$uv0 <- cumprod(qm0$pnoet0)
7.   
8.  # 一些資料管理來繪制估計的生存曲線
9.  hadgrh$suvdff <- haardsgph$suv1-hardgrph$srv0
10.   
11.  # 繪制
12.  ggplot(hads.aph      
R語言生存分析模型因果分析:非參數估計、IP權重風險模型、結構嵌套加速失效(AFT)模型分析流行病學随訪研究資料

通過IP權重風險模型估計生存曲線

1.  # 估計ip權重的分母
2.   
3.  nef$p.mk <- predict(enm, nes, type="response")
4.   
5.  # 估計ip權重的分子
6.  p.m <- glm(qk ~ 1, data=nefs, family=binomial() )
7.  hfs$pnsm <- predict(p.m, nes, type="response")
8.   
9.  # 估計權重的計算
10.  nef$s.<- ifelse(hes$qsk==1, nefs$pqmk/nhes$d.qmk,
11.  (1-nfs$p.smk)/(1-nef$pdqk))
12.  summary(nhs$swa)      
R語言生存分析模型因果分析:非參數估計、IP權重風險模型、結構嵌套加速失效(AFT)模型分析流行病學随訪研究資料
R語言生存分析模型因果分析:非參數估計、IP權重風險模型、結構嵌套加速失效(AFT)模型分析流行病學随訪研究資料
1.  # 建立人月資料
2.  nhfsw <- exnRos(nhfs, "srvtime", drop=F)
3.  nh.pw$ime <- sqee(rle(nefs.ipw$seqn)$lengths)-1
4.  nhfipw$evnt <- ifele(nhf.iw$tie=nhefs.i$rv1 &)
5.  nhfs.w$eath==1, 1, 0)
6.  nhefpw$tmesq <- nhfs.pw$me^2
7.   
8.  # 拟合權重風險模型
9.  imel <- glm(eve      
R語言生存分析模型因果分析:非參數估計、IP權重風險模型、結構嵌套加速失效(AFT)模型分析流行病學随訪研究資料
1.  # 建立生存曲線
2.  ipw.k0 <- data.frame(cbind(seq(0, 119),0, (seq(0, 119))^2))
3.   
4.   
5.   
6.  # 對每個人月的估計(1-危險)的配置設定 */
7.  iwqk0$p.nvnt0 <- predict(ipwdl, pwm0, type="response")
8.  iwsk1$povt1 <- predict(ip.el, ipmk1, type="response")
9.   
10.  # 計算每個人月的生存率
11.  ip.qs0$srv0 <- cumprod(ipwsk0$p.nevnt0)
12.  ip.qm1$suv1 <- cumprod(iwqsk1$p.nvent1)
13.   
14.  # 一些資料管理來繪制估計的生存曲線
15.  ipwgph <- merge(ip.qmk0,pwsm1, by=c("time", "timesq") )
16.  ipw.aph$surff <-ipw.ah$sv1-pwgrph$surv0
17.   
18.  # 繪制
19.  ggplot(ip.gph, ae      
R語言生存分析模型因果分析:非參數估計、IP權重風險模型、結構嵌套加速失效(AFT)模型分析流行病學随訪研究資料

通過g-formula估計生存曲線

  1.  # 帶有協變量的風險模型的拟合情況
  2.  g.mo <- glm(event==0 ~ qsm
R語言生存分析模型因果分析:非參數估計、IP權重風險模型、結構嵌套加速失效(AFT)模型分析流行病學随訪研究資料
R語言生存分析模型因果分析:非參數估計、IP權重風險模型、結構嵌套加速失效(AFT)模型分析流行病學随訪研究資料
1.  # 建立資料集,包括每個治療水準下的所有時間點
2.  # 每個人在每個治療水準下的所有時間點
3.  gf.qmk <- exanos(nfs, cunt=120, cotis.cl=F)
4.  gf.qm0$te <- rep(q(0, 119), now(nhf))
5.  gqm0$tesq <- gqk0$tie^2
6.  gqsk0$qmk <- 0
7.   
8.  gfqsk1 <- gf.qm0
9.  gf.sk1$mk <- 1
10.   
11.  gfqk0$p.vnt0 <- predict(g.mdel, g.qk0, type="response")
12.  gfqk1$p.eent1 <- predict(gf.mol, gf.mk1, type="response")
13.   
14.  # 繪圖
15.  ggplot(gf.graph      
R語言生存分析模型因果分析:非參數估計、IP權重風險模型、結構嵌套加速失效(AFT)模型分析流行病學随訪研究資料

通過結構嵌套AFT模型估計中位生存時間比率

1.  # 對資料進行一些預處理
2.   
3.   
4.  #
5.  modelA <- glm(qsmk ~ sex +
6.  nhs$pqsk <- predict(moeA, nhe, type="response")
7.  d <- nes[!is.na(hf$surve),] # 隻選擇有觀察到的死亡時間的人
8.   
9.   
10.  # 定義需要被最小化的估計函數
11.  smf <- function(pi){
12.   
13.  # 建立delta名額
14.  if (psi>=0){
15.  delta <- ifelse
16.  1, 0)
17.  } else if (psi < 0) {
18.  dlta <- ifelse
19.  }
20.   
21.   
22.  # 協方差
23.  sgma <- t(at) %*% smat
24.  if (sa == 0){
25.  siga <- 1e-16
26.  }
27.  etm <- svl*solve(sia)*t(sal)
28.  return(etmeq)
29.  }
30.   
31.  res <- optimize
32.  # 使用簡單的分割法找到95%置信度下限和上限的估計值
33.  frcf <- function(x){
34.  return(smef(x) - 3.84)
35.  }
36.   
37.  if (bfuc < 3.84){
38.  # 找到sumeef(x)>3.84的估計值
39.   
40.  # 95%CI的下限
41.   
42.  while (tetlw < 3.84 & cnlow < 100){
43.  psl <- pilw - incre
44.  teslow <- sumeef(pslw)
45.  cunlow <- cunlow + 1
46.  }
47.   
48.  # 95%CI的上限值
49.   
50.  while (tsigh < 3.84 & onhih < 100){
51.  phigh <- pshih + inrem
52.  testig <- sumeef(pihigh)
53.  cunhgh <- cuntigh + 1
54.  }
55.   
56.  # 使用分切法進行更好的估計
57.  if ((tstig > 3.84) & (tslw > 3.84)){
58.   
59.  # 分割法
60.   
61.  cont <- 0
62.  dif <- right - left
63.   
64.  while {
65.  test <- fmiddle * fleft
66.  if (test < 0){
67.  } else {
68.  }
69.   
70.  diff <- right - left
71.  }
72.   
73.  psi_high <- middle
74.  objfunc_high <- fmiddle + 3.84
75.   
76.  # 95%CI的下限
77.  left <- psilow
78.   
79.   
80.  while(!){
81.  test <- fmiddle * fleft
82.  if (test < 0)