如何计算纯素 rda/cca 对象的物种贡献百分比?
How to calculate species contribution percentages for vegan rda/cca objects?
我正在尝试重现专栏(FactoMineR::PCA
中的"variable",vegan::rda
中的"species")vegan
中的contribution percentages to axes from the FactoMineR
包。贡献被编码在 FactoMiner::PCA
个对象中:
library(FactoMineR)
library(vegan)
data(dune)
fm <- FactoMineR::PCA(dune, scale.unit = FALSE, graph = FALSE)
head(round(sort(fm$var$contrib[,1], decreasing = TRUE), 3))
# Lolipere Agrostol Eleopalu Planlanc Poaprat Poatriv
# 17.990 16.020 13.866 7.088 6.861 4.850
通过查看 FactoMiner::PCA
的代码,我发现贡献的计算方法是平方轴坐标除以轴特征值再乘以 100%:
head(round(sort(100*fm$var$coord[,1]^2/fm$eig[1], decreasing = TRUE), 3))
# Lolipere Agrostol Eleopalu Planlanc Poaprat Poatriv
# 17.990 16.020 13.866 7.088 6.861 4.850
我无法使用 vegan::rda
对象复制上述计算:
vg <- rda(dune)
head(round(sort(100*scores(vg, choices = 1, display = "sp",
scaling = 0)[,1]^2/vg$CA$eig[1], decreasing = TRUE), 3))
# Lolipere Agrostol Eleopalu Planlanc Poaprat Poatriv
# 0.726 0.646 0.559 0.286 0.277 0.196
我显然做错了什么,差异可能是由于这两个包计算列坐标的方式不同,因为轴的特征值非常相似(与我的实际数据集相同),但坐标不是:
# vegan eigenvalue for axis 1
vg$CA$eig[1]
# PC1
# 24.79532
# FactoMineR eigenvalue for axis 1
fm$eig[1]
# [1] 23.55555
# vegan column coordinates for axis 1
head(round(scores(vg, choices = 1, display = "sp", scaling = 0)[,1], 3))
# Achimill Agrostol Airaprae Alopgeni Anthodor Bellpere
# -0.176 0.400 0.007 0.155 -0.163 -0.097
#FactoMineR, column coordinates for axis 1
head(round(fm$var$coord[,1], 3))
# Achimill Agrostol Airaprae Alopgeni Anthodor Bellpere
# 0.854 -1.943 -0.033 -0.751 0.791 0.472
# Sum of column coordinates for vegan axis 1 to illustrate the difference
sum(scores(vg, choices = 1, display = "sp", scaling = 0)[,1])
# [1] -0.796912
# Sum of column coordinates for FactoMineR axis 1 to illustrate the difference
sum(fm$var$coord[,1])
# [1] 3.867738
如何使用 vegan
rda
对象计算对排序轴的 column/species 百分比贡献?
vegan
的未缩放 (scaling = 0
) 列坐标具有相等的平方和(即每个轴为 1)。您可以通过简单地对未缩放的坐标进行平方来获得 "column contributions":
head(sort(round(100*scores(vg, display = "sp", scaling = 0)[,1]^2, 3), decreasing = TRUE))
# Lolipere Agrostol Eleopalu Planlanc Poaprat Poatriv
# 17.990 16.020 13.866 7.088 6.861 4.850
如上所述 "contributions" 的总和等于 100%:
sum(100*scores(vg, display = "sp", scaling = 0)[,1]^2)
# [1] 100
vegan 中的未缩放分数在(正常)意义上未缩放,它们的平方和为 1——独立于特征值:
> colSums(scores(vg, choices=1:4,dis="sp", scaling=0)^2)
PC1 PC2 PC3 PC4
1 1 1 1
我认为这已记录在案。如果您想将这些平方项称为贡献,那对我来说没问题。 cca
也是如此,但你需要研究加权平方和。此外,站点 (dis = "si"
) 的 unscaled 分数将具有相同的单位平方和:这就是未缩放的想法。如果您 scale 物种或地点,则相同的关系不再适用于另一组分数。通常,未缩放意味着分数是正交的,因此它们的叉积是单位矩阵(对角线或平方和 1 和非对角线元素 0)。对于 scaled 分数,这些平方和与特征值成正比(但阅读 vegan vignette on design decisions for const
可能会有用分数的蚂蚁缩放)。
vegan 函数 goodness
和 inertcomp
可能(也可能不会)为您提供所需的信息。
我正在尝试重现专栏(FactoMineR::PCA
中的"variable",vegan::rda
中的"species")vegan
中的contribution percentages to axes from the FactoMineR
包。贡献被编码在 FactoMiner::PCA
个对象中:
library(FactoMineR)
library(vegan)
data(dune)
fm <- FactoMineR::PCA(dune, scale.unit = FALSE, graph = FALSE)
head(round(sort(fm$var$contrib[,1], decreasing = TRUE), 3))
# Lolipere Agrostol Eleopalu Planlanc Poaprat Poatriv
# 17.990 16.020 13.866 7.088 6.861 4.850
通过查看 FactoMiner::PCA
的代码,我发现贡献的计算方法是平方轴坐标除以轴特征值再乘以 100%:
head(round(sort(100*fm$var$coord[,1]^2/fm$eig[1], decreasing = TRUE), 3))
# Lolipere Agrostol Eleopalu Planlanc Poaprat Poatriv
# 17.990 16.020 13.866 7.088 6.861 4.850
我无法使用 vegan::rda
对象复制上述计算:
vg <- rda(dune)
head(round(sort(100*scores(vg, choices = 1, display = "sp",
scaling = 0)[,1]^2/vg$CA$eig[1], decreasing = TRUE), 3))
# Lolipere Agrostol Eleopalu Planlanc Poaprat Poatriv
# 0.726 0.646 0.559 0.286 0.277 0.196
我显然做错了什么,差异可能是由于这两个包计算列坐标的方式不同,因为轴的特征值非常相似(与我的实际数据集相同),但坐标不是:
# vegan eigenvalue for axis 1
vg$CA$eig[1]
# PC1
# 24.79532
# FactoMineR eigenvalue for axis 1
fm$eig[1]
# [1] 23.55555
# vegan column coordinates for axis 1
head(round(scores(vg, choices = 1, display = "sp", scaling = 0)[,1], 3))
# Achimill Agrostol Airaprae Alopgeni Anthodor Bellpere
# -0.176 0.400 0.007 0.155 -0.163 -0.097
#FactoMineR, column coordinates for axis 1
head(round(fm$var$coord[,1], 3))
# Achimill Agrostol Airaprae Alopgeni Anthodor Bellpere
# 0.854 -1.943 -0.033 -0.751 0.791 0.472
# Sum of column coordinates for vegan axis 1 to illustrate the difference
sum(scores(vg, choices = 1, display = "sp", scaling = 0)[,1])
# [1] -0.796912
# Sum of column coordinates for FactoMineR axis 1 to illustrate the difference
sum(fm$var$coord[,1])
# [1] 3.867738
如何使用 vegan
rda
对象计算对排序轴的 column/species 百分比贡献?
vegan
的未缩放 (scaling = 0
) 列坐标具有相等的平方和(即每个轴为 1)。您可以通过简单地对未缩放的坐标进行平方来获得 "column contributions":
head(sort(round(100*scores(vg, display = "sp", scaling = 0)[,1]^2, 3), decreasing = TRUE))
# Lolipere Agrostol Eleopalu Planlanc Poaprat Poatriv
# 17.990 16.020 13.866 7.088 6.861 4.850
如上所述 "contributions" 的总和等于 100%:
sum(100*scores(vg, display = "sp", scaling = 0)[,1]^2)
# [1] 100
vegan 中的未缩放分数在(正常)意义上未缩放,它们的平方和为 1——独立于特征值:
> colSums(scores(vg, choices=1:4,dis="sp", scaling=0)^2)
PC1 PC2 PC3 PC4
1 1 1 1
我认为这已记录在案。如果您想将这些平方项称为贡献,那对我来说没问题。 cca
也是如此,但你需要研究加权平方和。此外,站点 (dis = "si"
) 的 unscaled 分数将具有相同的单位平方和:这就是未缩放的想法。如果您 scale 物种或地点,则相同的关系不再适用于另一组分数。通常,未缩放意味着分数是正交的,因此它们的叉积是单位矩阵(对角线或平方和 1 和非对角线元素 0)。对于 scaled 分数,这些平方和与特征值成正比(但阅读 vegan vignette on design decisions for const
可能会有用分数的蚂蚁缩放)。
vegan 函数 goodness
和 inertcomp
可能(也可能不会)为您提供所需的信息。