Mime1-一个神奇的机器学习整合包

2024-08-09 08:17:19 浏览数 (1)

各位观众老爷大家好,好久没有没有更新自己的板块了,应凑齐六个字吧的邀请,今天给大家分享101种机器学习的神奇R包Mine1的使用方法(其实很多老师也介绍了一下这个包的使用方法,我就拾人牙慧吧,哈哈哈).

简短介绍一下这个R包的出处,2024年6月29日,一篇发表在Computational and Structural Biotechnology Journal [IF: 4.4]杂志上的文章《Mime: A flexible machine-learning framework to construct and visualize models for clinical characteristics prediction and feature selection》(DOI: 10.1016/j.csbj.2024.06.035)引起了我极大的兴趣,当然这还是要感谢生信碱移老师的分享,下面废话不多说,我们开始吧,主要是我个人的使用感受。 首先当然是R包的安装,作者在文中提供了相关的github链接 :https://github.com/l-magnificence/Mime

1.Mime的安装,下面是R包的详细代码:

代码语言:javascript复制
# options("repos"= c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
# options(BioC_mirror="http://mirrors.tuna.tsinghua.edu.cn/bioconductor/")
if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager")

depens<-c('GSEABase', 'GSVA', 'cancerclass', 'mixOmics', 'sparrow', 'sva' , 'ComplexHeatmap' )
for(i in 1:length(depens)){
 depen<-depens[i]
 if (!requireNamespace(depen, quietly = TRUE))  BiocManager::install(depen,update = FALSE)
}

if (!requireNamespace("CoxBoost", quietly = TRUE))
 devtools::install_github("binderh/CoxBoost")

if (!requireNamespace("fastAdaboost", quietly = TRUE))
 devtools::install_github("souravc83/fastAdaboost")

if (!requireNamespace("Mime", quietly = TRUE))
 devtools::install_github("l-magnificence/Mime")
 
library(Mime1)

注:这个包的安装一般还是很顺利的,一般不会出现什么状况,有问题的话,可以试试挂个梯子试试。

2.正式分析中的数据准备

代码语言:javascript复制
load("./Example.cohort.Rdata")
list_train_vali_Data[["Dataset1"]][1:5,1:5]

作者这里的示例数据保存的格式虽然是Rdata,但是仔细查看的话数据类型是list,下面是我个人写的代码,有需要的可以自取,

代码语言:javascript复制
# 读取TXT文件,并将其存储到数据框中,保留行名和列名
dataset1 <- read.table("tcga.expTime.txt", header = TRUE, row.names = 1, check.names = FALSE, sep = "t")
dataset2 <- read.table("31210.expTime.txt", header = TRUE, row.names = 1, check.names = FALSE, sep = "t")

# 将两个数据框合并到一个列表中
list_train_vali_Data <- list(Dataset1 = dataset1, Dataset2 = dataset2)##Dataset1是训练数据集,其他数据集作为验证数据集
save(list_train_vali_Data,file = 'zj.Rdata')
#当然了,我们还需要准备我们所要研究的gene列表
gene <- c(TP53,BCL2................)#括号中就是自己的基因

好的,这里开始,我们的数据准备工作就结束啦。

3.接下来就是正式构建预后预测模型了

代码语言:javascript复制
library(Mime)#这里不知道是不是作者笔误,大家运行的时候记得是library(Mime1)
load("./Example.cohort.Rdata")
load("./genelist.Rdata")
res <- ML.Dev.Prog.Sig(train_data = list_train_vali_Data$Dataset1,
                     list_train_vali_Data = list_train_vali_Data,
                     unicox.filter.for.candi = T,
                     unicox_p_cutoff = 0.05,
                     candidate_genes = genelist,
                     mode = 'all',nodesize =5,seed = 5201314 )

绘制每个模型的 C 指数:

代码语言:javascript复制
cindex_dis_all(res,validate_set = names(list_train_vali_Data)[-1],order =names(list_train_vali_Data),width = 0.35)

绘制不同数据集中特定模型的 C 指数:

代码语言:javascript复制
cindex_dis_select(res,
                  model="StepCox[forward]   plsRcox",
                  order= names(list_train_vali_Data))#最有组合算法可以自由替换
代码语言:javascript复制
根据不同数据集中特定模型计算的风险评分绘制患者的生存曲线:
survplot <- vector("list",2) 
for (i in c(1:2)) {
  print(survplot[[i]]<-rs_sur(res, model_name = "StepCox[forward]   plsRcox",dataset = names(list_train_vali_Data)[i],
                              #color=c("blue","green"),
                              median.line = "hv",
                              cutoff = 0.5,
                              conf.int = T,
                              xlab="Day",pval.coord=c(1000,0.9)))
}
aplot::plot_list(gglist=survplot,ncol=2)

4.计算各模型的AUC分数

代码语言:javascript复制
all.auc.1y <- cal_AUC_ml_res(res.by.ML.Dev.Prog.Sig = res,train_data = list_train_vali_Data[["Dataset1"]],
                            inputmatrix.list = list_train_vali_Data,mode = 'all',AUC_time = 1,
                            auc_cal_method="KM")
all.auc.3y <- cal_AUC_ml_res(res.by.ML.Dev.Prog.Sig = res,train_data = list_train_vali_Data[["Dataset1"]],
                            inputmatrix.list = list_train_vali_Data,mode = 'all',AUC_time = 3,
                            auc_cal_method="KM")
all.auc.5y <- cal_AUC_ml_res(res.by.ML.Dev.Prog.Sig = res,train_data = list_train_vali_Data[["Dataset1"]],
                            inputmatrix.list = list_train_vali_Data,mode = 'all',AUC_time = 5,
                            auc_cal_method="KM")

.cal_AUC_ml_res()还提供了三种模式,应该和 uesd by 的模式保持一致ML.Dev.Prog.Sig()。 .AUC_time1年、2年、3年......,我们建议使用所有数据集中最短的生存时间。 在这里,作者仅绘制所有模型预测的 1 年 AUC:

代码语言:javascript复制
auc_dis_all(all.auc.1y,
            dataset = names(list_train_vali_Data),
            validate_set=names(list_train_vali_Data)[-1],
            order= names(list_train_vali_Data),
            width = 0.35,
            year=1)

绘制不同数据集中特定模型的 ROC:

代码语言:javascript复制
roc_vis(all.auc.1y,
        model_name = "StepCox[forward]   plsRcox",
        dataset = names(list_train_vali_Data),
        order= names(list_train_vali_Data),
        anno_position=c(0.65,0.55),
        year=1)

绘制不同数据集中特定模型的 1 年、3 年和 5 年 AUC:

代码语言:javascript复制
auc_dis_select(list(all.auc.1y,all.auc.3y,all.auc.5y),
               model_name="StepCox[forward]   plsRcox",
               dataset = names(list_train_vali_Data),
               order= names(list_train_vali_Data),
               year=c(1,3,5))

5.具体模型单变量cox回归的Meta分析

代码语言:javascript复制
unicox.rs.res <- cal_unicox_ml_res(res.by.ML.Dev.Prog.Sig = res,optimal.model = "StepCox[forward]   plsRcox",type ='categorical')
metamodel <- cal_unicox_meta_ml_res(input = unicox.rs.res)
meta_unicox_vis(metamodel,
                dataset = names(list_train_vali_Data))

● type包括categorical和continuous。categorical意味着根据风险评分的中位数将患者分为两个亚组。continuous表示使用连续风险评分执行单变量 Cox 回归。

6.与已有模型的比较

代码语言:javascript复制
rs.glioma.lgg.gbm <- cal_RS_pre.prog.sig(use_your_own_collected_sig = F,type.sig = c('LGG','GBM','Glioma'),
                                        list_input_data = list_train_vali_Data)
#

● cal_RS_pre.prog.sig()将根据之前论文的签名计算风险评分。

● 如果use_your_own_collected_sig设置为T,则应提供包含签名信息的数据框。数据框的列名称为模型、PMID、癌症、作者、系数和符号。model由第一作者的名字和论文的 PMID 组成。Cancer使用类似于 TCGA 格式的缩写。Author是第一作者的名字。Coef是每个变量的系数。symbol是基因名称。否则,我们使用我们收集的神经胶质瘤模型。

● 将特定模型的 HR 与之前发布的模型进行比较:

代码语言:javascript复制
HR_com(rs.glioma.lgg.gbm,
       res,
       model_name="StepCox[forward]   plsRcox",
       dataset=names(list_train_vali_Data),
       type = "categorical")
代码语言:javascript复制
cc.glioma.lgg.gbm <- cal_cindex_pre.prog.sig(use_your_own_collected_sig = F,type.sig = c('Glioma','LGG','GBM'),
                                            list_input_data = list_train_vali_Data)

● cal_cindex_pre.prog.sig()将根据之前论文(如函数)的签名计算 C-index cal_RS_pre.prog.sig()。

将具体型号与之前发布的型号的C-index进行比较:

代码语言:javascript复制
cindex_comp(cc.glioma.lgg.gbm,
            res,
            model_name="StepCox[forward]   plsRcox",
            dataset=names(list_train_vali_Data))

将特定模型与之前发布的模型的 AUC 进行比较:

代码语言:javascript复制
auc_comp(auc.glioma.lgg.gbm.1,
         all.auc.1y,
         model_name="StepCox[forward]   plsRcox",
         dataset=names(list_train_vali_Data))

7.免疫浸润分析 完成风险分组后,用户可以对分组后的数据进行下游分析。在这里,我们将 Mime 与 R 包immunodeconv结合起来,帮助用户快速预览免疫渗透。如果用户需要更精确的免疫渗透分析,可以自行微调参数。

代码语言:javascript复制
devo <- TME_deconvolution_all(list_train_vali_Data)

● 如果你想使用这个功能,你应该immunedeconv提前安装软件包。

● TME_deconvolution_all()包括来自immunedeconv::deconvolution_methods.默认情况下,反卷积方法设置为(“xcell”、“epic”、“abis”、“estimate”、“cibersort”、“cibersort_abs”)

● 显示结果:

代码语言:javascript复制
immuno_heatmap(res,
               devo,
               model_name="StepCox[backward]   plsRcox",
               dataset="Dataset1")

8.构建响应预测模型

代码语言:javascript复制
load("./Example.ici.Rdata")
load("./genelist.Rdata")
res.ici <- ML.Dev.Pred.Category.Sig(train_data = list_train_vali_Data$training,
                                      list_train_vali_Data = list_train_vali_Data,
                                      candidate_genes = genelist,
                                      methods = c('nb','svmRadialWeights','rf','kknn','adaboost','LogitBoost','cancerclass'),
                                      seed = 5201314,
                                      cores_for_parallel = 60
)

● ML.Dev.Pred.Category.Sig()使用机器学习算法开发二元变量的预测模型。

绘制不同数据集之间不同方法的 AUC:

代码语言:javascript复制
auc_vis_category_all(res.ici,dataset = c("training","validation"),
                     order= c("training","validation"))

绘制特定方法在不同数据集之间的 ROC:

代码语言:javascript复制
plot_list<-list()
methods <- c('nb','svmRadialWeights','rf','kknn','adaboost','LogitBoost','cancerclass')
for (i in methods) {
  plot_list[[i]]<-roc_vis_category(res.ici,model_name = i,dataset = c("training","validation"),
                                   order= c("training","validation"),
                                   anno_position=c(0.4,0.25))
}
aplot::plot_list(gglist=plot_list,ncol=3)

将 AUC 与其他已发表的与免疫治疗反应相关的模型进行比较:

代码语言:javascript复制
auc.other.pre <- cal_auc_previous_sig(list_train_vali_Data = list_train_vali_Data,seed = 5201314,
                                      train_data = list_train_vali_Data$training,
                                      cores_for_parallel = 32)

● cal_auc_previous_sig()将根据之前免疫治疗反应论文的签名计算 AUC。

● cores_for_parallel表示您可以选择用于并行操作的内核。如果多核条件错误,请设置cores_for_parallel为1。

具体模型的绘图对比结果:

代码语言:javascript复制
auc_category_comp(res.ici,
                  auc.other.pre,
                  model_name="svmRadialWeights",
                  dataset=names(list_train_vali_Data))
  1. 核心特征选择
代码语言:javascript复制
load("./Example.cohort.Rdata")
load("./genelist.Rdata")
res.feature.all <- ML.Corefeature.Prog.Screen(InputMatrix = list_train_vali_Data$Dataset1,
                                            candidate_genes = genelist,
                                            mode = "all",nodesize =5,seed = 5201314 )

● ML.Corefeature.Prog.Screen()提供all、single、 、三种模式all_without_SVM。allmode 表示使用全部八种方法("RSF"、"Enet"、"Boruta"、"Xgboost"、"SVM-REF"、"Lasso"、"CoxBoost'、"StepCox")进行选择。modesingle表示仅使用一种方法如果使用single模式,single_ml则应在八种方法中指定,因为 SVM 花费的时间太长,因此我们定义了其他七种方法用于选择all_without_SVM模式。

● 输出基因与患者的预后密切相关,筛查频率越高意味着越关键。

通过不同方法过滤的基因的翻转图:

代码语言:javascript复制
core_feature_select(res.feature.all)

绘制通过不同方法过滤的基因的排名:

代码语言:javascript复制
core_feature_rank(res.feature.all, top=20)

在这里,我们随机选择前两个基因来分析它们的相关性:

代码语言:javascript复制
dataset_col<-c("#3182BDFF","#E6550DFF")
corplot <- list()
for (i in c(1:2)) {
  print(corplot[[i]]<-cor_plot(list_train_vali_Data[[i]],
                               dataset=names(list_train_vali_Data)[i],
                               color = dataset_col[i],
                               feature1="PSEN2",
                               feature2="WNT5B",
                               method="pearson"))
}
aplot::plot_list(gglist=corplot,ncol=2)

根据不同数据集中特定基因的中位表达水平绘制患者的生存曲线:

代码语言:javascript复制
survplot <- vector("list",2) 
for (i in c(1:2)) {
  print(survplot[[i]]<-core_feature_sur("PSEN2", 
                                        InputMatrix=list_train_vali_Data[[i]],
                                        dataset = names(list_train_vali_Data)[i],
                                        #color=c("blue","green"),
                                        median.line = "hv",
                                        cutoff = 0.5,
                                        conf.int = T,
                                        xlab="Day",pval.coord=c(1000,0.9)))
}
aplot::plot_list(gglist=survplot,ncol=2)

到这里,所有的分析就结束了,有些个人使用感受和大家分享一下,不知道什么原因,可能是小编的debug能力不行,我使用自己数据只能跑出少量的图,比如就是我们的每个模型的 C 指数、upset以及基因的排名的棒棒糖图,那其实,我已经拿到了自己想要的分析结果了,这种情况下,有了Mine1这个神奇的R包,快餐式分析方法可能是大多数拿来党的福音,大家赶快用起来吧。

小编再附上简单的方法学写作:

101种机器学习算法组合筛选hub gene

本研究利用Mime1包和其他相关R包进行多种分析,构建并评估了多种预测模型,用于预后和药物反应的预测。首先,使用ML.Dev.Prog.Sig函数,基于候选基因列表和训练数据构建预后预测模型,并使用不同数据集进行验证,生成预后预测模型的C-index分布图和生存曲线。随后,计算1年、3年和5年的AUC,并绘制不同时间点的AUC图,比较不同数据集间的AUC表现。通过单变量Cox回归的Meta分析,生成Meta分析的森林图,展示不同数据集间的预后模型效果。接着,计算已发表的Glioma、LGG和GBM预后模型的风险评分,比较特定模型与已发表模型在不同数据集间的HR、C-index和AUC,并生成比较图。使用immunedeconv包进行肿瘤微环境免疫浸润分析,并绘制免疫浸润热图。构建药物反应预测模型时,使用ML.Dev.Pred.Category.Sig函数,基于训练数据和候选基因列表,构建多种分类模型(如nb、svmRadialWeights、rf等),并比较不同模型在训练集和验证集中的AUC表现。最后,通过ML.Corefeature.Prog.Screen函数筛选核心特征基因,并通过不同方法生成筛选基因的Upset图和排名图,分析特定基因的相关性和生存曲线。本研究系统地构建和评估了多种预测模型,分析了免疫浸润情况,并识别了核心特征基因,为进一步的生物标志物发现和临床应用提供了重要的参考和数据支持。

写在最后,来杭州已经有段时间啦,感谢目前遇到的所有人。但是!说实话,我玩互动游戏确实不行,拿同事的话我就是个游戏黑洞,哈哈哈,收!

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

0 人点赞