シングルセルシーケンス解析ツールSeuratの基本的な使い方

# 1. Seuratのインストール

まず、RにSeuratをインストールしないといけません。Seuratの他にHdf5ファイルを読み込むためのhdf5rもインストールしましょう。インストールのコマンドは以下です。


## 1.1 Biocondaでインストール（おすすめ）

何かをインストールするとき、Biocondaでインストールできればそれが一番簡単です。ターミナルの画面で、R環境に**入ってない**状態で、以下のコマンドを入力します。


```bash
conda install -c conda-forge r-hdf5r -y
conda install -c bioconda r-seurat
```


## 1.2 R環境下でインストール

Biocondaじゃなくても、Rのinstall.packagesコマンドでSeuratをインストール可能です。ターミナルで”R”と入力すると、Rの環境に入るはずです。R環境下で以下のコマンドを入力します。


```R
install.packages('Seurat')
install.packages("hdf5r")
```


上記のいずれかで、Seuratがちゃんとインストールされたかを確認するにはR環境下で、以下のコマンドを入力します。


```R
library(Seurat)
```


このコマンドを入力して何もエラーが出なければちゃんとSeuratがインストールされ、呼び出されています。


# 2. hdf5ファイルをSeurat objectに変換

いよいよ本番の解析です。現在、singleセルシーケンスの多くは10x Genomics社のChromiumプラットフォームを用いて行われています。なので、今回は10x Genomics社の解析ツールCellrangerで解析された出力ファイルを用いて解析を行います。


## 2.1 練習用データをダウンロード

10x Genomics社のウェブサイトにデータセットがあるので、今回は[5k Peripheral Blood Mononuclear Cells (PBMCs) from a Healthy Donor (v3 chemistry)](https://www.10xgenomics.com/jp/resources/datasets/5-k-peripheral-blood-mononuclear-cells-pbm-cs-from-a-healthy-donor-v-3-chemistry-3-1-standard-3-0-2)のデータを使いたいと思います。必要なデータは、[Feature / cell matrix HDF5 (filtered)](https://cf.10xgenomics.com/samples/cell-exp/3.0.2/5k_pbmc_v3/5k_pbmc_v3_filtered_feature_bc_matrix.h5)です。hdf5形式と呼ばれるファイルです。まずこのファイルをwgerもしくはcurlでダウンロードします。こちらはR環境下ではうまくいきませんので、q()でRから抜けてください。その後に、


```sh
#wget
wget https://cf.10xgenomics.com/samples/cell-exp/3.0.2/5k_pbmc_v3/5k_pbmc_v3_filtered_feature_bc_matrix.h5
#もしくはcurl
curl -O https://cf.10xgenomics.com/samples/cell-exp/3.0.2/5k_pbmc_v3/5k_pbmc_v3_filtered_feature_bc_matrix.h5
```


これで5k_pbmc_v3_filtered_feature_bc_matrix.h5というファイルがダウンロードされました。再びR環境下で、そのファイルを読み込みます。R環境下に入ったら


```R
#　もう一度Seuratを呼び込む
library(Seurat)
#　ファイルのパスを指定
file <- "5k_pbmc_v3_filtered_feature_bc_matrix.h5"
```



## 2.2 hdf5ファイルを読み込む

Seuratではhdf5形式（〇〇.h5）のファイルを読み込むためのRead10X_h5という関数が用意されています。 それを使用します。Xは大文字です。


```R
# fileは上記のファイルパス
data <-  Read10X_h5(file)
```


ちゃんと読み込まれているかを確認するためには、dataを確認します。以下のようなデータが出力されれば大丈夫です。

```R
head(data)
```
```
# 出力されるデータ
MIR1302-2HG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FAM138A     . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
OR4F5       . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
AL627309.1  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
AL627309.3  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
AL627309.2  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
```



## 2.3 Seurat objectに変換
前回まではhdf5ファイルを読み込むだけでしたが、この形式からseurat objectと呼ばれる形式に変換します。この形式が何なのかは今のところ知らなくて大丈夫です。Seurat objectに変換するには、CreateSeuratObjectで行います。


```R
# seurat objectに変換
seurat_object <- CreateSeuratObject(data)

# seurat_objectと入力して以下のようなデータが出力されればOK
seurat_object

# 出力データ
An object of class Seurat
33538 features across 5025 samples within 1 assay
Active assay: RNA (33538 features, 0 variable features)
```

# ３. クラスタリングの計算

Seurat objectに変換しただけでは、ほぼ生データなので、これから正規化、クラスタリングを行います。
## 3.1 Normalization

Seuratのチュートリアルでは、正規化の前にTrimmingなどがありますが、一応cellrangerの時点で、不要なデータは取り除かれていることと、本質の解析ではないのでここではTrimmingは省いてNormalization（正規化）に進みます。正規化するには以下のコマンドで行います。


```R
seurat_object <- NormalizeData(seurat_object)
```
```
# 以下のようなデータが出力される
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
```

## 3.2 特異遺伝子を検出

変化の激しい遺伝子を同定して、今後の解析に使用します。FindVariableFeaturesで行います。nfeatures(特異遺伝子)を2000に設定していますが、この数は変更してもらって構いません。ほとんどの場合2000で大丈夫だと思います。


```R
seurat_object <- FindVariableFeatures(seurat_object, selection.method = "vst", nfeatures = 2000)
```
```
# 以下のようなデータが出力される
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
```

## 3.3 データのスケール化

遺伝子の発現量は遺伝子によってまちまちなのでスケール化をします。以下のコマンドで行います。まず、遺伝子名を抜き出して、それを特徴量として使います。


```R
all.genes <- rownames(seurat_object)
seurat_object <- ScaleData(seurat_object, features = all.genes)
```
```
# 出力
Centering and scaling data matrix
 |======================================================================| 100%
```



## 3.4 PCA

スケール化したデータを用いてPCA解析を行います。


```R
seurat_object <- RunPCA(seurat_object, features = VariableFeatures(object = seurat_object))
```
```
# 以下のような出力
PC_ 1
Positive:  LTB, TRBC2, TRAC, IL7R, IL32, CD69, CD7, CD2, TRBC1, CD247
           CCR7, TRABD2A, LEF1, SYNE2, ITM2A, RORA, MAL, TRAT1, HIST1H4C, GZMM
           AQP3, CD40LG, MT-CO3, CXCR4, MYC, FHIT, LRRN3, DDIT4, ID3, ZNF331
Negative:  FCN1, MNDA, LYZ, CST3, SERPINA1, NCF2, CSTA, FGL2, S100A9, CTSS
           PSAP, GRN, CD68, CPVL, SPI1, CLEC12A, MPEG1, LST1, TNFAIP2, VCAN
           MS4A6A, S100A8, TMEM176B, CYBB, IGSF6, CD14, AIF1, TYROBP, CFP, FCER1G
```

```R
seurat_object <- FindNeighbors(seurat_object, dims = 1:10)
```
```
# 出力
Computing nearest neighbor graph
Computing SNN
```
```R
seurat_object <- FindClusters(seurat_object, resolution = 0.5)
```
```
# 出力
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 5025
Number of edges: 165355

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9073
Number of communities: 13
Elapsed time: 0 seconds
```

## 3.5 UMAP

最後にUMAPを計算します。


```R
seurat_object <- RunUMAP(seurat_object, dims = 1:10)
```
```
# 出力
Warning: The default method for RunUMAP has changed from calling Python UMAP via reticulate to the R-native UWOT using the cosine metric
To use Python UMAP via reticulate, set umap.method to 'umap-learn' and metric to 'correlation'
This message will be shown once per session
16:39:35 UMAP embedding parameters a = 0.9922 b = 1.112
16:39:35 Read 5025 rows and found 10 numeric columns
16:39:35 Using Annoy for neighbor search, n_neighbors = 30
16:39:35 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
16:39:36 Writing NN index file to temp file /tmp/Rtmph2s6ZQ/file505fe23b8461a
16:39:36 Searching Annoy index using 1 thread, search_k = 3000
16:39:38 Annoy recall = 100%
16:39:39 Commencing smooth kNN distance calibration using 1 thread
16:39:39 Initializing from normalized Laplacian + noise
16:39:40 Commencing optimization for 500 epochs, with 201484 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
16:39:47 Optimization finished
```


ここまでで基本的な計算は終了しました。出来上がったseurat_objectを用いてデータを可視化していきます。

それはまた次回。