R語言生存分析模型因果分析:非參數(shù)估計(jì)、IP加權(quán)風(fēng)險(xiǎn)模型、結(jié)構(gòu)嵌套加速失效(AFT)模型
原文鏈接:http://tecdat.cn/?p=26632
原文出處:拓端數(shù)據(jù)部落公眾號
理解世界,我們可以從相關(guān)性的角度去描述,統(tǒng)計(jì),機(jī)器學(xué)習(xí),很多問題都是從相關(guān)的角度去描述的。我們?nèi)?gòu)建一個(gè)模型,不管是統(tǒng)計(jì)機(jī)器學(xué)習(xí)模型,還是深度學(xué)習(xí)模型,本質(zhì)上是構(gòu)建一個(gè)復(fù)雜映射。從特征到標(biāo)簽的一個(gè)映射,這個(gè)映射是有用的,但不完全有用。
因果分析
我們在這里用一個(gè)隱喻,下雨,來描述causal 和relevance。我們可以構(gòu)建一個(gè)關(guān)于預(yù)測明天是否下雨的模型,從搜集到的大量特征,以及歷史的下雨結(jié)果最為標(biāo)簽,構(gòu)建模型。不管準(zhǔn)確率多少,我們用這樣一個(gè)模型能夠預(yù)測明天是否能夠下雨。
但是,我們很多時(shí)候要的不僅僅是預(yù)測,而是需要改變現(xiàn)狀,例如沙漠中,我們想要哪些因素改變了,能夠?qū)е孪掠?。這就涉及到因果推斷, causal inference 。
因果生存分析
在報(bào)告隨機(jī)實(shí)驗(yàn)的結(jié)果時(shí),除了意向治療效應(yīng)外,研究人員通常選擇呈現(xiàn)符合方案效應(yīng)。然而,這些符合方案的影響通常是回顧性描述的,例如,比較在整個(gè)研究期間堅(jiān)持其指定治療策略的個(gè)體之間的結(jié)果。這種對符合方案效應(yīng)的回顧性定義經(jīng)常被混淆,并且無法進(jìn)行因果解釋,因?yàn)樗龅搅酥委熁祀s因素。
我們的目標(biāo)是概述使用逆概率加權(quán)對生存結(jié)果的因果推斷。這里描述的基本概念也適用于其他類型的暴露策略,盡管這些可能需要額外的設(shè)計(jì)或分析考慮。
生存曲線的非參數(shù)估計(jì)
# 對數(shù)據(jù)進(jìn)行一些預(yù)處理
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

通過風(fēng)險(xiǎn)模型對生存曲線進(jìn)行參數(shù)化估計(jì)
# 創(chuàng)建月數(shù)據(jù)
efsurv$ent <- ifelse(nhfs.rv$time==nhfs.urv$srvme-1 &
nhf.srv$death==1, 1, 0)
# 擬合參數(shù)性風(fēng)險(xiǎn)模型
haads.el <- glm(event==0 ~ qs


#對每個(gè)人月的估計(jì)(1-風(fēng)險(xiǎn))的分配 */
qk0$pnoevt0 <- predict(hardoel, mk0, type="response")
# 計(jì)算每個(gè)人月的生存率
qm0$uv0 <- cumprod(qm0$pnoet0)
# 一些數(shù)據(jù)管理來繪制估計(jì)的生存曲線
hadgrh$suvdff <- haardsgph$suv1-hardgrph$srv0
# 繪制
ggplot(hads.aph

通過IP加權(quán)風(fēng)險(xiǎn)模型估計(jì)生存曲線
# 估計(jì)ip權(quán)重的分母
nef$p.mk <- predict(enm, nes, type="response")
# 估計(jì)ip權(quán)重的分子
p.m <- glm(qk ~ 1, data=nefs, family=binomial() )
hfs$pnsm <- predict(p.m, nes, type="response")
# 估計(jì)權(quán)重的計(jì)算
nef$s.<- ifelse(hes$qsk==1, nefs$pqmk/nhes$d.qmk,
(1-nfs$p.smk)/(1-nef$pdqk))
summary(nhs$swa)


# 創(chuàng)建人月數(shù)據(jù)
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
# 擬合加權(quán)風(fēng)險(xiǎn)模型
imel <- glm(eve

# 創(chuàng)建生存曲線
ipw.k0 <- data.frame(cbind(seq(0, 119),0, (seq(0, 119))^2))
# 對每個(gè)人月的估計(jì)(1-危險(xiǎn))的分配 */
iwqk0$p.nvnt0 <- predict(ipwdl, pwm0, type="response")
iwsk1$povt1 <- predict(ip.el, ipmk1, type="response")
# 計(jì)算每個(gè)人月的生存率
ip.qs0$srv0 <- cumprod(ipwsk0$p.nevnt0)
ip.qm1$suv1 <- cumprod(iwqsk1$p.nvent1)
# 一些數(shù)據(jù)管理來繪制估計(jì)的生存曲線
ipwgph <- merge(ip.qmk0,pwsm1, by=c("time", "timesq") )
ipw.aph$surff <-ipw.ah$sv1-pwgrph$surv0
# 繪制
ggplot(ip.gph, ae

通過g-formula估計(jì)生存曲線
# ?帶有協(xié)變量的風(fēng)險(xiǎn)模型的擬合情況
g.mo <- glm(event==0 ~ qsm


# 創(chuàng)建數(shù)據(jù)集,包括每個(gè)治療水平下的所有時(shí)間點(diǎn)
# 每個(gè)人在每個(gè)治療水平下的所有時(shí)間點(diǎn)
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

通過結(jié)構(gòu)嵌套AFT模型估計(jì)中位生存時(shí)間比率
# 對數(shù)據(jù)進(jìn)行一些預(yù)處理
#
modelA <- glm(qsmk ~ sex +
nhs$pqsk <- predict(moeA, nhe, type="response")
d <- nes[!is.na(hf$surve),] # 只選擇有觀察到的死亡時(shí)間的人
# 定義需要被最小化的估計(jì)函數(shù)
smf <- function(pi){
# 創(chuàng)建delta指標(biāo)
if (psi>=0){
delta <- ifelse
1, 0)
} else if (psi < 0) {
dlta <- ifelse
}
# 協(xié)方差
sgma <- t(at) %*% smat
if (sa == 0){
siga <- 1e-16
}
etm <- svl*solve(sia)*t(sal)
return(etmeq)
}
res <- optimize
# 使用簡單的分割法找到95%置信度下限和上限的估計(jì)值
frcf <- function(x){
return(smef(x) - 3.84)
}
if (bfuc < 3.84){
# 找到sumeef(x)>3.84的估計(jì)值
# 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
}
# 使用分切法進(jìn)行更好的估計(jì)
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)


最受歡迎的見解
1.R語言繪制生存曲線估計(jì)|生存分析|如何R作生存曲線圖
2.R語言生存分析可視化分析
3.R語言如何在生存分析與Cox回歸中計(jì)算IDI,NRI指標(biāo)
4.r語言中使用Bioconductor 分析芯片數(shù)據(jù)
5.R語言生存分析數(shù)據(jù)分析可視化案例
6.r語言ggplot2誤差棒圖快速指南
7.R 語言繪制功能富集泡泡圖
8.R語言如何找到患者數(shù)據(jù)中具有差異的指標(biāo)?(PLS—DA分析)
9.R語言中的生存分析Survival analysis晚期肺癌患者4例