2012-05-23 65 views
10

我很驚訝地發現library(cluster)clara允許NAs。但函數文檔沒有說明它如何處理這些值。在R中使用NA值聚類

所以我的問題是:

  1. 如何clara處理來港?
  2. 這可以以某種方式用於kmeans(Nas不允許)?

[更新]clara功能的代碼,所以我也發現線路:

inax <- is.na(x) 
valmisdat <- 1.1 * max(abs(range(x, na.rm = TRUE))) 
x[inax] <- valmisdat 

這確實因valmisdat缺失值替換。不知道我明白使用這種公式的原因。有任何想法嗎?單獨使用每一列對新手進行治療會更「自然」,可能會用平均數/中位數代替嗎?

回答

7

雖然沒有明確規定,我相信NA都在?daisy幫助頁描述的方式來處理。詳細信息部分包含:

在菊花算法中,一行x中的缺失值不包含在涉及該行的差異 中。

鑑於內部相同的代碼將被用於由clara()這就是我理解NA S IN的數據可以處理 - 他們只是不計算參加。這是在這種情況下進行合理標準的處理方式,例如用於定義高爾的廣義相似係數。

更新C來源clara.c清楚地表明,這個(上述)是NA s的如何clara()(線350-356在./src/clara.c)處理:

if (has_NA && jtmd[j] < 0) { /* x[,j] has some Missing (NA) */ 
     /* in the following line (Fortran!), x[-2] ==> seg.fault 
      {BDR to R-core, Sat, 3 Aug 2002} */ 
     if (x[lj] == valmd[j] || x[kj] == valmd[j]) { 
     continue /* next j */; 
     } 
    } 
+0

相同的代碼行在'雛菊'中處理'clara'函數中的缺失值(請參閱我的問題更新)。 –

+0

@ danas.zuokas我不知道它只是從您認爲與該問題有關的來源拉取任意代碼行是多麼有幫助。你需要研究R代碼和C代碼。 'valmisdat'是用來表示C代碼中缺失數據('NA')的值,而不是直接使用'NA'。如果你看看C代碼,你會發現它顯然只是忽略了一個變量對於其中一個或另一個或者兩個樣本的缺失值的比較,其中計算了不相似性。查看指向代碼的指針的更新答案。 –

+0

謝謝你,加文! –

3

不知道kmeans可以處理通過忽略連續丟失的值來丟失數據。

kmeans有兩個步驟;

  1. 計算觀測值與原始聚類平均值之間的距離。
  2. 根據新計算的距離更新新簇的均值。

當我們已經在我們的觀測數據缺失: 步驟1可以通過適當地調整距離度量作爲clara/pam/daisy包進行處理。但是,如果我們對觀察的每一列都有一些值,則只能執行步驟2。因此,輸入可能是kmeans處理丟失數據的下一個最佳選項。

0

通過查看克拉拉c代碼,我注意到在克拉拉算法中,當觀察值中有缺失值時,平方和會「減少」,與缺失值的數量成正比,我認爲這是錯誤的! clara.c的第646行類似於「dsum * =(nobs/pp)」,它表明它計算每對觀察值(nobs)中的非缺失值的數量,將其除以變量數量(pp)並將其乘以平方和。我認爲它必須以其他方式完成,即「dsum * =(pp/nobs)」。

+1

您可以使用[編輯鏈接](https://stackoverflow.com/posts/35925440/edit)來編輯以前的答案。 – zero323