具有修正的 Gower 相似性的质心周围的置信区间

机器算法验证 r 置信区间 高尔相似度
2022-03-23 03:14:58

我想根据一些多变量样本(来自沉积岩芯的社区数据)之间的高尔相似性获得质心的 95% 置信区间。到目前为止,我已经使用vegan{}R 中的包来获得内核之间修改后的 Gower 相似性(基于 Anderson 2006;现在作为 R 的一部分包含在 R 中vegdist())。有谁知道我如何根据修改后的 Gower 相似性计算例如采样点的质心的 95% 置信区间?

此外,如果可能的话,我想在显示质心的 PCO 上绘制这些 95% 的 CI,因此它们是否重叠很明显。

为了获得修改后的 Gower 相似度,我使用了:

dat.mgower <- vegdist(decostand(dat, "log"), "altGower")

但据我所知,您不会从vegdist(). 我需要得到质心,然后是 95% CI,然后在 R 中绘制它们。帮助!

Anderson、MJ、KE Ellingsen 和 BH McArdle。2006.多元分散作为β多样性的衡量标准。生态快报 9:683-693。

1个回答

我不清楚你想要什么质心,但想到的质心是多元空间中每组点的质量中心的点。关于这一点,您需要一个 95% 的置信椭圆。这两个方面都可以使用veganordiellipse()中的函数来计算这是一个修改后的示例,但使用 PCO 作为将差异嵌入欧几里得空间中的一种手段,我们可以从中得出基于自然管理变量的组的质心和置信椭圆?ordiellipseManagement

require(vegan)
data(dune)
dij <- vegdist(decostand(dune, "log"), method = "altGower")
ord <- capscale(dij ~ 1) ## This does PCO

data(dune.env) ## load the environmental data

现在我们显示前 2 个 PCO 轴,并根据轴得分平均值的标准误差添加一个 95% 置信椭圆。我们想要这样设置标准误差kind="se"并使用conf参数来给出所需的置信区间。

plot(ord, display = "sites", type = "n")
stats <- with(dune.env,
              ordiellipse(ord, Management, kind="se", conf=0.95, 
                          lwd=2, draw = "polygon", col="skyblue",
                          border = "blue"))
points(ord)
ordipointlabel(ord, add = TRUE)

请注意,我从ordiellipse(). 这将返回一个列表,每组一个组件,其中包含质心和椭圆的详细信息。您可以center从其中的每一个中提取组件以获取质心

> t(sapply(stats, `[[`, "center"))
         MDS1       MDS2
BF -1.2222687  0.1569338
HF -0.6222935 -0.1839497
NM  0.8848758  1.2061265
SF  0.2448365 -1.1313020

请注意,质心仅适用于 2d 解决方案。更一般的选择是自己计算质心。质心只是变量的单个平均值,或者在这种情况下是 PCO 轴。当您处理不同之处时,它们需要嵌入到排序空间中,以便您拥有可以计算平均值的轴(变量)。这里轴分数在列中,站点在行中。组的质心是组的列平均值的向量。有几种拆分数据的方法,但在这里我使用aggregate()将前 2 个 PCO 轴上的分数拆分为基于Management并计算它们的平均值的组

scrs <- scores(ord, display = "sites")
cent <- aggregate(scrs ~ Management, data = dune.env, FUN = mean)
names(cent)[-1] <- colnames(scrs)

这给出了:

> cent
  Management       MDS1       MDS2
1         BF -1.2222687  0.1569338
2         HF -0.6222935 -0.1839497
3         NM  0.8848758  1.2061265
4         SF  0.2448365 -1.1313020

stats这与上面提取的存储的值相同。aggregate()方法可以推广到任意数量的轴,例如:

> scrs2 <- scores(ord, choices = 1:4, display = "sites")
> cent2 <- aggregate(scrs2 ~ Management, data = dune.env, FUN = mean)
> names(cent2)[-1] <- colnames(scrs2)
> cent2
  Management       MDS1       MDS2       MDS3       MDS4
1         BF -1.2222687  0.1569338 -0.5300011 -0.1063031
2         HF -0.6222935 -0.1839497  0.3252891  1.1354676
3         NM  0.8848758  1.2061265 -0.1986570 -0.4012043
4         SF  0.2448365 -1.1313020  0.1925833 -0.4918671

显然,当我们要求更多轴时,前两个 PCO 轴上的质心不会改变,因此您可以计算所有轴上的质心一次,然后使用您想要的任何尺寸。

您可以将质心添加到上面的图中

points(cent[, -1], pch = 22, col = "darkred", bg = "darkred", cex = 1.1)

结果图现在看起来像这样

ordielipse的使用

最后,vegan包含adonis()betadisper()函数,旨在以与 Marti 的论文/软件非常相似的方式查看多元数据的均值和方差的差异。betadisper()与您引用的论文内容密切相关,也可以为您返回质心。