临床预测模型/机器学习-偏最小二乘回归plsRcox算法学习

文摘   2024-11-06 09:30   日本  

plsRcox 是一种基于偏最小二乘回归(PLS)和 Cox 回归的算法,用于高维数据的生存分析。该算法结合了 PLS 和 Cox 回归模型的优势,特别适用于变量数量多于样本数量的情况,常用于基因组学数据或其他高维生物信息学数据的分析。

偏最小二乘(PLS):通过寻找新变量(称为主成分或潜在变量)来捕捉自变量和因变量之间的最大相关性。在高维数据中,自变量之间可能具有高度相关性,PLS 有助于解决共线性问题,并减少自变量的维度,从而使模型更加稳健。

Cox 回归模型:可构建比例风险模型,用于评估多个变量对生存时间(或事件发生时间)的影响。

plsRcox 算法的融合:plsRcox 首先应用 PLS 方法,从高维自变量中提取出与生存时间最相关的主成分。然后,在这些主成分上构建 Cox 回归模型,从而预测生存时间或风险。

分析流程

1.导入
rm(list = ls())
library(survival)
library(plsRcox)
2.plsRcox分析-官网示例数据
data(micro.censure)
train_time <- micro.censure$survyear[1:80]
train_status <- micro.censure$DC[1:80]
test_time <- micro.censure$survyear[81:117]
test_status <- micro.censure$DC[81:117]

data(Xmicro.censure_compl_imp)
dat_mic <- apply((as.matrix(Xmicro.censure_compl_imp)),
                       FUN="as.numeric",
                       MARGIN=2)[1:80,]
dat_mic_df <- data.frame(dat_mic)

# 计算偏差值
DR_coxph(train_time,train_status,plot = T,scaleY = F)

线与线之间不能有太大偏差, emm 但是怎么样才算有很大偏差呢?一般都会接着用..cv验证+构建最佳模型

# cv.plsRcox
set.seed(123456)
cv.plsRcox.res=cv.plsRcox(list(x=dat_mic,
                               time=train_time,
                               status=train_status),
                          nt=10,verbose = FALSE)

# plsRcox
fit <- plsRcox(dat_mic,
               time=train_time,
               event=train_status,
               nt=cv.plsRcox.res$lambda.min5,
               alpha.pvals.expli = 0.05# 仅包含 p 值小于 0.05 的变量              
               sparse = T,  # 构建稀疏模型             
               pvals.expli = T # 返回每个变量的p值
               )
fit$Coeffs
#               [,1]
# D18S61   0.0000000
# D17S794  0.0000000
# D13S173  0.0000000
# D20S107  1.2100242
# TP53     0.0000000
# D9S171   0.0000000
# D8S264   0.0000000
# D5S346   0.0000000
# D22S928  0.0000000
# D18S53   0.0000000
# D1S225   0.0000000
# D3S1282 -1.0827346
# D15S127  0.0000000
# D1S305   0.0000000
# D1S207   0.0000000
# D2S138  -0.8998443
# D16S422  0.0000000
# D9S179   0.0000000
# D10S191  0.0000000
# D4S394   0.0000000
# D1S197   0.0000000
# D6S264   0.0000000
# D14S65   0.0000000
# D17S790  0.0000000
# D5S430   0.0000000
# D3S1283  0.0000000
# D4S414   0.0000000
# D8S283   0.0000000
# D11S916  0.0000000
# D2S159   0.0000000
# D16S408 -0.9541807
# D6S275   0.0000000
# D10S192  0.0000000
# sexe     0.0000000
# Agediag  0.0000000
# Siege    0.0000000
# T        0.7414690
# N        0.6921509
# M        0.0000000
# STADE    0.4887513

alpha.pvals.expli = 0.05 就可以过滤很多变量,这个值可以自行设置,系数为0的话就是被剔除的变量了~

Y轴(iAUC):这是iAUC值,代表模型在不同组件数量下的预测性能。较高的iAUC值表明更好的预测性能。理想情况下,iAUC值接近1表示模型具有较高的预测准确性。

X轴(nbr of components):表示使用的组件数量。组件数量越多,模型可能会变得更加复杂,但也可能会出现过拟合。因此,我们需要找到一个平衡点,使得模型既具有良好的预测能力又不过度复杂化。

曲线的趋势

  1. 从图中可以看出,在使用1-5个组件时,iAUC值逐渐上升并达到一个高峰,这表明在这个范围内增加组件数量对模型性能提升有积极影响。
  2. 在第5个组件后,iAUC值出现下降,并逐渐趋于稳定。这可能表示在5个组件后,增加组件数量并不会显著提高模型的性能,甚至可能导致模型过拟合,导致预测性能的下降。

虚线标记的意义:标记“最佳组件数”,即在这条线对应的组件数量下,模型的性能最优。根据图中的趋势,最佳组件数大概在第5个组件附近,之后的iAUC值开始波动和下降。

后续就可以用predict函数去对验证数据进行分析啦~

参考资料:

  1. PLS Generalised Regression. Computational Statistics and Data Analysis, 48(1), pp. 17-46.
  2. plsRcox:https://github.com/fbertran/plsRcox https://cran.r-project.org/web/packages/plsRglm/plsRglm.pdf
  3. 叉叉滴同学的生信笔记:https://mp.weixin.qq.com/s/DWKrlPaXLrQo-mXqs6YgFA

:若对内容有疑惑或者有发现明确错误的朋友,请联系后台(欢迎交流)。更多内容可关注公众号:生信方舟

- END -


生信方舟
执着医学,热爱科研。站在巨人的肩膀上,学习和整理各种知识。
 最新文章