R语言ggplot2 | 热图+随机森林重要性!升级版~

📋文章目录

   今天推出一个升级版: ggrf_ggcor_plot 的函数。只需要输入 响应变量的矩阵解释变量的矩阵 ,就能轻松一键生成随机森林重要性+相关性热图。

原图

   所需复现的随机森林变量重要性+相关性热图:

这整张图由两张结构相似的子图组成,分别代表玉米和水稻。以左侧图为例,它分为两个主要部分。上方的柱状图显示了各个土壤环境变量在随机森林模型中的解释量,下方的热图表示微生物物种丰度与土壤环境变量之间的相关性。其中,热图中每列x轴特定的土壤环境变量作为随机森林模型中的因变量,每个微生物物种的丰度作为随机森林模型中的特征变量。热图中的小圆圈的大小则表示每个特征变量在随机森林模型中的重要性(对应的%MSE值,且p<0.05)。总体来说,这张图旨在揭示不同土壤环境变量如何影响微生物群落的丰度,以及这些微生物群落在随机森林模型中对各个土壤环境变量的重要性。

复现

定义ggrf_ggcor_plot()函数

r 复制代码
source("ggrf_ggcor_plot.R")

重新定义了ggrf_ggcor_plot()函数,该函数能够做到一键生图。

需要注意的是 :这个函数是在R版本4.2.2基础上定义的。此外,只保证在响应变量和特征变量的数据集样本量相同下进行运行。

主要参数*:

  • response_data:响应变量的数据集,格式为数据框。(因变量)
  • feature_data:解释变量的数据集,格式为数据框。(自变量)
  • seed:种子数,保证每次运行结果一致,必须为整数。

其余参数可以默认,主要包括相关性分析的参数、随机森林及特征变量重要性等细节参数。函数的三个点"..."表示传参用法,这里主要在进行可视化随机森林模型解释量的柱状图中使用到。

输出结果

  • list列表
  • rf_results包括每个随机森林模型的摘要及解释量和p值;
  • cor_df是两个数据集的相关性分析结果,包括对应名称、相关性系数及p值;
  • rf_plot是每个随机森林模型的解释量及p值是否显著的ggplot可视化结果;
  • cor_plot是响应变量和解释变量两个数据集的相关性热图,颜色表示正负,深浅表示大小,圆圈表示的随机森林中不同特征变量对因变量的重要性(只展示%MSE对应p<0.05的)

加载数据集

  • 加载微生物数据
r 复制代码
OTU <- openxlsx::read.xlsx("OTU.xlsx", 1)
head(OTU)

行为样本,列为微生物群落种类。

  • 加载土壤环境数据
r 复制代码
ENV <- openxlsx::read.xlsx("ENV.xlsx", 1)
head(ENV)

行为样本,列为土壤环境变量。

一键出图

r 复制代码
rf_cor_result <- ggrf_ggcor_plot(ENV, OTU, seed = 123, rfp_num_cores = 12, limits = c(-10, 80), breaks = seq(0, 80, 20))
rf_cor_result$rf_plot
rf_cor_result$cor_plot
rf_cor_result$rf_cor_plot

这里,我们处理选择了响应变量解释变量的两个数据集,还设定了seed种子数=123,并设置了在计算计算每个特征变量的重要性%MSE及p值时的核心数=12,这样可以加快我们的运行速度。

需要注意的是 我上面提到了"..."作为传参,我们设定在了ggplot2可视化y轴范围的函数中,因此为了让整个图的比例更协调,我定义了y轴的上下限范围limits = c(-10, 80)以及相应的范围间隔breaks = seq(0, 80, 20)

图1,显示的是随机森林模型的解释量。

图2,显示的是相关性分析热图。

图3,是我们的目标图,随机森林重要性+相关性热图。

至此,一键出图已经完成。考虑到大家可能对图形的展示风格或者类型持有不同想法和意见,所以输出的结果为list,也保留了对应随机森林重要性和相关性热图的数据。

用一下代码就可以调用:

  • 相关性分析的数据结果
r 复制代码
rf_cor_result$cor_df
  • 随机森林模型的数据结果
r 复制代码
rf_cor_result$rf_results

函数优点

  • 便捷使用:一键生成图表,适合快速呈现分析结果。
  • 多样输出:提供多种输出选项,以满足不同需求的用户。
  • 灵活参数:可根据需要自定义参数,具备推广和定制的潜力。
相关推荐
长不胖的路人甲11 分钟前
二叉排序树(BST)Java 完整实现 + 删除思路详解
java·开发语言·算法
geovindu11 分钟前
python: Breadth First Search Algorithm and Depth First Search Algorithm
开发语言·后端·python·算法·搜索算法
小大宇2 小时前
python sqlalchemy 案例
开发语言·python
名字还没想好☜2 小时前
Go 结构体内存对齐:调整字段顺序,同样的字段省下 40% 内存
开发语言·后端·golang·go·内存对齐
玛丽莲茼蒿2 小时前
很难出错的Spring5(十)—— IOC进阶
java·开发语言·jvm
Ulyanov2 小时前
雷达导引头仿真中的坐标系——从惯性系到量测角
开发语言·python·算法·系统仿真·雷达信号处理·雷达导引头
上海安当技术3 小时前
车间电脑指纹登录怎么做?从 FIDO2 公钥体系到统一身份认证的技术拆解
开发语言·电脑·php
前鼻音太阳熊3 小时前
【MES系统】- 工业HMI状态机可视化实践:从手写SVG到Cytoscape.js的技术选型与踩坑
开发语言·javascript·ecmascript
阿米亚波3 小时前
【C++ STL】std::array
java·开发语言·c++
wuyk5553 小时前
66.嵌入式C语言进阶:共用体(Union)实战指南——单片机内存省一半的神级技巧
c语言·开发语言·stm32·单片机·嵌入式硬件