まだプレリリース版のSeruat v3.0ですが、
10Xのサイトで以下のように言及されたことにより、こちらを使用する人が増えている気がします。
Seurat 3.0 is specifically designed to handle the type of multi-data experiments enabled by Feature Barcoding technology, and can also read the latest output file produced by Cell Ranger 3.0
引用:https://support.10xgenomics.com/single-cell-gene-expression/software/pipelines/latest/rkit
そしてSeuratで大人気のPBMCを用いた解析チュートリアルですが、
実はSeurat v3.0対応版が2018年12月10日に公開されています。
PBMC 3k guided clustering
2系 → 3系で何が変わったか
2系と3系の違いについては、以下にざっくり書かれています。
https://satijalab.org/seurat/essential_commands.html
大きく分けて以下の3つの変更点がありました。
- cellranger3系のデータ読み込みに対応した
- データの参照、抽出、結合が容易になった
- より高機能な可視化が可能になった
順に見ていきましょう。
cellranger3系のデータ読み込みに対応した
cellranger2系 → cellranger3系では、出力されるデータフォーマットに変更がありました。
2系
$ tree filtered_gene_bc_matrices/hg19/ filtered_gene_bc_matrices/hg19/ ├── barcodes.tsv ├── genes.tsv └── matrix.mtx
3系
$ tree filtered_feature_bc_matrix filtered_feature_bc_matrix ├── barcodes.tsv.gz ├── features.tsv.gz └── matrix.mtx.gz
何が違うのか。
- genes → featuresと表現するようになった
- 各ファイルがgz圧縮された。
こんなところです。
前者の変更は、features.csv
ではRNAのデータのみでなく、CITE-seqにより取得することのできる表面タンパクの発現データを格納することができるようになったことが理由のようです。
Seurat v3.0のRead10X
関数では、このデータフォーマットの読み込みに対応しています。
CITE-seqの結果を含んだデータを読み込むと、Read10X
関数の結果は以下のようにリスト形式で格納されます。
> pbmc.data $`Gene Expression` 33538 x 713 sparse Matrix of class "dgCMatrix" [[ suppressing 33 column names ‘AAACCCAAGTGGTCAG’, ‘AAAGGTATCAACTACG’, ‘AAAGTCCAGCGTGTCC’ ... ]] [[ suppressing 33 column names ‘AAACCCAAGTGGTCAG’, ‘AAAGGTATCAACTACG’, ‘AAAGTCCAGCGTGTCC’ ... ]] MIR1302-2HG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...... FAM138A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...... $`Antibody Capture` 17 x 713 sparse Matrix of class "dgCMatrix" [[ suppressing 34 column names ‘AAACCCAAGTGGTCAG’, ‘AAAGGTATCAACTACG’, ‘AAAGTCCAGCGTGTCC’ ... ]] CD3_TotalSeqB 3 3444 1733 8 13 8 37 101 2111 1641 16 381 CD4_TotalSeqB 6 3995 3401 13 180 653 633 328 16 2833 283 2
$Gene Expression
には通常のscRNA発現量データが、
$Antibody Capture
には表面タンパクの発現量データが格納されています。
Read10X
関数のソースコードを見に行くと、genes.tsv
のあるなしでキチンと分岐されているので
cellranger2系のデータも読み込むことができます。
Read10X <- function(data.dir = NULL, gene.column = 2) { ・ ・ barcode.loc <- paste0(run, "barcodes.tsv") gene.loc <- paste0(run, "genes.tsv") features.loc <- paste0(run, "features.tsv.gz") matrix.loc <- paste0(run, "matrix.mtx") # Flag to indicate if this data is from CellRanger >= 3.0 pre_ver_3 <- file.exists(gene.loc) if (!pre_ver_3) { addgz <- function(s) { return(paste0(s, ".gz")) } barcode.loc <- addgz(s = barcode.loc) matrix.loc <- addgz(s = matrix.loc) }
データの参照、抽出、結合が容易になった
データの参照
2系
slotを参照する必要がありました。
# 細胞ラベル object@cell.names # 遺伝子ラベル rownames(x = object@data)
3系
data.frame型のオブジェクトからデータを抽出する際に使用するcolnames
やncol
関数を使用できるようになってます。
# 細胞ラベル colnames(x = pbmc) Cells(object = pbmc) # 遺伝子ラベル rownames(x = pbmc) # 細胞数 ncol(x = pbmc) # 遺伝子数 nrow(x = pbmc)
データの抽出
2系
FilterCells
関数やSubsetData
関数を使う必要がありました。
FilterCells(object = object, subset.names = "name", low.threshold = low, high.threshold = high) SubsetData(object = object, subset.name = "name", low.threshold = low, high.threshold = high)
3系
3系では、data.frame型で使用するsubset
関数が使用できます。
# 特定セルタイプに属する細胞 subset(x = pbmc, idents = c("CD4 T cells", "CD8 T cells"), invert = TRUE) # 特定の遺伝子発現を持った細胞 subset(x = pbmc, subset = MS4A1 > 3)
データのマージ
2系
MergeSeurat
関数を使う必要がありました。
MergeSeurat(object1 = object1, object2 = object2)
3系
これまたdata.frame型で使用するmerge
関数が使用できます。
# 2つ merge(x = pbmc1, y = pbmc2) # 2つ以上 merge(x = pbmc1, y = list(pbmc2, pbmc3))
各種スロットについて
3系では2系と比較してスロットの構成がよりシンプルになっています。
2系
> slotNames(pbmc.seurat2) [1] "raw.data" "data" "scale.data" "var.genes" "is.expr" [6] "ident" "meta.data" "project.name" "dr" "assay" [11] "hvg.info" "imputed" "cell.names" "cluster.tree" "snn" [16] "calc.params" "kmeans" "spatial" "misc" "version"
3系
> slotNames(pbmc.seurat3) [1] "assays" "meta.data" "active.assay" "active.ident" "graphs" [6] "neighbors" "reductions" "project.name" "misc" "version" [11] "commands" "tools"
より高機能な可視化が可能になった
以下の例に加え、ヒートマップの色使いが若干綺麗になってたりします(気のせいかも)。
JackStrawPlot
3系ではすべてのPCについてのJackStrawPlotを、重ねて描画することが可能になりました。
これにより、クラスタリングに使用すべき有意な(重要な)PCの選定がより簡単になったということができます。
2系 3系
TSNEPlot (DimPlot)
Seuratの可視化はggplotをラップしているので、可視化の際は足し算的にオプションを追加することができます。
Seurat3系では、TSNEPlot
関数は、PCAPlot
関数等と共に、DimPlot
関数として統合されました。
このDimPlot関数では、以下のようなテーマを足し算的に追加することができます。
テーマ | 機能 |
---|---|
DarkTheme | ダークテーマを使用する |
FontSize | フォントサイズを変更する |
NoAxes | 軸の削除 |
NoLegend | legendを消す |
RotatedAxis | x軸のラベルを回転する |
2系 2系の場合、画像の諸々を変えるにはプロットの描画関数で引数を指定する必要がありました。
TSNEPlot(object, do.label = FALSE, pt.size = 1)
3系 3系では足し算的に画像の諸々を変えることが出来ます。
DimPlot(object = pbmc) + DarkTheme ()
DimPlot(object = pbmc) + FontSize(40)
DimPlot(object = pbmc) + NoAxes()
DimPlot(object = pbmc) + RotatedAxis()
総括
Seuratは、その扱いやすさ、プロットのわかりやすさから人気を集めています。
3系はまだプレリリース版であり、ドキュメントが整備されておらず未実装な関数がいくつか存在します。そのため、cellranger 3系のデータを使用して解析を行いたい場合や、CITE-seqのデータを用いて解析するようなケースを除けば、まだ2系を使用して解析するのが良いのではないかと思います。
3系の公式リリースに期待しましょう。