使用分数函数和提取向量的 envfit vegan 结果有什么区别?

What is the difference of envfit vegan result using scores function and extract the vectors?

从vegan(R包)的envfit函数得到的向量(fit$vectors)和使用(scores函数)提取的向量有什么区别:

library(vegan)
data(varespec, varechem)
ord <- metaMDS(varespec)
fit <- envfit(ord, varechem, perm = 999)

fit$vectors
            NMDS1    NMDS2     r2 Pr(>r)    
N        -0.05699 -0.99837 0.2538  0.044 *  
P         0.61934  0.78513 0.1938  0.116    
K         0.76606  0.64277 0.1809  0.124    
Ca        0.68482  0.72871 0.4119  0.006 ** 
Mg        0.63219  0.77481 0.4271  0.003 ** 
S         0.19092  0.98161 0.1752  0.115    
Al       -0.87184  0.48978 0.5269  0.001 ***
Fe       -0.93628  0.35126 0.4450  0.005 ** 
Mn        0.79879 -0.60162 0.5230  0.001 ***
Zn        0.61731  0.78672 0.1879  0.121    
Mo       -0.90312  0.42938 0.0609  0.515    
Baresoil  0.92521 -0.37947 0.2508  0.052 .  
Humdepth  0.93300 -0.35987 0.5199  0.002 ** 
pH       -0.64823  0.76144 0.2307  0.070 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Permutation: free
Number of permutations: 999

data.frame(scores(fit, "vectors"))
               NMDS1      NMDS2
N        -0.02871183 -0.5029777
P         0.27264080  0.3456235
K         0.32580371  0.2733667
Ca        0.43952421  0.4676897
Mg        0.41315337  0.5063630
S         0.07992162  0.4109201
Al       -0.63286315  0.3555304
Fe       -0.62458948  0.2343268
Mn        0.57765907 -0.4350718
Zn        0.26758332  0.3410181
Mo       -0.22295444  0.1060014
Baresoil  0.46331553 -0.1900256
Humdepth  0.67275508 -0.2594927
pH       -0.31134547  0.3657210

为什么每个 NMDS 列都有不同的值,其中哪些最适合针对站点绘制显着(<0.05)变量???

sites <- data.frame(ord$points)

评分函数

sc <- data.frame(scores(fit, "vectors"))

sc <- data.frame(fit$vectors) 


ggplot(data=sites, aes(x=MDS1, y=MDS2)) + geom_point() + coord_fixed() +
    geom_segment(data = sc, aes(x = 0, xend = NMDS1, y = 0, yend = NMDS2),
                 arrow = arrow(length = unit(0.25, "cm")), colour = "grey") +
    geom_text(data = sc, aes(x = NMDS1, y = NMDS2, label = rownames(sc)),
              size = 3)

使用分数函数或使用 fit$vectors ???

非常感谢

根据文档(参见 ?envfit)“连续变量(向量)的打印输出给出了方向余弦,它是单位长度向量的头部坐标。”此外,它解释说“在 plot 中,它们按相关性(列 'r2' 的平方根)进行缩放,因此“弱”预测变量的箭头比“强”预测变量的箭头短。您可以使用以下命令查看缩放的相对长度命令 scores。”最后一条信息在文档末尾得到确认,它说“可以使用 scores.envfit 函数访问结果,其中 returns ... 拟合向量按相关系数缩放”。所以区别是相关性,你应该使用scores提取的结果。无论变量的强度如何,直接访问的方向余弦将绘制单位长度的箭头(如您所见)。

vegan 中的常规 plot 函数可以 select 通过排列 P 值的变量,但是 geom_textgeom_segment 不知道这样做。您应该只传递要绘制的那些行,并删除其他分数。