• 主页
  • 课程

    关于课程

    • 课程归档
    • 成为一名讲师
    • 讲师信息
    教学以及管理操作教程

    教学以及管理操作教程

    ¥1,000.00 ¥100.00
    阅读更多
  • 特色
    • 展示
    • 关于我们
    • 问答
  • 事件
  • 个性化
  • 博客
  • 联系
  • 站点资源
    有任何问题吗?
    (00) 123 456 789
    weinfoadmin@weinformatics.cn
    注册登录
    恒诺新知
    • 主页
    • 课程

      关于课程

      • 课程归档
      • 成为一名讲师
      • 讲师信息
      教学以及管理操作教程

      教学以及管理操作教程

      ¥1,000.00 ¥100.00
      阅读更多
    • 特色
      • 展示
      • 关于我们
      • 问答
    • 事件
    • 个性化
    • 博客
    • 联系
    • 站点资源

      生信星球

      • 首页
      • 博客
      • 生信星球
      • 听起来很霸气用起来并不难的随机森林

      听起来很霸气用起来并不难的随机森林

      • 发布者 weinfoeditor
      • 分类 生信星球
      • 日期 2020年2月5日
      测试开头

       今天是生信星球陪你的第530天


         大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~

         就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~

         这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!

      花花写于2020-02-05 今天豆豆点了个外卖,以前可以送到房间门口,现在只能去大门口取了,而且回来还需要例行检查。感谢疫情中守护我们的工作人员,愿一切快点好起来。
      今天继续学习机器学习算法做生存模型,高大上的随机森林,听起来需要学两年,但初步应用的代码很简单,并不是搞懂了算法、原理才能去用。这个运行时间很长,有点考验电脑哦。

      1.准备输入数据

      输入数据是TCGA的表达矩阵expr、临床信息meta和group_list。保存为forest.Rdata了,在生信星球公众号后台聊天窗口回复“森林”即可获得。

      1load("forest.Rdata")
      2exprSet = expr[,group_list=="tumor"]
      3
      4## 必须保证生存资料和表达矩阵,两者一致
      5all(substring(colnames(exprSet),1,12)==meta$ID)
      6#> [1] TRUE
      1library(randomForest)
      2library(ROCR)
      3library(genefilter)
      4library(Hmisc)

      2.构建随机森林模型

      输入数据是表达矩阵(仅含tumor样本)和对应的生死。

      高能:此处可能需要运行十几分钟,取决于你电脑的配置,配置很不好就不要跑这一步了,容易卡死,看看代码理解一下意思就好。
       1x=t(log2(exprSet+1))
      2y=meta$event
      3#构建模型,一个叫randomForest的函数,运行时间很长,存Rdata跳过
      4tmp_rf=file.path('./Rdata/TCGA_KIRC_miRNA_rf_output.Rdata')
      5if(!file.exists(tmp_rf)){
      6  rf_output=randomForest(x=x, y=y,importance = TRUE, ntree = 10001, proximity=TRUE )
      7  save(rf_output,file = tmp_rf)
      8}
      9load(file = tmp_rf)
      10#top30的基因
      11varImpPlot(rf_output, type=2, n.var=30, scale=FALSE, 
      12           main="Variable Importance (Gini) for top 30 predictors",cex =.7)
      听起来很霸气用起来并不难的随机森林
       1rf_importances=importance(rf_output, scale=FALSE)
      2head(rf_importances)
      3#>                   %IncMSE IncNodePurity
      4#> hsa-let-7a-1 0.0005839108     0.3952803
      5#> hsa-let-7a-2 0.0006337582     0.4783033
      6#> hsa-let-7a-3 0.0005867823     0.4106104
      7#> hsa-let-7b   0.0005974527     0.2871573
      8#> hsa-let-7c   0.0003302193     0.2344674
      9#> hsa-let-7d   0.0003187660     0.1929435
      10#解释量top30的基因,和图上是一样的,从下往上看。
      11choose_gene=rownames(tail(rf_importances[order(rf_importances[,2]),],30))

      3.模型预测和评估

      3.1自己预测自己

       1rf.prob <- predict(rf_output, x)
      2re=cbind(y ,rf.prob)
      3head(re)
      4#>                              y   rf.prob
      5#> TCGA-A3-3307-01A-01T-0860-13 0 0.1094791
      6#> TCGA-A3-3308-01A-02R-1324-13 0 0.1719678
      7#> TCGA-A3-3311-01A-02R-1324-13 1 0.6914492
      8#> TCGA-A3-3313-01A-02R-1324-13 1 0.7408259
      9#> TCGA-A3-3316-01A-01T-0860-13 0 0.1635503
      10#> TCGA-A3-3317-01A-01T-0860-13 0 0.1204913

      3.2 箱线图

      对预测结果进行可视化。以实际的生死作为分组,画箱线图整体上查看预测结果。

      1re=as.data.frame(re)
      2colnames(re)=c('event','prob')
      3re$event=as.factor(re$event)
      4library(ggpubr) 
      5p1 = ggboxplot(re, x = "event", y = "prob",
      6               color = "event", palette = "jco",
      7               add = "jitter")+ stat_compare_means()
      8p1
      听起来很霸气用起来并不难的随机森林

      对比lasso回归,这个似乎更好一些?但这个只是自己预测自己,太高也不是好事。还需要看预测集的结果。

      3.3 AUC值

      1library(ROCR)
      2#library(caret)
      3
      4pred <- prediction(re[,2], re[,1])
      5auc = performance(pred,"auc")@y.values[[1]]
      6auc
      7#> [1] 1

      自己预测自己,auc值竟然是1。ROC曲线我就不画了,和前面的几个模型画的代码一样。

      4.切割数据构建模型并预测

      4.1 切割数据

      用R包caret切割数据,生成的结果是一组代表列数的数字,用这些数字来给表达矩阵和meta取子集即可。

      1library(caret)
      2set.seed(12345679)
      3sam<- createDataPartition(meta$event, p = .5,list = FALSE)
      4train <- exprSet[,sam]
      5test <- exprSet[,-sam]
      6train_meta <- meta[sam,]
      7test_meta <- meta[-sam,]

      4.2 切割后的train数据集建模

      和上面的建模方法一样。

       1#建模
      2x = t(log2(train+1))
      3y = train_meta$event
      4tmp_rf=file.path('./Rdata/TCGA_KIRC_miRNA_t_rf_output.Rdata')
      5if(!file.exists(tmp_rf)){
      6  rf_output=randomForest(x=x, y=y,importance = TRUE, ntree = 10001, proximity=TRUE )
      7  save(rf_output,file = tmp_rf)
      8}
      9load(file = tmp_rf)
      10
      11choose_gene=rownames(tail(rf_importances[order(rf_importances[,2]),],30))

      5.模型预测和评估

      用训练集构建模型,预测测试集的生死。

       1x = t(log2(test+1))
      2y = test_meta$event
      3rf.prob <- predict(rf_output, x)
      4re=cbind(y ,rf.prob)
      5re=as.data.frame(re)
      6colnames(re)=c('event','prob')
      7re$event=as.factor(re$event)
      8library(ggpubr) 
      9p1 = ggboxplot(re, x = "event", y = "prob",
      10               color = "event", palette = "jco",
      11               add = "jitter")+ stat_compare_means()
      12p1
      听起来很霸气用起来并不难的随机森林

      再看AUC值。

      1library(ROCR)
      2# 训练集模型预测测试集
      3pred <- prediction(re[,2], re[,1])
      4auc= performance(pred,"auc")@y.values[[1]]
      5auc
      6#> [1] 0.7118081

      emmm。。。还行。

      插个小广告!

      生信零基础入门学习小组长期报名中

      GEO数据挖掘广州专场课程

      再给生信技能树打个call!

      一起来学单细胞

      全球公益巡讲、招学徒

      测试结尾

      请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!

      • 分享:
      作者头像
      weinfoeditor

      上一篇文章

      用了这么久的bowtie2,却不知道它的结果含义?
      2020年2月5日

      下一篇文章

      (未测试)RNAseq数据,下载GEO中的FPKM文件后该怎么下游分析
      2020年2月6日

      你可能也喜欢

      8-1651673488
      生信零基础入门学习小组长期报名中(2022仍继续)
      7 4月, 2022
      2-1651673738
      简化版的ROC曲线
      21 2月, 2022
      8-1651674718
      支持向量机模型
      19 11月, 2021

      搜索

      分类

      • R语言
      • TCGA数据挖掘
      • 单细胞RNA-seq测序
      • 在线会议直播预告与回放
      • 数据分析那些事儿分类
      • 未分类
      • 生信星球
      • 老俊俊的生信笔记

      投稿培训

      免费

      alphafold2培训

      免费

      群晖配置培训

      免费

      最新博文

      Nature | 单细胞技术揭示衰老细胞与肌肉再生
      301月2023
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      301月2023
      如何快速批量修改 Git 提交记录中的用户信息
      261月2023
      logo-eduma-the-best-lms-wordpress-theme

      (00) 123 456 789

      weinfoadmin@weinformatics.cn

      恒诺新知

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      链接

      • 课程
      • 事件
      • 展示
      • 问答

      支持

      • 文档
      • 论坛
      • 语言包
      • 发行状态

      推荐

      • iHub汉语代码托管
      • iLAB耗材管理
      • WooCommerce
      • 丁香园论坛

      weinformatics 即 恒诺新知。ICP备案号:粤ICP备19129767号

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      要成为一名讲师吗?

      加入数以千计的演讲者获得100%课时费!

      现在开始

      用你的站点账户登录

      忘记密码?

      还不是会员? 现在注册

      注册新帐户

      已经拥有注册账户? 现在登录

      close
      会员购买 你还没有登录,请先登录
      • ¥99 VIP-1个月
      • ¥199 VIP-半年
      • ¥299 VIP-1年
      在线支付 激活码

      立即支付
      支付宝
      微信支付
      请使用 支付宝 或 微信 扫码支付
      登录
      注册|忘记密码?