LoginSignup
4
3

More than 5 years have passed since last update.

外れ値細胞のIDをインタラクティブに見つける

Last updated at Posted at 2016-01-11

single-cell RNA-Seqで次元圧縮したのちに、外れ値細胞があった場合、それら細胞のIDを取得する方法。

ここでは、100細胞のうち、91〜100番目の細胞が外れ値細胞だと想定。

# PCAの結果だとする
# 91〜100番目に外れ値細胞が入っているけど、本番ではそれがわからないと仮定する
test.data <- data.frame(
                PC1 = c(rnorm(90), rnorm(10, 4)),
                PC2 = c(rnorm(90), rnorm(10, 4)),
                PC3 = c(rnorm(90), rnorm(10, 4))
                )
rownames(test.data) <- paste0("Cell", 1:100)
index.test.data <- c(rep(rgb(0,0,1,0.5), 90), rep(rgb(1,0,0,0.5), 10))
names(index.test.data) <- c(rep("Normal", 90), rep("Outlier", 10))

pairs(test.data, col=index.test.data, pch=16)

6d0a3702-3282-34aa-952d-6bc6cfc85705.png

Rの標準関数(plot, pairsなど)では、点とラベルを同時に見やすく見せることが面倒くさそう。
そこで、幾つか拡張パッケージを試した。

方法1 : rglパッケージ

library("rgl")
plot3d(test.data, col=index.test.data)
text3d(test.data, text=rownames(test.data))

df17a08a-076e-5737-87a4-03117d5e238a.png

この方法だと、あらかじめ細胞のIDをデータ点の上に重ねておく。

簡単だがデータ点が多くなるほど、IDが長くなるほど見づらくなるという弱点もある。

方法2 : plotlyパッケージ

library("plotly")
plot_ly(test.data, x = PC1, y = PC2, z = PC3,
    type = "scatter3d", mode = "markers",
    text = rownames(test.data),
    group = names(index.test.data)
    )

21070354-64e9-6995-8f35-2ec2e7a0842c.png

plotlyは一度plotlyサーバでアカウント作成、APIキー取得などの手順をふみ、サーバーサイドで描画するので、使いづらかったのだが、最近ローカルでも実行できるようになったみたいで、最近すごく使いやすい。
図のように、カーソルを合わせると、そのデータ点の細胞IDや座標、その他メタ情報が出てくる。

また、二次元の散布図だと、カーソルで選択したエリアだけズームするということもできる(三次元ではできない?)。

plot_ly(test.data[,1:2], x = PC1, y = PC2,
    type = "scatter", mode = "markers",
    text = rownames(test.data),
    group = names(index.test.data)
    )

8e500db8-db72-f39d-53c3-4325b211d2e8.png
ee52d44a-7941-f3f2-d661-32a091313094.png

方法3 : pairsD3パッケージ

library("pairsD3")
pairsD3(test.data, group=names(index.test.data))

# Shinyでサーバーが立ち上がるが、止め方がわからない => Rを一回閉じることになる?
# shinypairs(test.data, group=names(index.test.data))

6c4a84fc-cf4b-e14a-c2c9-263d057b5021.png

この方法は、pairs関数をそのままインタラクティブにした感じで、使いやすい。
shinypairs関数でShinyサーバーを立ち上げると、選択したデータのリストが取得できて便利だし、その場でパラメーターをいじることも可能になるのだが、この関数は一度起動すると止められないっぽい。

4
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3