01 研究背景
在cox回归中,如何利用已经构建好的预测模型预测单个患者的生存概率呢?R中的pec包中predictSurvProb()函数可以利用cph()拟合的模型计算验证集中患者在不同时间节点的生存概率。其次该包还能在验证集中计算不同时间点C-index指数,绘制成图,比较验证集在不同模型中的C-index,通过交叉验证评估不同模型的区分度,除此以外该包还能将2个模型的校准度曲线绘制在同一个坐标系中,非常好用的包
02 案例研究
本文数据采用一份肿瘤生存资料数据集,收集了449例癌症患者的生存资料,包含患者年龄、性别、、吸烟史、生化检验、生存时间、生存状态等45个变量。本文利用Lasso回归做变量选择,构建cox预测模型,通过pec包验证区分度和校准度。
03 R代码与结果解读
##加载包 明确每个包的作用
library(pec) ##验证模型
library(rms) ##拟合生存分析模型
library(survival) ##生存分析包
library(glmnet) ##Lasso回归包
第一步,数据整理。
##调用数据,数据格式与普通的spss中格式一样,一行代表一条观测,
dt
vartype
vartype
###transdata 自编小函数 转化数据结构
transData
for (i in 1:length(vartype)) {
if(vartype[i]==0){df[,i]
else if(vartype[i]!=0){df[,i]
}
return(df)
}
df
str(df) ## 查看数据结构
dt
第二步:Lasso回归做变量选择
##筛选变量前,首先将自变量数据(因子变量)转变成矩阵(matrix)
x.factors
#将矩阵的因子变量与其它定量边量合并成数据框,定义了自变量。
x=as.matrix(data.frame(x.factors,dt[,c(21:44)]))
#设置应变量,生存时间和生存状态(生存数据)
y
#调用glmnet包中的glmnet函数,注意family那里一定要制定是“cox”,如果是做logistic需要换成"binomial"。
fit
plot(fit,label=T)