目录
3.在R语言中,除了mantel_test函数,还有其他几个工具和方法可以用于进行Mantel Test分析:
1.前言
Mantel Test是一种统计方法,用于检验两个矩阵之间的相关性。在生态学研究中,它常用来分析群落距离矩阵(比如基于Bray-Curtis距离)和环境变量距离矩阵(如pH值、温度或地理位置)之间的相关性。如果Mantel Test的相关性系数较大,且p值较小,这通常意味着环境因子对微生物群落的影响较大 。
2.步骤
在R语言中,进行Mantel Test分析和绘图可以通过以下步骤完成:
- 加载必要的R包,例如
linkET
、tidyverse
、RColorBrewer
等 。 - 准备数据,通常是两个距离矩阵,它们应该有相同的行数和样本标识。
- 使用
mantel_test
函数进行Mantel Test分析,该函数可以计算两个矩阵之间的相关性,并给出r值和p值 。 - 对结果进行处理,比如将r值和p值分为不同的区间,以便于后续可视化 。
- 使用
qcorrplot
函数绘制相关性热图,并使用geom_square
和geom_couple
添加Mantel Test的结果到热图上 。 - 根据需要调整图表的美观性,包括颜色、大小、标签等 。
例如,下面的R代码展示了如何使用linkET
包进行Mantel Test分析并绘制热图和网络图 :
library(linkET)
library(tidyverse)
library(RColorBrewer)
# 假设varechem和varespec是两个已经准备好的距离矩阵
data("varechem", package = "vegan")
data("varespec", package = "vegan")
# 进行Mantel Test分析
mantel <- mantel_test(varespec, varechem) %>%
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")))
# 绘制热图和网络图
correlate(varechem) %>%
qcorrplot(type = "lower", diag = T) +
geom_square() +
geom_couple(aes(colour = pd, size = rd), data = mantel, curvature = 0.1) +
scale_fill_gradientn(colours = RColorBrewer::brewer.pal(9, "RdBu")) +
scale_size_manual(values = c(0.5, 1, 2)) +
scale_colour_manual(values = color_pal(3)) +
labs(fill = "Pearson's correlation",
size = "Mantel's r value",
colour = "Mantel's p value")
另一组R代码示例:
rm(list=ls())#好习惯,确保有干净的 R 环境
# setwd("C:/Users/Desktop/take")
library(linkET)
library(ggplot2)
library(ggtext)
library(dplyr)
library(RColorBrewer)
library(cols4all)
library(tidyverse)
data("varechem", package = "vegan")
data("varespec", package = "vegan")
#计算环境因子相关性系数:
cor2 <- correlate(varechem)
corr2 <- cor2 %>% as_md_tbl() ##在linkET包中,as_md_tbl()可以将相关性矩阵转换成一个"md"表格,这是linkET特有的数据结构,用于存储和操作相关性数据
write.csv(corr2, file = "pearson_correlate(env&env).csv", row.names = TRUE)
head(corr2)
#mantel test:
mantel <- mantel_test(varespec, varechem,
mantel_fun = 'mantel', #支持4种:"mantel"使用vegan::mantel();"mantel.randtest"使用ade4::mantel.randtest();"mantel.rtest"使用ade4::mantel.rtest();"mantel.partial"使用vegan::mantel.partial()
spec_select = list(spec01= 1:1,
spec02=5:5,
spec03 = 7:7
)) #这里分组为随机指定,具体实操需按自己的实际数据分组
head(mantel)
write.csv(mantel, file = "mantel_result(bio&env).csv", row.names = TRUE)
#对mantel的r和P值重新赋值(设置绘图标签):
mantel2 <- mantel %>%
m