В чем разница между результатом envfit vegan с использованием функции оценок и извлечением векторов?

В чем разница между векторами (fit $vectors), полученными из функции envfit вегана (пакет R) и извлеченными с помощью (функция оценок):

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

or

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"))

or

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 ???

Огромное спасибо


person abraham    schedule 21.03.2021    source источник


Ответы (1)


Согласно документации (см. ?envfit) вывод непрерывных переменных (векторов) на печать дает направляющие косинусы, которые являются координатами головок векторов единичной длины. Далее объясняется, что в plot они масштабируются по их корреляции (квадратный корень из столбца «r2»), так что «слабые» предикторы имеют более короткие стрелки, чем «сильные» предикторы. Вы можете увидеть масштабированные относительные длины, используя команду scores. Последняя часть информации подтверждается в конце документации, в которой говорится, что к результатам можно получить доступ с помощью функции scores.envfit, которая возвращает ... подобранные векторы, масштабированные с помощью коэффициента корреляции. Таким образом, разница заключается в корреляции, и вы должны использовать результаты, извлеченные scores. Прямой доступ к направляющим косинусам будет рисовать стрелки единичной длины (как вы должны видеть) независимо от силы переменной.

Обычная функция plot в vegan может выбирать переменные путем перестановки P-значений, но geom_text и geom_segment понятия не имеют об этом. Вы должны передать только те строки, которые хотите построить, и удалить другие оценки.

person Jari Oksanen    schedule 21.03.2021