在之前的系列中我们介绍了多种机器学习算法。如今机器学习算法的应用范围很是广泛。今天,我们基于几种机器学习算法实现生存资料(以基因组学数据为例)的特征筛选及预测模型的建立和评价。通过这次推文可以收获如下:
1、基于LASSO回归实现生存资料(以生物信息学数据为例)的特征选择,选择关键基因用于后续分析;
2、基于XGBoost算法实现生存资料的特征选择;
3、基于随机森林实现生存资料的特征选择;
4、基于以上3种ML算法获取交集基因,用于后续模型建立;
5、基于关键基因,使用autoReg实现自助多因素回归分析;
6、多因素回归分析结果的森林图可视化;
7、基于多种ML算法及Cox回归筛选后得到的关键基因建立预测模型(列线图);
8、预测模型的评价
以下为通过本次推文得到的Figure。
三种机器学习算法特征筛选过程
模型建立及评价过程
这里我们主要讲实操,对于理论知识,我们之前的推文有提及,所以这里不再赘述。另外,需要注意的是,这里我们主要讲以上过程的实现,所以小编没有进一步分割数据做内部验证。另外,由于数据是小编自己随便找的,所以示例数据中的结果不一定代表模型的真实表现,这取决于自己的数据。话不多说,下面我们正式开始吧。 数据加载 LASSO回归生存资料特征筛选load(file ="inputdata.Rda")
mycol<-c("#8DD3C7","#FFFFB3","#BEBADA","#FB8072","#80B1D3",
"#FDB462","#B3DE69","#FCCDE5","#D9D9D9","#BC80BD",
"#E41A1C","#377EB8","#4DAF4A","#FF7F00","#FFFF33" )
library(tidyverse)
library(glmnet)
library(survival)
set.seed(123)
inputdata%>%
mutate(OS=ifelse(OS<=0,OS+1,OS))->inputdata
x<-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特征选择
可试读25%
微信扫一扫
关注该公众号