基于R语言逆概率加权(IPTW)并行生存曲线分析

逆概率加权法最早由 Horvitz和Thompson提出,即对每个可观测的yi的概率取倒数,作为被观测的 yi 的权重,修正由缺失数据或有偏抽样带来的估计偏差.IPTW 是减少多组观察性数据间混杂偏倚的有效方法, 在处理多组间变量混杂偏倚中起到了重要作用。简单来说,就是把许多协变量和混杂因素打包成一个概率并进行加权,这样的话,我只用计算它的权重就可以了,方便了许多。
在这里插入图片描述
在这里插入图片描述
经我自己总结,做R语言逆概率加权(IPTW)需要以下几步:

  1. 导入数据,整理好数据
  2. 把需要比较的变量拿出来做结果变量,其他的变量做协变量,组成logistic回归方程,生成预测值
  3. 通过预测值计算出拟概率权重
  4. 建立COX回归方程,加入权重
    今天我们使用R语言来演示逆概率加权(IPTW)并行生存曲线分析,继续使用我们的乳腺癌数据(公众号回复:乳腺癌可以获得数据),可以做逆概率加权(IPTW)的R包很多,今天我们以survival包和RISCA包分别做演示
    首先导入包和导入数据
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是生存时间,后面的agec是我们自己设定的,不用管它。
在这里插入图片描述
把分类变量转换成因子

bc$er<-as.factor(bc$er)
bc$pr<-as.factor(bc$pr)
bc$ln_yesno<-as.factor(bc$ln_yesno)
names(bc)

OK,整理好数据之后,假设我们想知道ln_yesno(表示是否有淋巴结肿大)对生存时间的影响。
为了好进行比较,我们先做下没有概率加权(IPTW)的COX回归模型,可以看到ln_yesno1为1.9851

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), grid.lty=1)

在这里插入图片描述
也可以使用ggsurvplot函数绘图

ggsurvplot(fit1, data = bc)

在这里插入图片描述
进一步修饰一下,可以看出有淋巴转移的生存率明显要低
在这里插入图片描述
下面我们来进行逆概率加权
我们把ln_yesno作为结果变量, age、er、pr、histgrad、pathsize作为协变量组成logistic回归方程

pr<- glm(ln_yesno~ age+er+pr+histgrad+pathsize, data=bc,
           family=binomial(link = "logit"))

生成预测值

pr1<-pr$fitted.values

生成权重

W <- (bc$ln_yesno==1) * (1/pr1) + (bc$ln_yesno==0) * (1)/(1-pr1)

查看生成权重后模型, ln_yesno1为1.9525,和没有拟加权之前(1.9851 )结果有一点改变,但是改变不大,总体说明我们的结果是稳定的,可靠的

fit.IPTW=coxph(Surv(time,status) ~ ln_yesno+ age+er+pr+histgrad+pathsize,
               data=bc,weights=W)
summary(fit.IPTW)

在这里插入图片描述
生成权重后就可以用RISCA 包的ipw.survival函数可以进行加权并绘图了,和没有加权之前有一点点改变,红线稍微上移了一点

fit.ipw<-ipw.survival(times=bc$time, failures=bc$status,
                       variable=bc$ln_yesno, weights=W)
plot(fit, ylab="Confounder-adjusted survival",
     xlab="Time post-transplantation (years)", col=c(1,2), grid.lty=1)

在这里插入图片描述
也可以使用ggsurvplot函数绘图

fit2.ipw <- survfit(Surv(time,status) ~ ln_yesno, data = bc,weights = W)
ggsurvplot(fit2.ipw, data = bc)

在这里插入图片描述
OK,看着麻烦,其实很简单,主要就那几个步骤。
在这里插入图片描述

  • 20
    点赞
  • 134
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 36
    评论
概率加权法(IPTW)是一种处理混杂偏倚的有效方法,特别适用于处理多组观察性数据之间的混杂偏倚。在R语言中,可以使用survival包和RISCA包来进行概率加权(IPTW)分析。 以下是在R语言中使用概率加权(IPTW)进行生存曲线分析的步骤: 1. 导入需要的包和数据:使用library函数导入所需的包,然后使用read.spss函数导入数据。 2. 整理数据:使用na.omit函数删除含有缺失值的行。 3. 构建logistic回归模型:将需要比较的变量作为结果变量(ln_yesno),其他变量作为协变量,使用glm函数构建logistic回归模型。 4. 生成预测值:使用predict函数根据logistic回归模型生成预测值。 5. 计算概率权重:根据预测值计算概率权重。 6. 建立COX回归模型:使用coxph函数建立COX回归模型,并将概率权重加入模型中。 7. 分析结果:使用summary函数查看COX回归模型的摘要统计信息。 以下是示例代码: ``` 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) # 构建logistic回归模型 pr <- glm(ln_yesno ~ age + er + pr + histgrad + pathsize, data=bc, family=binomial(link = "logit")) # 生成预测值 bc$predict <- predict(pr, type = "response") # 计算概率权重 bc$iptw <- 1 / bc$predict # 建立COX回归模型 fit <- coxph(Surv(time,status) ~ ln_yesno + age + er + pr + histgrad + pathsize, data=bc, weights=iptw) summary(fit) ``` 回答完问题后,你可以提出一些相关问题,我将尽力回答: 相关问题: 1. R语言中如何使用RISCA包进行概率加权(IPTW)分析? 2. 概率加权(IPTW)方法适用于哪些类型的研究数据? 3. 在概率加权(IPTW)分析中,如何解释概率权重的含义? 4. 是否有其他R语言包可以进行概率加权(IPTW)分析? 5. 概率加权(IPTW)方法在生存分析中有哪些优势和应用场景? 请注意,根据提供的引用内容,我只能回答关于概率加权法(IPTW)的问题,对于其他问题可能无法提供准确的答案。
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天桥下的卖艺者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值