R 資料探勘演算法/聚類/Biclust
在過去的十年中,雙聚類方法在雙向資料分析的不同領域變得越來越流行,並且已經發表了各種演算法和分析方法。
雙聚類是雙向資料分析中一項重要的新技術。在 Cheng 和 Church (2000) 遵循 Hartigan (1972) 的初始雙聚類思想並開始計算微陣列資料的雙聚類之後,發表了大量的文章,涉及不同型別的演算法和方法來預處理和分析此類方法的結果。例如,在 Madeira 和 Oliveira (2004) 或 Prelic 等人 (2006) 中可以找到對幾種雙聚類演算法的比較。
- 對 2 個維度的同時聚類;
- 大型資料集,其中聚類會導致分散的結果;
- 只有部分資料互相影響;
查詢行和列的子組,這些子組彼此儘可能相似,並且與其餘部分儘可能不同。 
- Sebastian Kaiser 和 Friedrich Leisch 開始在 R (R Development Core Team, 2007) 中實現一個全面的雙聚類工具箱。
它提供了一個不斷增長的雙聚類方法列表,以及預處理和視覺化技術,使用 S4 類和方法 (Chambers, 1998)。該軟體是開源的,可以從 R-Forge 免費獲得,網址為 http://R-Forge.R-project.org。
- 該軟體包的主要設計原則之一是將結果提供為 Biclust-Class 的實體,一個 S4 類,其中包含結果後處理所需的所有資訊。
它包含四個插槽 Parameters、RowxNumber、NumberxCol 和 Number。插槽 Parameters 包含使用的引數和演算法,Number 包含找到的雙聚類的數量。RowxNumber 和 NumberxCol 插槽表示已找到的雙聚類。它們都是維度為 (資料行 × 找到的雙聚類數量) 的邏輯矩陣,如果行 i 位於雙聚類 j 中,則 RowxNumber[i,j] 中具有 TRUE 值。NumberxCol 對列來說是一樣的,但出於計算原因,這裡矩陣的行表示雙聚類的數量,而列表示資料的列。因此,只需呼叫 data [ Biclust@RowxNumber[,a] * Biclust@NumberxCol[a,] ] 即可提取雙聚類 a 的值。
- Biclust-class 類的物件是透過對所有雙聚類方法使用統一的介面建立的,呼叫形式為 biclust(x,method=BiclustMethod,...)。
此泛型函式將預處理的資料矩陣 x、表示為 Biclustmethod-Class 的雙聚類演算法以及其他引數作為輸入。在下面,我們簡要描述了軟體包中已實現的五種演算法,小節標題對應於相應的 Biclustmethod-Class 的名稱。命名方案為 BCxxx,其中 xxx 是演算法名稱的縮寫。選擇了一些方法,因為可以從原始作者那裡獲得開原始碼,而其他方法則新近實現,以使整個工具箱儘可能全面。當然,總有改進的空間,將來會向該軟體包新增更多方法。有關雙聚類計算主要方向的討論,還可以參考 van Mechelen 和 Schepers (2006)。演算法按字母順序描述,如果沒有另行說明,則函式在解釋型 S 程式碼中實現。
為了在 R 中使用 Biclust 演算法,必須安裝 Biclust 軟體包和庫
install.packages("biclust")
library("biclust")
# S4 method for signature 'matrix,BCBimax':
biclust(x, method=BCBimax(), minr=2, minc=2, number=100)
# S4 method for signature 'matrix,BCrepBimax':
biclust(x, method=BCrepBimax(), minr=2, minc=2, number=100, maxc=12)
其中引數為
- x - 代表資料的邏輯矩陣。
- method - 此處為 BCBimax,用於執行 Bimax 演算法。
- minr - 結果雙聚類的最小行大小。
- minc - 結果雙聚類的最小列大小。
- number - 要找到的雙聚類數量。
- maxc - 結果雙聚類的最大列大小。
如果一切順利,將返回一個 Biclust 物件。
- 正如我們在下面所看到的,返回了一個 Biclust 物件,我們可以繪製它或者只是獲取最終物件。
> test <- matrix(rbinom(400, 50, 0.4), 20, 20)
> res1 <- biclust(test, method=BCCC(), delta=1.5, alpha=1, number=10)
> res1
An object of class Biclust
call:
biclust(x = test, method = BCCC(), delta = 1.5, alpha = 1, number = 10)
Number of Clusters found: 10
First 5 Cluster sizes:
BC 1 BC 2 BC 3 BC 4 BC 5
Number of Rows: "7" "4" "6" "6" "5"
Number of Columns: "5" "8" "4" "5" "6"
- 我們在“案例研究”部分提供了一些繪圖示例。
- 作為標準示例,我們在 Barkow 等人 (2006) 的 BicatYeast 資料上運行了所有演算法。為此,需要預處理資料並將其提交到 biclust 函式
以及所選演算法 (此處為 Xmotifs) 和引數。
BicatYeast
- 釀酒酵母菌(酵母)的子樣本。
- 用於演示 Barkow 等人 (2006) 的雙聚類演算法。
- 微陣列資料:419 個基因,80 個實驗。
data(BicatYeast)
x <- discretize(BicatYeast)
res <- biclust(x, method=BCXmotifs(), alpha=0.05, number=50)
- 要視覺化結果,您只需在結果上呼叫任何視覺化函式,例如
> parallelCoordinates( x=BicatYeast, bicResult=res, number=4)
- 平行座標圖示例:結果中第 4 個雙聚類中條件跨其基因的表達水平
Xmotifs 演算法。
- 雙聚類結果相似性度量,採用 Jaccard 指數的改編。
- 表 1 顯示了所有雙聚類演算法的成對 Jaccard 指數。Jaccard 指數是衡量兩個
聚類結果的相似性,零表示沒有一致性,一表示結果相同。可以看出,所有演算法都找到了非常不同的雙聚類集。這可以部分解釋為不同的預處理步驟,這些步驟是必要的,以便資料符合演算法的各自假設。
- 另一個重要方面是,我們選擇了第一個要實現的演算法,以獲得一系列彼此儘可能不同的演算法。
現在,從業人員可以很容易地在 R 中嘗試各種雙聚類方法,並選擇最適合給定資料集的方法。
- http://r-forge.r-project.org/projects/biclust/ 獲取最新的發展情況。
- http://www.statistik.lmu.de/~kaiser/bicluster.html 獲取論文和連結。
- BARKOW, S., BLEULER, S., PRELIC, A., ZIMMERMANN, P. 和 ZITZLER, E. (2006):Bicat:一個雙聚類分析工具箱。生物資訊學,22,1282–1283。
- CHAMBERS, J. M. (1998):用資料程式設計:S 語言指南。Chapman & Hall,倫敦。
- CHENG, Y. 和 CHURCH, G. M. (2000):表達資料的雙聚類。在:第八屆智慧系統分子生物學國際會議論文集,1,93–103。
- GOVEART, G. 和 NADIF, M. (2003):使用塊混合模型進行聚類。模式識別,36,463–473。
- VAN MECHELEN, I. 和 SCHEPERS, J. (2006):雙聚類的統一模型。在:Compstat 2006 - 計算統計學論文集,81–88。
- MURALI, T. 和 KASIF, S. (2003):從基因表達中提取保守的基因表達基序。在:太平洋生物計算研討會,8,77–88。
- PRELIC, A., BLEULER, S., ZIMMERMANN, P., WIL, A., BUHLMANN, P., GRUISSEM, W., HENNING, L., THIELE, L. 和 ZITZLER, E. (2006):一個
系統地比較和評估用於基因表達資料的雙聚類方法。生物資訊學,22(9),1122–1129。
- SANTAMARIA, R., THERON, R. 和 QUINTALES, L. (2007):一個分析微陣列實驗中雙聚類結果的框架。在:第八屆智慧資料工程與自動化學習國際會議 (IDEAL’07),施普林格,柏林,770–779。
- TURNER, H., BAILEY, T. 和 KRZANOWSKI, W. (2005):透過系統性能測試證明改進的微陣列資料雙聚類。計算統計和資料分析,48,235–254。


