将“'ward'”方法与 pvclust R 包一起使用时出错

Error when using ''ward'' method with pvclust R package

我在尝试使用 pvclust 包进行聚类分析时遇到了一些麻烦。

具体来说,我有一个由物种(行)和采样站(列)组成的数据矩阵。我想执行 CA 以便根据我的物种丰度(我之前已经对它进行了 log(x+1) 转换)对我的采样站进行分组。

一旦充分准备好我的矩阵,我就尝试 运行 根据 pvclust 包的 CA,使用 Ward 的聚类方法和 Bray-Curtis 作为距离索引。但是,每次我收到以下错误消息:

''hclust 错误(距离,方法 = method.hclust): 无效的聚类方法''

然后我尝试使用另一种聚类方法执行相同的分析,我没有遇到任何问题。我还尝试使用 vegan 包中的 hclust 函数执行相同的分析,我也完全没有问题。分析运行没有任何问题。

为了更好地理解我的问题,我将显示部分矩阵和 我用来执行分析的脚本:

          P1        P2         P3         P4         P5       P6
1  10.8750000 3.2888889  2.0769231  1.4166667  3.2395833 5.333333
3   0.3645833 0.3027778  0.3212038  0.7671958  0.4993676 0.000000
4   0.0000000 0.0000000  2.3500000  0.0000000  0.0000000 0.264000
5   0.0000000 0.7333333  0.2692308  0.0000000  0.2343750 0.000000
6   0.0000000 0.9277778  0.0000000  0.2936508  0.7291667 0.000000
7   0.4166667 6.3500000  1.0925463  0.5476190  0.1885169 0.000000
8   1.6250000 0.0000000  0.0000000  0.0000000  5.2187500 0.000000
9   0.0000000 0.8111111  0.0000000  0.0000000  0.0000000 0.000000
10  2.6770833 0.6666667  2.3304890  4.5906085  2.9652778 0.000000
15  1.8020833 0.9666667  1.4807137  3.3878968  0.1666667 0.000000
16 17.8750000 4.9555556  1.4615385  6.5000000  7.8593750 7.666667
19  4.5312500 1.0555556  3.5766941  6.7248677  2.3196181 0.000000
20  0.0000000 0.6777778  0.5384615  0.0000000  0.0000000 0.000000
21  0.0000000 0.9777778  0.0000000  0.2500000  0.0000000 0.000000
24  1.2500000 3.0583333  0.1923077  0.0000000  4.9583333 0.000000
25  0.0000000 0.0000000  2.5699634  0.0000000  0.0000000 0.000000
26  6.6666667 2.2333333 24.8730020 55.9980159 17.6239583 0.000000

其中P1-P6是我的采样站,最左边的行号是我的不同物种。我将此示例矩阵表示为“'platforms'”。

之后,我使用了以下代码行:

dist <- function(x, ...){
  vegdist(x, ...)
}

result<-pvclust(platforms,method.dist = "bray",method.hclust = "ward")

值得注意的是我 运行 前三个代码行,因为 bray-curtis 索引最初在 pvclust 包中不可用。因此,运行这些代码行允许我在 pvclust 函数中指定 bray-curtis 索引

有谁知道为什么它不能与 pvclust 包一起使用?

任何帮助将不胜感激。

亲切的问候,

玛丽

有两个相关问题:

  1. 调用method.hclust时需要传递hclust兼容方法。理论上 pvclust 检查 ward 并转换为 ward.D,但您可能想要传递 ward.Dward.D2 的(正确的)名称。
  2. 您不能以这种方式覆盖 dist。但是,您 可以 将自定义函数传递给 pvclust

例如,这应该有效:

library(vegan)
library(pvclust)

sample.data <- "P1  P2  P3  P4  P5  P6
10.8750000  3.2888889   2.0769231   1.4166667   3.2395833   5.3333330
0.3645833   0.3027778   0.3212038   0.7671958   0.4993676   0.0000000
0.0000000   0.0000000   2.3500000   0.0000000   0.0000000   0.2640000
0.0000000   0.7333333   0.2692308   0.0000000   0.2343750   0.0000000
0.0000000   0.9277778   0.0000000   0.2936508   0.7291667   0.0000000
0.4166667   6.3500000   1.0925463   0.5476190   0.1885169   0.0000000
1.6250000   0.0000000   0.0000000   0.0000000   5.2187500   0.0000000
0.0000000   0.8111111   0.0000000   0.0000000   0.0000000   0.0000000
2.6770833   0.6666667   2.3304890   4.5906085   2.9652778   0.0000000
1.8020833   0.9666667   1.4807137   3.3878968   0.1666667   0.0000000
17.8750000  4.9555556   1.4615385   6.5000000   7.8593750   7.6666670
4.5312500   1.0555556   3.5766941   6.7248677   2.3196181   0.0000000
0.0000000   0.6777778   0.5384615   0.0000000   0.0000000   0.0000000
0.0000000   0.9777778   0.0000000   0.2500000   0.0000000   0.0000000
1.2500000   3.0583333   0.1923077   0.0000000   4.9583333   0.0000000
0.0000000   0.0000000   2.5699634   0.0000000   0.0000000   0.0000000
6.6666667   2.2333333   24.8730020  55.9980159  17.6239583  0.0000000"

platforms <- read.table(text = sample.data, header = TRUE)

result <- pvclust(platforms, 
                  method.dist = function(x){
                    vegdist(x, "bray")
                  },
                  method.hclust = "ward.D")