1

我在尝试使用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 是我的采样站,最左边的行号是我的不同物种。我将这个示例矩阵表示为“平台”。

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

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

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

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

有谁知道为什么它不适用于 pvclust 包?

任何帮助都感激不尽。

亲切的问候,

玛丽

4

1 回答 1

4

有两个相关的问题:

  1. 调用method.hclust时需要传递hclust兼容方法。理论上pvclust检查ward并转换为ward.D,但您可能希望传递ward.D或的(正确)名称ward.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")
于 2016-10-06T17:26:51.753 回答