viSNEという、FCMデータのような高次元データを低次元に削減する手法を知ったのでやってみる。
Nat Biotechnol. 2013 Jun;31(6):545-52.
キモとしては、t-SNEと呼ばれる次元削減法で、多次元データの中でとが似る確率と、次元削減データの中でとが似る確率をKL情報量で推定する。
ただし、通常のt-SNEは主成分分析を用いてパラメータの削減をしてから(デフォルトで30,whiten)推定を行うが、FCMのような多次元データは線形関係ではなくほとんどが非線形なので、主成分分析による次元削減は行わず、生のパラメータのまま行う。このため、むちゃくちゃ遅くなるので、FCMデータを10000細胞くらいに一様分布でsubsamplingしている。
viSNEの優れたところとして、SPADEでは多次元空間の各クラスターの配置は失われるが、こちらでは二次元に落としこんでも各クラスターの配置は保たれる。また、極少数のデータからなるクラスターも検出できるらしい。
非線形なデータ構造を残すのも前述したとおり。
著者らはMATLABでしかスクリプトを用意してないらしいが、t-SNEはtsneパッケージでできるのでやってみる。
データは論文元データのvisne_marrow2.fcsを使って図を作成してみよう。
と思ったけど、サンプリング数が少ないのか、論文っぽくならなかった。クラスターはできているのでおそらく cyt という論文で言っているソフトウェアがあればいけるのか。
library(spade) library(flowViz) fcs2 <- read.FCS("visne_marrow2.fcs") sub2 <- fcs2@exprs[sample(seq(nrow(fcs2@exprs)),5000),] # 多すぎると計算が終わらないので 5000 細胞くらいでやる # 論文で言っているパラメータに合わせる。 # 他のパラメータは、t-SNEの元の論文のデフォルトパラメータにしてある。 tsne_sub2 <- tsne(sub2, max_iter = 500, perplexity=30, whiten=FALSE) library(gplots) hoge <- sub2[, i] # CDマーカーを選ぶ。今回は time しかきれいにならない。 p <- 100 idx <- cut(hoge, p) cols <- bluered(p) plot(hoge, col=cols[idx]) plot(tsne_sub2, col=cols[idx])