R语言|Mantel Test 热图相关性分析(极致详细版)

一、R语言下载安装及环境配置

1.1 R语言介绍

R是用于统计分析绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。(可以画出很多好看且逻辑性极强的图)

1.2 R语言下载

网络搜索“R语言”,点击进入官网

或者直接访问官网链接

R: The R Project for Statistical Computingicon-default.png?t=O83Ahttps://www.r-project.org/

点击CRAN
选择一个国内镜像源下载链接(这样下载会更快一些)
选择自己合适的电脑系统下载相对应的R语言版本

1.3 R语言安装

双击安装包打开

 

选择安装位置,最后的位置会自动出现下载的R语言版本号

 

R语言主要是为了配置运行环境,后面采用Rstudio进行代码编辑,所以不用添加快捷方式
稍事等待

1.4 R语言环境配置

为什么需要配置环境变量

  1. ‌确保R命令可以被系统识别‌:通过配置环境变量,系统可以在任何目录下识别R命令,方便用户随时启动R会话。

  2. ‌加载R包和库‌:配置正确的路径可以确保R能够找到并加载安装的包和库,避免加载失败的问题。

进入设置,搜索“环境变量”,点击“编辑系统环境变量”

新建R语言的环境变量
输入自己的R语言bin文件夹安装位置
打开系统CMD,输入“r”,出现以上内容,说明环境配置成功。如果不知道如何打开CMD,可以自行度娘。

二、RStudio下载安装

RStudio 是一个流行的集成开发环境(IDE),专门用于使用 R 语言进行数据分析、统计建模、可视化和报告。RStudio 提供了一个用户友好的界面,使得编写 R 代码、管理数据和输出结果变得更加容易。

下载网址

RStudio Desktop - Positicon-default.png?t=O83Ahttps://posit.co/download/rstudio-desktop

确保R语言已经安装

 

建议和R语言安装在同一路径下,且路径中最好不要有中文,否则可能会报错

 

 


三、Mantel Test 代码运行

Mantel 测试(Mantel Test)是一种统计方法,用于评估两个距离矩阵之间的相关性。这种方法在生态学、遗传学、流行病学和其他领域中广泛应用,用于探究不同变量间的相关性,比如物种之间的相似性与环境变量之间的相似性。

基本思想

Mantel 测试的基本思想是比较两个距离矩阵:一个表示变量间的不相似性(如遗传距离、功能性状距离等),另一个表示观测到的或计算得到的距离(如地理距离、环境变量距离等)。如果两个矩阵之间的相关性显著,则表明变量间存在一定的关联性。

计算步骤

  1. 计算距离矩阵:首先,需要为两组数据计算距离矩阵。距离矩阵中的每个元素表示相应行和列变量之间的距离或不相似度。
  2. 应用Mantel 公式:使用公式计算两个矩阵之间的相关性统计量。该统计量反映了两个矩阵间的线性关系。
  3. 确定显著性:通过比较该统计量与在零假设下的期望分布来确定相关性是否显著。零假设通常表示两个矩阵间没有相关性。
    数据集介绍:
  • varespec 描述了24块样地中44种植物的丰度信息
  • varechem 描述了这24块样地土壤的14个性质参数。

3.1 相关代码

# 更新linkET包
## install.packages("devtools")
# devtools::install_github("Hy4m/linkET", force = TRUE)

# if (!require(package_name)) {
#   install.packages("package_name")
#   library(package_name)
# }
# 这段代码首先尝试加载包,如果包没有安装,它会自动安装并加载该包


# 导入R包
library(linkET)
library(dplyr)
library(ggplot2)

# 读取R语言自带的两个数据库作为示范案例
data("varechem", package = "vegan")
data("varespec", package = "vegan")

#把varechem拆分为4个类别的矩阵,分别与varespec的每列进行mantel_test
mantel <- mantel_test(varespec,varechem,
                      spec_select = list(Spec01 = 1:7,
                                         Spec02 = 8:18,
                                         Spec03 = 19:37,
                                         Spec04 = 38:44)) %>%
#把连续型变量划分为区间,转换为因子型变量
  mutate(rd = cut(r, breaks = c(-Inf, 0.2, 0.4, Inf),
                  labels = c("< 0.2", "0.2 - 0.4", ">= 0.4")),
         pd = cut(p, breaks = c(-Inf, 0.01, 0.05, Inf),
                  labels = c("< 0.01", "0.01 - 0.05", ">= 0.05")))

# 开始画图
qcorrplot(correlate(varechem), # 相关性分析
          type = "lower", #热图展示下半部分
          diag = FALSE) +  #不展示对角线
 
  # 函数在热图上添加方格,每个方格代表一个相关性值
  geom_square() +

  geom_couple(aes(colour = pd, #网络线的颜色映射mantel_test结果的显著性
                  size = rd), #网络线的粗细映射mantel_test结果的相关性
              data = mantel,
              curvature = 0.1) +  #基于起点或终点绘制最合适的曲线
  # 添加显著性标志
  # geom_mark 函数在热图上添加显著性标记。sep = '\n' 指定了显著性标记之间的分隔符,
  # size = 3 指定了标记的大小,
  # sig_level = c(0.05, 0.01, 0.001) 指定了显著性水平,
  # sig_thres = 0.05 指定了显著性阈值。
  geom_mark(sep = '\n',size =3, sig_level = c(0.05, 0.01, 0.001),
            sig_thres = 0.05,only_mark = TRUE, color = 'black',) + # only_mark: 是否只显示标记而不显示数字。

  scale_fill_gradientn(colours = RColorBrewer::brewer.pal(11, "PuOr")) +  # 设置热图填充颜色

  scale_size_manual(values = c(0.5, 1, 2)) +  # 设置网络线粗细范围

  scale_colour_manual(values = color_pal(3)) +   # 设置网络线颜色 连线

  # 调整图例次序、标题、样式
  guides(size = guide_legend(title = "Mantel's r",
                             override.aes = list(colour = "grey35"),
                             order = 2),
         colour = guide_legend(title = "Mantel's p",
                               override.aes = list(size = 3),
                               order = 1),
         fill = guide_colorbar(title = "Pearson's r", order = 3))+

  # theme 函数用于设置图表的主题,包括文本大小、颜色、对齐方式等。
  theme(
    text = element_text(size = 14, family = "serif"),
    plot.title = element_text(size = 14, colour = "pink", hjust = 0.5),
    legend.title = element_text(color = "black", size = 14),
    legend.text = element_text(color = "black", size = 14),
    axis.text.y = element_text(size = 14, color = "black", vjust = 0.5, hjust = 1, angle = 0),
    axis.text.x = element_text(size = 14, color = "black", vjust = 0.5, hjust = 0.5, angle = 45)
)

3.2 出图效果

 网络线的颜色映射mantel_test结果的显著性                 网络线的粗细映射mantel_test结果的相关性
在R语言中进行Mantel测试通常涉及到生态学和统计分析,特别是当我们想要比较两个距离矩阵是否相关时。以下是基本步骤: 1. 首先,你需要安装`vegan`包,它包含了Mantel测试的功能。如果尚未安装,可以运行 `install.packages("vegan")`。 2. 导入所需的库并加载数据: ```R library(vegan) library(ggplot2) # 如果需要绘制网络 # 假设你的距离矩阵分别存储在mat1和mat2变量中,效应值矩阵存储在effect_matrix ``` 3. 对于correlate部分,你可以使用`mantel()`函数,但它实际上不需要预先筛选特征。如果你有一个包含变量的data.frame,可以用`dist()`创建距离矩阵,比如: ```R if (is.data.frame(mat1)) { mat1_dist <- dist(scale(mat1), method = "euclidean") # 使用欧氏距离或其他适合的距离度量 } ``` 4. 调用`mantel()`函数进行Mantel test: ```R mantel_result <- mantel(mat1_dist, mat2, nperm = 999) # nperm指定模拟次数 ``` 5. 获取显著性水平较高的前20个特征(这里假设我们关心的是相关系数),但通常Mantel test不会直接提供这个信息。你需要手动处理结果,例如通过提取p值小于某个阈值的行: ```R top_20_features <- which(mantel_result$p.value < 0.05, arr.ind = TRUE)[1:20,] # 假设0.05为显著水平 ``` 6. 利用筛选出的特征(如`top_20_features$Var1`, ..., `top_20_features$Var20`)和效应值矩阵进行检验: ```R specific_mantel <- mantel(top_20_features[, c("row", "col")]$Var1:Var20, effect_matrix, nperm = 999) ``` 7. 绘制相关性网络(使用`ggnet`或`networkD3`等包): ```R if (requireNamespace("ggnet")) { g <- ggnet(cor(mantel_result$r.value[top_20_features])) # 或者用筛选后的r.value g + theme_minimal() } # 或者使用networkD3(需要htmlwidgets) if (requireNamespace("networkD3")) { networkD3(ggplot2::qplot(g)) } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值