生存分析模型简介及survival包实现

实操

所需数据

ADDICTS.txt,链接:https://share.weiyun.com/54yxdCN 密码:fu888m

survival用法

Surv:用于创建生存数据对象

survfit:创建KM生存曲线或是Cox调整生存曲线

survdiff:用于不同组的统计检验

coxph:构建COX回归模型

cox.zph:检验PH假设是否成立

survreg:构建参数模型

代码

library(survival)
library(MASS)
setwd('C:\\Users\\Administrator\\Desktop')
addicts <- read.table('ADDICTS.txt',T)
names(addicts)<- c('id','clinic','status','survt','prison','dose')

# 1. 估计生存函数,观察不同组间的区别

## 建立生存对象
y <- Surv(addicts$survt,addicts$status==1)

## 估计KM生存曲线
kmfit1 <- survfit(y~1)
summary(kmfit1)

## 根据clinic分组估计KM生存曲线
kmfit2 <- survfit(y~addicts$clinic)
survdiff(Surv(survt,status)~clinic, data=addicts) # 检验显著性

## 用strata来控制协变量的影响
survdiff(Surv(survt,status)~ clinic +strata(prison),data=addicts)

## 构建COX PH回归模型
coxmodel <- coxph(y~ prison + dose + clinic,data=addicts)
summary(coxmodel)

# 两模型选择
mod1 <- coxph(y ~ prison + dose + clinic,data=addicts)
mod2 <- coxph(y ~ prison + dose + clinic + clinic*prison
              + clinic*dose, data=addicts)
anova(mod1,mod2)
stepAIC(mod2)
cox.zph(mod1,transform=rank) #对PH假设进行统计检验
summary(survfit(mod1,newdata=pattern1))
# 风险预测
pattern1 <- data.frame(prison=0,dose=70,clinic=2)
predict(mod1,newdata=pattern1,
        type='risk')

## 构建一个stratified Cox model,当PH假设在clinic不成立,控制这个变量
mod3 <- coxph(y ~ prison + dose +
                strata(clinic),data=addicts)
summary(mod3)


## 构建参数模型
modpar1 <- survreg(Surv(addicts$survt,addicts$status)~
                     prison +dose +clinic,data=addicts,
                   dist='exponential')
summary(modpar1)

参考资料

[01]. Applied Survival Models; Jacqueline Buros Novik