基于多种机器学习算法实现生存资料特征选择及预测模型建立和评价

Roger 不言 劝人学医TDLP 2023-09-25 15:39
前言
基于LASSO回归、随机森林和XGBoost实现生存资料(转录组学数据)的特征筛选,通过各个模型的特征重要性评价筛选最重要特征,进一步取交集确定为结局事件预后最重要特征,进入预后模型的建立。通过autoReg一键实现变量单多因素Cox回归分析,使用森林图可视化结果。最终建立列线图并评价模型区分度、校正度和临床净获益率。

在之前的系列中我们介绍了多种机器学习算法。如今机器学习算法的应用范围很是广泛。今天,我们基于几种机器学习算法实现生存资料(以基因组学数据为例)的特征筛选及预测模型的建立和评价。通过这次推文可以收获如下:

1、基于LASSO回归实现生存资料(以生物信息学数据为例)的特征选择,选择关键基因用于后续分析;

2、基于XGBoost算法实现生存资料的特征选择;

3、基于随机森林实现生存资料的特征选择;

4、基于以上3种ML算法获取交集基因,用于后续模型建立;

5、基于关键基因,使用autoReg实现自助多因素回归分析;

6、多因素回归分析结果的森林图可视化;

7、基于多种ML算法及Cox回归筛选后得到的关键基因建立预测模型(列线图);

8、预测模型的评价


以下为通过本次推文得到的Figure。

图片

三种机器学习算法特征筛选过程

图片

模型建立及评价过程

这里我们主要讲实操,对于理论知识,我们之前的推文有提及,所以这里不再赘述。另外,需要注意的是,这里我们主要讲以上过程的实现,所以小编没有进一步分割数据做内部验证。另外,由于数据是小编自己随便找的,所以示例数据中的结果不一定代表模型的真实表现,这取决于自己的数据。话不多说,下面我们正式开始吧。

图片

数据加载

load(file ="inputdata.Rda")mycol<-c("#8DD3C7","#FFFFB3","#BEBADA","#FB8072","#80B1D3",         "#FDB462","#B3DE69","#FCCDE5","#D9D9D9","#BC80BD",         "#E41A1C","#377EB8","#4DAF4A","#FF7F00","#FFFF33" )
图片

LASSO回归生存资料特征筛选

library(tidyverse)library(glmnet)library(survival)set.seed(123)inputdata%>%  mutate(OS=ifelse(OS<=0,OS+1,OS))->inputdatax<-as.matrix(inputdata[,3:ncol(inputdata)])y<-data.matrix(Surv(inputdata$OS,inputdata$Event))lasso<- glmnet(x, y,              family = 'cox',              nlambda=1000,              alpha=1)
lassoCV <- cv.glmnet(x, y, family = "cox", type.measure = "deviance", nfolds =10)

下面我们绘制LASSO回归的变量惩罚过程及10折CV,获取最佳lambda值。

#绘制CV曲线图,选择最佳lambda值par(mfrow=c(1,2))plot(lasso, xvar="lambda")plot(lassoCV)

图片

接着我们查看交叉验证的结果,可以看到lambda.min对应的非零特征为11个

lassoCV# Call:  cv.glmnet(x = x, y = y, type.measure = "deviance", nfolds = 10,      family = "cox") # # Measure: Partial Likelihood Deviance # # Lambda Index Measure     SE Nonzero# min 0.03361     8   11.63 0.3476      11# 1se 0.06446     1   11.65 0.3257       0

我们进一步提取这11个特征

se_lambda<-lassoCV$lambda.min #求出最小值一个标准误的λ值se_coef<-coef(lassoCV, s = "lambda.min")##λ=最小值一个标准误时各变量的系数值se_coef
index<-which(se_coef!=0)#非零系数coef<-se_coef[index]#对应回归系数diffvariables=row.names(se_coef)[index]#非零变量lasso.result.se<-cbind(diffvariables,coef)#输出结果lasso.result.se<-as.data.frame(lasso.result.se)lasso.result.se$coef<-as.numeric(lasso.result.se$coef)

图片

下面我们把非零回归系数和其对应的回归系数可视化。

ggplot(aes(x=reorder(diffvariables,coef),y=coef,fill=diffvariables),data=lasso.result.se)+  geom_col()+  coord_flip()+  theme_bw()+  labs(x="")+  ggtitle("LASSO identified variables")+  scale_fill_brewer(palette = "Set3")+  theme(legend.position = "")

图片

好了,通过LASSO我们筛选出了11个比较重要的基因,下面我们将进行XGBoost的生存分析,通过XGBoost实现特征选择。

图片

XGBoost特征选择

1元 = 10微信豆

可试读25%

1元 = 10微信豆
收录于合集 #R学习
 45
上一篇R学习|感受ggplot2的魅力—ggplot2复现Nature可视化(五)下一篇多种机器学习算法实现分类任务特征筛选

微信扫一扫
关注该公众号