逆概率加权法最早由 Horvitz和Thompson提出,即对每个可观测的yi的概率取倒数,作为被观测的 yi 的权重,修正由缺失数据或有偏抽样带来的估计偏差.IPTW 是减少多组观察性数据间混杂偏倚的有效方法, 在处理多组间变量混杂偏倚中起到了重要作用。简单来说,就是把许多协变量和混杂因素打包成一个概率并进行加权,这样的话,我只用计算它的权重就可以了,方便了许多。
代码+视频手把手教你基于R语言逆概率加权(IPTW)并行生存曲线分析
代码:
library(foreign)
library(RISCA)
library(survminer)
#公众号回复:乳腺癌可以获得这个数据
bc <- read.spss("E:/r/test/Breast cancer survival agec.sav",
use.value.labels=F, to.data.frame=T)
bc <- na.omit(bc)
# age表示年龄,pathsize表示病理肿瘤大小(厘米),lnpos表示腋窝淋巴结阳性,
# histgrad表示病理组织学等级,er表示雌激素受体状态,pr表示孕激素受体状态,status结局事件是否死亡,
# pathscat表示病理肿瘤大小类别(分组变量),ln_yesno表示是否有淋巴结肿大,time是生存时间,
# ctrl+shitf+c 多行加注释
#分类变量转成因子
bc$er<-as.factor(bc$er)
bc$pr<-as.factor(bc$pr)
bc$ln_yesno<-as.factor(bc$ln_yesno)
#没有加权
fit<-coxph(Surv(time,status) ~ ln_yesno+ age+er+pr+histgrad+pathsize,data=bc)
summary(fit)
fit1 <- survfit(Surv(time,status) ~ ln_yesno, data = bc)
plot(fit1, ylab="Confounder-adjusted survival",
xlab="Time post-transplantation (years)", col=c(1,2))
ggsurvplot(fit1, data = bc)
#逆概率加权
fit2<- glm(ln_yesno~ age+er+pr+histgrad+pathsize, data=bc,
family=binomial(link = "logit"))
pr1<-fit2$fitted.values
pr1<-predict(fit2,type="response")
W <- (bc$ln_yesno==1) * (1/pr1) + (bc$ln_yesno==0) * (1)/(1-pr1)
fit.IPTW=coxph(Surv(time,status) ~ ln_yesno+ age+er+pr+histgrad+pathsize,
data=bc,weights=W)
summary(fit.IPTW)
#绘制加权后的图形
fit.ipw<-ipw.survival(times=bc$time, failures=bc$status,
variable=bc$ln_yesno, weights=W)
plot(fit.ipw, ylab="Confounder-adjusted survival",
xlab="Time post-transplantation (years)", col=c(1,2), grid.lty=1)
fit2.ipw <- survfit(Surv(time,status) ~ ln_yesno, data = bc,weights = W)
ggsurvplot(fit2.ipw, data = bc)