将随后几年的物种数据投射到 PCA 排序上

Projecting subsequent years of species data onto PCA ordination

我是 运行 一年内多个地点的 Hellinger 转化物种数据的 PCA(例如:1995 年)。我想通过将 1996 年的数据投影到根据第一年的数据(1995 年)构建的 PCA 排序来计算明年(1996 年)这些相同站点的站点分数。这是为了衡量从一年到另一年在排序 space 中移动的距离。是否有允许我执行此操作的 R 包?

正如@Richard Telford 提到的,如果您使用 vegan[=] 中的 rda(),则可以对 class "rda" 使用 predict 45=] 执行此 PCA 的包。

这是一个使用荷兰沙丘数据集的示例,假设前半部分样本来自第 1 年,后半部分样本来自第 2 年(它们不是)。

完成生成最终情节的所有步骤有点复杂,但预测很容易做到;最主要的是你需要在这两年的数据集中有相同的列(相同的物种)。

library("vegan")
data(dune)
take <- seq_len(floor(nrow(dune) / 2))
pca <- rda(dune[take, ], scale = TRUE)

设置分数缩放的默认值并提取观察到的站点分数

scl <- "sites"
scrs <- scores(pca, display = "sites", choices = 1:2, scaling = scl)

pca 中预测遗漏的 dune 个样本。请注意,您必须指定 type = "wa" 才能获得站点分数。

pred <- predict(pca, newdata = dune[-take, ], type = "sites",
                scaling = scl)

当我们创建绘图时,我们需要轴限制而不是两个绘图的跨度分数,以防:

lims <- apply(rbind(scrs, pred[, 1:2]), 2L, range)

(注意 pred 包含所有轴的预测,而不仅仅是前两个;您可以使用 rank 参数调整它。)

现在我们可以绘制两组分数,第 1 年作为点,第 2 年作为从第 1 年到第 2 年预测的箭头:

plot(pca, display = "sites", type = "n", scaling = scl,
     xlim = lims[,1], ylim = lims[,2])
arrows(scrs[,1], scrs[,2], pred[,1], pred[,2], col = "blue",
       length = 0.1)
points(pca, display = "sites", scaling = scl, pch = 21, bg = "white")

这会产生: