クラスタリング(MBCluster.Seq)

MBCluster.Seq は RNA-seq のリードカウントデータの発現パターンに応じてクラスタリングを行うパッケージである。時系列あるいは組織別のプロファイルを得たいときに利用するとよい。

library(MBCluster.Seq)
packageVersion("MBCluster.Seq")
##[1] ‘1.0’

サンプルデータ

サンプルデータは条件を設定して負の二項分布に従うように乱数生成により作成した。A 群と B 群の 2 つの実験群からなる。A 群には薬剤 A を投与し、0 時間、3 時間、6 時間の 3 つの時刻においてサンプルを採取した。B 群には薬剤 B を投与し、0 時間、3 時間、6 時間の 3 つの時刻においてサンプルを採取した。各実験の各時刻において 2 つの biological replicate があり、実験全体で計 12 biological replicate を使用したとする。また、全遺伝子数は 1,000 であり、その発現パターンは以下のように設定した。

遺伝子 A 群の発現パターン B 群の発現パターン
gene_1 ~ gene_40 A6h > A3h > A0h, B6h > B3h > B0h
A0h = B0h, A3h = B3h, A0h = B0h
gene_41 ~ gene_80 A6h = A3h > A0h A0h = B0h = B3h = B6h
gene_81 ~ gene_120 A0h = A3h = A6h A0h = B6h = B3h > B0h
gene_121 ~ gene_160 A0h = A6h < A3h A0h = B0h = B3h = B6h
gene_161 ~ gene_200 A0h = A6h < A3h A0h = B0h = B3h < B6h
gene_201 ~ gene_1000 A0h = A3h = A6h = B0h = B3h = B6h

サンプルデータを読み込んでから行列型に変換し、count 変数に代入する。

count <- read.table("http://bi.biopapyrus.net/data/count2gt.txt", sep = "\t", header = T, row.names = 1)
count <- as.matrix(count)

dim(count)
## [1] 1000    12

head(count)
##        A1_0h A2_0h A3_3h A4_3h A5_6h A6_6h B1_0h B2_0h B3_3h B4_3h B5_6h B6_6h
## gene_1     1     7    11     0    22    24     0     0     9     3    22    16
## gene_2   170   182   744   683   918   637   128   112   645   517  1248  1234
## gene_3     8    12    37    46   100    94     9     8    30    46    47    63
## gene_4    44    38   109   187   354   225    40    97   103   146   505   343
## gene_5     0     0     5     0     4    10     0     0     1     0     7     4
## gene_6    88   112   372   459  1010   611   129    80   486   360   678   767

group にデータのラベルを記入する。group 変数については A 群と B 群の比較では group = c(rep(1, 6), rep(2, 6)) とするべきであるが、ここでは群間比較が目的ではなく、発現プロファイルのクラスタリングが目的であるから、A 群と B 群が独立しているほか、各時刻においてもそれぞれ独立したサンプルとして考えることができることから、 group を以下のように実験条件ごとに分けた。

group <- c(1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6)

クラスタリング

MBCluster.Seq を利用してクラスタリングを行うが、実際のクラスタリングを行う前に、MBCluster.Seq の関数を利用してデータを読み込んでおく必要がある。また、ここで利用するサンプルデータは上の表で示したように 6 パターンの発現プロファイルを持つことがわかっているので、クラスタサイズを 6 nK = 6 と指定してある。

dat <- RNASeq.Data(count, Normalizer = NULL,
                   Treatment = group, GeneID = rownames(count))
kmp <- KmeansPlus.RNASeq(data = dat, nK = 6)
cls <- Cluster.RNASeq(data = dat, model = "nbinom", centers = kmp$centers, method = "EM")

クラスタリング結果は cls オブジェクトに保存されている。EM アルゴリズムを利用しているため、実行するたびに結果がやや異なってくることがある。

head(cls$probability)
##              [,1]          [,2]      [,3]         [,4]          [,5]         [,6]
## [1,] 1.760936e-05  1.812046e-04 0.7869417 2.109541e-01  1.234020e-04 1.782049e-03
## [2,] 3.484958e-89 3.507966e-108 1.0000000 8.622396e-70 1.248952e-100 5.163926e-91
## [3,] 4.360068e-93  1.295790e-49 1.0000000 5.916831e-23  4.382738e-62 4.623404e-51
## [4,] 4.693138e-23  4.135958e-29 0.9999873 1.271856e-05  4.814205e-25 1.452876e-21
## [5,] 9.804749e-09  1.517993e-05 0.8923382 1.076324e-01  1.087917e-06 1.303337e-05
## [6,] 2.633411e-55  6.411368e-46 1.0000000 7.991553e-28  3.897313e-51 1.505876e-43

head(cls$cluster)
## [1] 3 3 3 3 3 3

table(cls$cluster)
##   1   2   3   4   5   6
##  51  96  51  54  72 676

解析に用いたサンプルデータでは上の表に示したように、6 つの発現パターンがある。表の最後に示したパターンが 800 遺伝子であるのを除き、他のパターンはすべて 40 遺伝子となっている。解析結果を table 関数で見ると、クラスタ 6 は 676 遺伝子が含まれ、それ以外はのクラスタは 100 以下の遺伝子となっている。解析結果はやや妥当である。

次にこれを図示する。

tre <- Hybrid.Tree(data = dat, cluster0 = cls$cluster, model = "nbinom")
plotHybrid.Tree(merge = tre, cluster = cls$cluster, logFC = dat$logFC, colorful = TRUE)
MBClusterSeq のクラスタリング結果

References

  • Si Y, Liu P, Li P, Brutnell TP. Model-based clustering for RNA-seq data. Bioinformatics. 2014, 30(2):197-205. PubMed Abstract CRAN