使用' ward''''''' pvclust R包

时间:2016-10-06 15:50:26

标签: r cluster-analysis hierarchical-clustering pvclust

我正在尝试使用 pvclust 包进行群集分析时遇到一些麻烦。

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

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

'' hclust中的错误(distance,method = 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软件包?

非常感谢任何帮助。

亲切的问候,

玛丽

1 个答案:

答案 0 :(得分:3)

有两个相关问题:

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

    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")