之前写了一篇文章mantel test 简单教程 - (jianshu.com)但是最后的ggcor部分作者弃坑了,后来发现原作者做了一个新包Hy4m/linkET (github.com)用法一样,因此这里考虑写一下使用感受
linkET直接将vegan包的mantel函数内置了,并且能够直接得出多组mantel_test的结果的表格,如图:这无疑是很方便的,但是我这里发现在做dist向量的步骤,linkET默认:
第一个参数为spec(species),使用bray法计算
第二个参数为env(environmental factor),分割为单列向量,使用euclidean计算距离
这里是作者给的例子:
library(dplyr)
#>
#> 载入程辑包:'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
data("varechem", package = "vegan")
data("varespec", package = "vegan")
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")))
#> `mantel_test()` using 'bray' dist method for 'spec'.
#> `mantel_test()` using 'euclidean' dist method for 'env'.
qcorrplot(correlate(varechem), type = "lower", diag = FALSE) +
geom_square() +
geom_couple(aes(colour = pd, size = rd),
data = mantel,
curvature = nice_curvature()) +
scale_fill_gradientn(colours = RColorBrewer::brewer.pal(11, "RdBu")) +
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))
特别注意
目前来看这种做法不够精细,因为在计算环境变量时,有些研究需求将环境因子看作一个整体,然后mantel检验两个矩阵之间的相关性,同时这种需求在计算距离矩阵时需要先将原始矩阵进行缩放:
scale.env = scale(env, center = TRUE, scale = TRUE)
只有经过类似这样的操作,才能较为可靠的计算环境因子的距离矩阵。
所以我们需要详细的看linkET::mantel_test的帮助文档:
mantel_test(
spec,
env,
group = NULL,
env_ctrl = NULL,
mantel_fun = "mantel",
spec_select = NULL,
env_select = NULL,
na_omit = TRUE,
spec_dist = NULL,
env_dist = NULL,
env_ctrl_dist = NULL,
seed = 123,
...)
也就是说:
spec_select和env_select可以进行两个矩阵的分割,然后计算分割后的mantel的R和P值
mantel_fun可以选择使用那么函数进行mantel计算
但是针对mantel()函数的常用参数,好像没有看到接口......这里没有看作者的源代码,因此也不好理解
总结:
如果希望使用linkET做图,还是使用作者本身给的可视化流程最好用,但如果希望得到矩阵间的mantel检验的值用以证明结论,考虑自己分割矩阵用vegan::mental算吧,比较方便
另外lingkET同时提供了相关性热图和圈图的可视化方法,具体细节需要自己研究啦!Hy4m/linkET (github.com)
PS:图真好看