生存分析的cox比例风险回归模型.md 3.6 KB


title: 生存分析的Cox比例风险回归模型 tags: [] id: '1913' categories:

  • - uncategorized date: 2022-07-17 00:27:45 ---

如果只研究患者的中位生存时间或限制平均生存时间,或比较某一变量的限制平均生存时间,可以采用生存分析。如果自变量有多个,需要从中寻找主要的影响因素,则可以采用Cox回归模型进行分析。若某一变量的βj=0,则称其对风险函数无贡献。对风险函数无贡献的变量可以从模型中剔除,然后重现计算新的Cox模型,称为用Cox回归分析的逐步回归方法对变量进行筛选。(《卫生统计学》赵耐青,下同)

多个自变量之间有可能存在交互作用,比如催化剂的单独效应为零,与其他因素配合却能较大地提高效应。在回归分析中,若,X1、X2之间存在交互作用,最常用的方法是在回归模型中增加这两个变量的乘积项X1X2作为新的自变量,称为交互作用项。交互作用项的引入主要根据研究的背景知识。

Logisitic回归和Cox回归均基于大样本的假定,因此所需要的样本含量多于多重线性回归,需要达到模型自变量个数的15~20倍。如果样本含量较小,则难以得到稳定可靠的结论。

Cox回归的假设

  • HR不随时间变化,满足比例风险假定
  • 无“过早死亡”的个体和“活得太久”的个体
  • 连续自变量具有线性形式,自变量间无共线性

参考1:JeremyL

准备资料

group <- t(readRDS('prad_tpm_Cu_death.rds'))
clinical <- read.csv('TCGA-PRAD_clinical.csv', row.names = 'bcr_patient_barcode')
mergeID <- intersect(rownames(clinical), rownames(group))
df <- cbind(group[mergeID,], clinical[mergeID, c('dcf_time', 'dcf_status', 'os_time', 'os_status')])
df[,'dcf_status'] = ifelse(df[,'dcf_status']==1,0,1)
df

Cox回归

library("survival")
library("survminer")
coxmf <- paste0("Surv(dcf_time/365, dcf_status==0)~", paste(colnames(df)[1:10], collapse = '+'))
coxmf
res.cox <- coxph(formula(coxmf), data =  df)
res.cox
tmp_res <- summary(res.cox)
res <- as.data.frame(tmp_res$conf.int)
res <- res[,c(1,3,4)]
colnames(res) <- c('mean', 'lower', 'upper')
res[['Pvalue']] <- tmp_res$coefficients[,'Pr(>z)']
res[['VarName']] <- rownames(res)
res
saveRDS(res, 'Cox_res.rds')

Cox模型进行预测

想要评估GLS对估计生存概率的影响。在本例中,构造了一个有两行的新数据,每一行代表一个GLS值;其他自变量设置为它们的平均值(如果是连续变量)或最低水平(如果是离散变量)。对于一个哑变量,平均值是数据集中编码为1的比例。(JeremyL

gls_df <- as.data.frame(rbind(colMeans(df[1:10]),colMeans(df[1:10])))
gls_df[['GLS']] <- with(df,c(min(GLS),max(GLS)))
gls_df
ggsurvplot(survfit(res.cox, newdata = gls_df), conf.int = TRUE,,data = df)

检测是否满足假设

  • 比例风险假设
  • test.ph <- cox.zph(res.cox)
  • ggcoxzph(test.ph)
  • p无统计学意义表示满足假设

  • 无离群值

  • ggcoxdiagnostics(res.cox, type = "dfbeta", linear.predictions = F)

  • ggcoxdiagnostics(res.cox, type = "deviance", linear.predictions = F)

  • 线性假设

  • ggcoxfunctional(Surv(dcf_time/365, dcf_status==0) ~ GLS + log(GLS) + sqrt(GLS), data = df)

  • ggcoxfunctional(formula(coxmf), data = df)

  • 拟合线应该是线性的表示满足Cox比例风险模型的假设