viSNEによる次元削減とプロット

MikuHatsune2014-02-05

viSNEという、FCMデータのような高次元データを低次元に削減する手法を知ったのでやってみる。
Nat Biotechnol. 2013 Jun;31(6):545-52.
キモとしては、t-SNEと呼ばれる次元削減法で、多次元データX=\{x_1,...,x_n\}の中でx_ix_jが似る確率p_{i|j}と、次元削減データY=\{y_1,...,y_n\}の中でy_iy_jが似る確率q_{i|j}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])