2016-10-06 63 views
0

時出現錯誤我正在嘗試使用包與pvclust包進行聚類分析。使用''病房''方法與pvclust R包

具體來說,我有一個由物種(行)和採樣站(列)組成的數據矩陣。我想執行一個CA,以便根據我的物種丰度(我之前記錄(x + 1)變換)將我的採樣站分組。

一旦準備好了我的矩陣,我試着根據pvclust包運行CA,使用Ward的聚類方法和Bray-Curtis作爲距離索引。然而,每次我得到以下錯誤消息:

「」在hclust(距離,方法= method.hclust)錯誤: 無效聚類方法「」

我然後試圖執行使用另一個相同的分析集羣方法,我沒有問題。我也嘗試使用素食主義者包裝中的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") 

值得注意的是,我跑了三個第一代碼行,因爲叫聲 - 柯蒂斯指數是不是原來在pvclust封裝。因此,運行這些代碼行允許我指定pvclust函數中的bray-curtis索引

有誰知道它爲什麼不能與pvclust包配合使用?

任何幫助將不勝感激。

親切的問候,

瑪麗

+0

請提供一個可重複的例子,用代碼和樣本數據。現在,很難診斷 - 當使用'stats :: hclust'時,需要鍵入'ward.D'或'ward.D2',其中'pvclust :: pvclust'需要'病房',這很簡單。 –

+0

嗨邁克爾, 我已經更新了我的文章,以提供我的問題的實際例子。 –

+0

請注意,Ward的方法基於*平方歐幾里得*。所以,雖然你可能會得到其他距離的結果,但它可能不再受到沃德原始理論的支持。 –

回答

1

有兩個相關的問題:

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

嗨邁克爾, 感謝您的快速回復。 不幸的是,運行你的代碼行後,我仍然收到一條錯誤消息。 這個時候,你的運行後,代碼行,我得到以下信息: _Error在as.character(X): 不能強迫式「封閉」到類型爲「矢量character'_ 任何想法,現在發生了什麼? –

+0

我剛剛添加了示例數據 - 它與我提供的內容一起工作嗎?我懷疑有'平臺'可能會有什麼東西。 –

+0

它沒有工作,並再次出現相同的錯誤消息。 我已經仔細檢查了我的數據矩陣(實際上是一個數據框),並且一切看起來都很正常。 只是看看我有什麼,這裏是我的數據矩陣結構的第一行: 'data.frame':\t 17 obs。 13變量: $ P1:num 10.875 0.365 0 0 0 ... $ P2:num 3.289 0.303 0 0.733 0.928 ... $ P3:num 2.077 0.321 0 0.269 0 ... $ P4:num 1.417 0.767 0 0 0.294 ... –