2017-07-25 64 views
0

我有一個500K觀測大型矩陣使用層次聚類進行聚類。由於尺寸較大,我沒有計算能力來計算距離矩陣。使用hclust加權觀測頻率聚類R

爲了克服這個問題,我選擇聚合我的矩陣,合併那些相同的觀測值,以便將我的矩陣約化爲10K個觀測值。我有這個聚合矩陣中每一行的頻率。我現在需要將這個頻率作爲分層聚類中的權重。

該數據是500K觀測的數值和分類變量的混合,因此我使用雛菊包計算了我的聚合數據集的高爾異質性。我想在聚合數據集的統計數據包中使用hclust,但是我想要考慮每個觀測的頻率。從hclust幫助信息的參數如下所示:

hclust(d, method = "complete", members = NULL) 

爲成員參數的信息是:,NULL或與d的長度尺寸的向量。請參閱「詳細信息」部分。當您查看詳細信息部分時,您會得到:如果members != NULL,那麼d被認爲是羣集之間的差異矩陣,而不是單身人士和成員之間的差異給出每個羣集的觀察數量。這樣,層次聚類算法可以'在樹形圖的中間開始',例如,爲了重構剪切之上的樹的部分(參見示例)。只有有限數量的距離/連接組合纔能有效地計算簇之間的不相似性(即,沒有hclust自身),最簡單的是平方歐幾里得距離和質心連接。在這種情況下,羣集之間的差異是羣集均值之間的平方歐幾里德距離。

從以上描述中,我不確定是否可以將我的頻率權重分配給成員參數,因爲不清楚這是否是此參數的目的。我想用這樣的:

hclust(d, method = "complete", members = df$freq) 

哪裏df$freq是每行的已匯聚矩陣的頻率。因此,如果一個行復制10倍這個值是10

如果有人可以幫助我,將是巨大的,

感謝

回答

0

是的,這應該適用於大多數的聯繫,特別是單,羣體平均和完整的聯繫。對於病房等,你​​需要正確地把權重考慮在內。

但即使這一部分並不難。只要確保使用簇大小,因爲您需要傳遞兩個簇的距離,而不是兩個點。所以矩陣應該包含位置x的n1個點和位置y的n2個點的距離。對於最小/最大/意味着這個n消失或取消。對於病房,你應該得到一個類似公式的SSQ。

+0

嗨,感謝您的評論。我不太清楚你最後一段的含義。你能再擴充一點嗎?由於我彙總了原始數據集,因此我擁有的距離矩陣將僅包含唯一觀測值,但成員參數將爲每次觀測包含原始數據集中發生的次數。由於我混合了我的變量的數據類型,我只能計算Gower的差異,所以我不能使用病房鏈接,但很高興知道,所以謝謝! –

+0

我沒有病房方程,所以你必須自己做這個微不足道的微積分。可能是'n * m * d * d'。 –