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-5个组件时,iAUC值逐渐上升并达到一个高峰,这表明在这个范围内增加组件数量对模型性能提升有积极影响。 在第5个组件后,iAUC值出现下降,并逐渐趋于稳定。这可能表示在5个组件后,增加组件数量并不会显著提高模型的性能,甚至可能导致模型过拟合,导致预测性能的下降。
虚线标记的意义:标记“最佳组件数”,即在这条线对应的组件数量下,模型的性能最优。根据图中的趋势,最佳组件数大概在第5个组件附近,之后的iAUC值开始波动和下降。
后续就可以用predict函数去对验证数据进行分析啦~
参考资料:
PLS Generalised Regression. Computational Statistics and Data Analysis, 48(1), pp. 17-46. plsRcox:https://github.com/fbertran/plsRcox https://cran.r-project.org/web/packages/plsRglm/plsRglm.pdf 叉叉滴同学的生信笔记:https://mp.weixin.qq.com/s/DWKrlPaXLrQo-mXqs6YgFA
注:若对内容有疑惑或者有发现明确错误的朋友,请联系后台(欢迎交流)。更多内容可关注公众号:生信方舟
- END -