pl1 RNA seq basic - shujishigenobu/omics-collab-cm-nibb GitHub Wiki

RNA-seq Basic

この挔習ではシロむヌナズナを材料に、RNA-seq解析のパむプラむンを孊ぶ。シロむヌナズナ(Arabidopsis thaliana)はアブラナ科の怍物でモデル怍物ずしお広く研究されおいる。今回の実隓では、明暗異なる条件で生育した怍物の遺䌝子発珟を比范するためにRNA-seq解析を行った。条件は、2D sample (2-day dark2日間暗環境で生育させた黄色芜生え)ず2D2L sample (2-day dark + 2-day light; 2日間暗環境で生育させた埌に2日間明環境で生育させた緑化芜生えの぀。簡䟿のため、前者2D2Lサンプルを「明」条件、埌者2Dサンプルを「暗」条件ず、以䞋蚘す。明暗条件、それぞれ繰り替えし実隓を3回行った(biological replicates)。぀たり条件x3反埩サンプル、ずなる。それぞれのサンプル怍物から定法に埓っおRNAを抜出し、ショヌトリヌド型次䞖代シヌケンサヌIllumina甚のRNA-seqラむブラリを䜜成した。完成したラむブラリはIllumina瀟のMiSeqでpaired-endむンサヌトの䞡端を読むの条件で76bpず぀シヌク゚ンスした。今回の挔習で提䟛するシヌケンスデヌタは、シヌケンサヌから埗られた生リヌドをすでに前凊理 (cutadaptを利甚しお無駄なアダプタヌ配列や質の䜎い配列を陀去)しおある。

この挔習の目暙は、HISAT2 -> StringTie -> edgeR のパむプラむンの孊習を通しお、明暗条件の差で発珟の差がある遺䌝子=DEG (differential expressed genes)を同定するこずである。

このパむプラむンは基瀎生物孊研究所 ゲノムむンフォマティクストレヌニングコヌスGITCの挔習問題 case2 をベヌスに、䜜成した。

参考

前提条件

以降の手順はSet up AWSの䜜業を実斜枈みであるこずが前提です。ただ実行環境を準備しおいない堎合はSet up AWSを参考に環境構築を行っおください。

むンスタンスを停止しおいる堎合

事前に環境構築を準備しむンスタンスを停止しおいる堎合はむンスタンスの起動をしおください。

SSH Remote Connectionを参考に SSH コマンドで仮想マシンぞリモヌト接続を行っおください。

SSH コマンドでリモヌト接続埌、以䞋のコマンドで挔習で必芁な゜フトりェアをむンストヌル枈みの仮想環境ぞ切り替えしおください。

conda activate tutorial-rnaseq

Overview

Workflow

    1. リヌドをゲノムにマップする。゜フトりェアは、hisat2を䜿う。
    1. マッピング結果から遺䌝子ごずにリヌド数をカりントする。゜フトりェアは、stringtieを䜿う。
    1. で埗られたカりントデヌタに基づいお明暗条件の矀間比范の統蚈解析を行う。゜フトりェアは、edgeRを䜿う。

Data

デヌタファむルを以䞋から取埗しおください。

もし䞊のURLにうたく接続できない堎合は、Google Driveから取埗しおください。

解凍するず、dataフォルダが生成される。dataフォルダ以䞋に本ハンズオン実習に䜿うデヌタファむルが含たれる。dataフォルダごず、䜿いやすい堎所に移動する。以䞋では、ホヌムディレクトリ~/の盎䞋にdataフォルダを移動しおきたものずしお解説する。

Input reads

ファむルは、~/data/reads にある。paired-end シヌケンスしおいるので断片の䞡方から読んでいる、サンプルそれぞれ、぀ず぀ファむルがある(Read1, Read2もしくはforward, reverseず呌ばれる。

  • 2D_rep1: 実隓条件暗, 繰り返し実隓#1: 2D_rep1_R1.fastq, 2D_rep1_R2.fastq [R1: Read1 (Fwd); R2: Read2 (Rev) 以䞋同様]
  • 2D_rep2: 実隓条件暗 繰り返し実隓#2: 2D_rep2_R1.fastq, 2D_rep2_R2.fastq
  • 2D_rep3: 実隓条件暗, 繰り返し実隓#3: 2D_rep3_R1.fastq, 2D_rep3_R2.fastq
  • 2D2L_rep1: 実隓条件明, 繰り返し実隓#1: 2D2L_rep1_R1.fastq, 2D2L_rep1_R2.fastq
  • 2D2L_rep2: 実隓条件明, 繰り返し実隓#2: 2D2L_rep2_R1.fastq, 2D2L_rep2_R2.fastq
  • 2D2L_rep3: 実隓条件明, 繰り返し実隓#3, 2D2L_rep3_R1.fastq, 2D2L_rep3_R2.fastq

実隓条件正確には、2D=2日間暗、2D2L=2日間暗の埌2日間明

Reference

  • genome sequence: genome.fa -- シロむヌナズナのゲノムシヌケンス。FASTA フォヌマット。
  • gene annotation: genes.gtf -- シロむヌナズナの遺䌝子アノテヌション情報。GTF フォヌマット。

Software

  • hisat2
  • stringtie
  • samtools
  • edgeR

䞊蚘環境構築のステップでむンストヌル枈み。

Preparation

Prepare working directory

䜜業ディレクトリを䜜成し、以䞋の解析はその䞋で䜜業しよう。

$ mkdir project-1
$ cd project-1

ファむルにアクセスしやすいようにシンボリックリンクを貌っおおこう。

ln -s ../data/genome.fa
ln -s ../data/genes.gtf
ln -s ../data/reads

むンストヌルしたconda環境をactivateするただであれば

conda activate tutorial-rnaseq

Sequence reads

解析察象のシヌケンスリヌドの基本情報リヌドの本数や長さなどを取埗する。seqkitの stats サブコマンドが䟿利。

seqkit stats reads/*.fastq.gz

出力結果の䟋

file                              format  type  num_seqs     sum_len  min_len  avg_len  max_len
data/reads/2D2L_rep1_R1.fastq.gz  FASTQ   DNA    539,633  40,955,449       50     75.9       76
data/reads/2D2L_rep1_R2.fastq.gz  FASTQ   DNA    539,633  40,933,587       50     75.9       76
data/reads/2D2L_rep2_R1.fastq.gz  FASTQ   DNA    479,469  36,390,170       50     75.9       76
data/reads/2D2L_rep2_R2.fastq.gz  FASTQ   DNA    479,469  36,371,085       50     75.9       76
data/reads/2D2L_rep3_R1.fastq.gz  FASTQ   DNA    403,488  30,623,819       50     75.9       76
data/reads/2D2L_rep3_R2.fastq.gz  FASTQ   DNA    403,488  30,610,016       50     75.9       76
data/reads/2D_rep1_R1.fastq.gz    FASTQ   DNA    377,791  28,676,854       50     75.9       76
data/reads/2D_rep1_R2.fastq.gz    FASTQ   DNA    377,791  28,657,121       50     75.9       76
data/reads/2D_rep2_R1.fastq.gz    FASTQ   DNA    328,491  24,922,717       50     75.9       76
data/reads/2D_rep2_R2.fastq.gz    FASTQ   DNA    328,491  24,919,185       50     75.9       76
data/reads/2D_rep3_R1.fastq.gz    FASTQ   DNA    430,418  32,661,169       50     75.9       76
data/reads/2D_rep3_R2.fastq.gz    FASTQ   DNA    430,418  32,648,214       50     75.9       76

ゲノムぞのマッピングをhisat2で行う

hisat2怜玢甚のむンデックスを䜜成

hisat2で怜玢するためにはリファレンスゲノムの配列をむンデックス化する準備が必芁

[Ohmura]ファむルパス修正: ./genome.fa(シンボリックリンク) か../data/genome.faのどちらかぞ

hisat2-build ../genome.fa genome

genome.1.ht2 など぀のファむルが生成される。

hisat2を䜿っおマッピング

hisat2を䜿っおリヌド配列をゲノム䞊蚘で䜜成したむンデックスを利甚にマッピングする。たず、hisat2コマンドの䜿い方を確認。

hisat2 --help

Usage:
  hisat2 [options]* -x <ht2-idx> {-1 <m1> -2 <m2> | -U <r>} [-S <sam>]

  <ht2-idx>  Index filename prefix (minus trailing .X.ht2).
  <m1>       Files with #1 mates, paired with files in <m2>.
             Could be gzip'ed (extension: .gz) or bzip2'ed (extension: .bz2).
  <m2>       Files with #2 mates, paired with files in <m1>.
             Could be gzip'ed (extension: .gz) or bzip2'ed (extension: .bz2).
  <r>        Files with unpaired reads.
             Could be gzip'ed (extension: .gz) or bzip2'ed (extension: .bz2).
  <sam>      File for SAM output (default: stdout)

  <m1>, <m2>, <r> can be comma-separated lists (no whitespace) and can be
  specified many times.  E.g. '-U file1.fq,file2.fq -U file3.fq'.

以䞋略

-x の埌に先ほど䜜成したむンデックス名。今回はpaired-endシヌケンスなので、-1ず-2オプションでそれぞれRead1, Read2のファむル名を指定。出力はsamフォヌマットで欲しいので、-Sの埌に出力先のファむル名。

䟋

hisat2 -p 4 --dta -x genome -1 reads/2D_rep1_R1.fastq.gz -2 reads/2D_rep1_R2.fastq.gz -S 2D_rep1.sam

その他のオプションの説明

  • -p: number of alignment threads。利甚しおいる蚈算機環境に合わせお蚭定する。今回䜿っおいるEC2はvCPUが぀なので以䞋を指定。
  • --dta: report alignments tailored for transcript assemblers including StringTie. この埌、StringTieを䜿うので、このオプションを぀ける。

他の぀も同様に。

 hisat2 -p 4 --dta -x genome -1 reads/2D_rep2_R1.fastq.gz -2 reads/2D_rep2_R2.fastq.gz -S 2D_rep2.sam
 hisat2 -p 4 --dta -x genome -1 reads/2D_rep3_R1.fastq.gz -2 reads/2D_rep3_R2.fastq.gz -S 2D_rep3.sam
 hisat2 -p 4 --dta -x genome -1 reads/2D2L_rep1_R1.fastq.gz -2 reads/2D2L_rep1_R2.fastq.gz -S 2D2L_rep1.sam
 hisat2 -p 4 --dta -x genome -1 reads/2D2L_rep2_R1.fastq.gz -2 reads/2D2L_rep2_R2.fastq.gz -S 2D2L_rep2.sam
 hisat2 -p 4 --dta -x genome -1 reads/2D2L_rep3_R1.fastq.gz -2 reads/2D2L_rep3_R2.fastq.gz -S 2D2L_rep3.sam

Inspect Results

hisat2実行時にmappning stats情報がreportされる。これはマッピング率など実隓の成吊を評䟡できる数倀であるので蚘録しおおくずよい。あるいは以䞋のように、--new-summary --summary-fileのオプションを付けおおくず、mappning stats情報が指定するファむルに出力される。

$ hisat2 -p 4 --dta --new-summary --summary-file 2D_rep1.summary -x genome -1 reads/2D_rep1_R1.fastq.gz -2 reads/2D_rep1_R2.fastq.gz -S 2D_rep1.sam

SAM フォヌマットから BAMぞの倉換

hisat2の結果ファむルをSAMフォヌマットからBAMに倉換する。さらにむンデックスを䜜成する。これらの凊理には、samtoolsを䜿う。

samtools sort -@ 3 -o 2D_rep1.sorted.bam  2D_rep1.sam
samtools index 2D_rep1.sorted.bam

他の぀も同様。ちなみに、シェルスクリプトで぀自動で凊理するには以䞋のようにする。

for f in *sam
do
  samtools sort -@ 3 -o `basename $f .sam`.sorted.bam $f
done

for f in *bam
do
  samtools index $f
done

ゲノムブラりザでマッピング結果を可芖化

線集泚このセクションは改倉を怜蚎䞭。IGVのロヌカル環境のむンストヌルの説明を䞊でただ行っおいない。AWSからデヌタダりンロヌドには費甚がかかる。bam fileの合蚈サむズを調べるず300MBくらい。転送料金5円以䞋なので蚱容範囲か。SS

ゲノムブラりザIGV䞊で、マッピング結果を可芖化する。

  1. 手元のマシンに党おの sorted.bam 及び、sorted.bam.baiファむルを scp コマンドで転送しおくるこず。
    1. 実行コマンド䟋: scp -i ~/.ssh/handson.pem ubuntu@[instance-public-dns-name]:/home/ubuntu/project-1/*.bam* .
  2. IGVを立䞊げる。
  3. メニュヌ Genomes > Load Genome From File... で enome.fa を遞択、File > Load from File ... で genes.gtf を遞択
  4. File > Load from File ... で䜜補した .sorted.bam を読み蟌む
  5. 適圓にズヌムアップする。

Transcript assembly and quantification with StringTie

 stringtie -p 4 -e -G genes.gtf -o stringtie_count/2D_rep1/2D_rep1.gtf 2D_rep1.sorted.bam
 stringtie -p 4 -e -G genes.gtf -o stringtie_count/2D_rep2/2D_rep2.gtf 2D_rep2.sorted.bam
 stringtie -p 4 -e -G genes.gtf -o stringtie_count/2D_rep3/2D_rep3.gtf 2D_rep3.sorted.bam
 stringtie -p 4 -e -G genes.gtf -o stringtie_count/2D2L_rep1/2D2L_rep1.gtf 2D2L_rep1.sorted.bam
 stringtie -p 4 -e -G genes.gtf -o stringtie_count/2D2L_rep2/2D2L_rep2.gtf 2D2L_rep2.sorted.bam
 stringtie -p 4 -e -G genes.gtf -o stringtie_count/2D2L_rep3/2D2L_rep3.gtf 2D2L_rep3.sorted.bam

-e オプションを぀けるこずにより、-Gで指定したgtfファむルに蚘茉されおいる遺䌝子モデルのみを解析察象にする。もし-eを぀けなければ新芏の遺䌝子を探玢する。これらのコマンドにより、この埌の解析に甚いるカりント情報が含たれる新たなgtfファむルが、-oで指定するファむルぞ出力される。

遺䌝子ごずのリヌドのカりントをテヌブル圢匏で出力する

䞊蚘のstringtieの結果のgtf出力から、遺䌝子ごずにリヌドが䜕個あるのかのカりントデヌタをテヌブル圢匏で出力する。぀たり,

行遺䌝子数 x 列条件数

のテヌブルmatrixを䜜成する。この圢匏のテヌブルは、倚くの遺䌝子発珟解析、発珟倉動の統蚈解析やネットワヌク解析のツヌルで入力情報ずしお求められる。

stringtieのgtf出力をカりントデヌタに倉換するには、strinttieの開発者が提䟛しおいる、prepDE.py スクリプトを利甚する。今回はbiocondaセットアップ時にむンストヌル枈みであり、パスも通っおいる。

prepDE.py -i stringtie_count

以䞋の぀の結果ファむルが生成される。

  • gene_count_matrix.csv
  • transcript_count_matrix.csv

前者がgene遺䌝子単䜍のカりントデヌタ、埌者がtranscriptmRNA、スプラむシングバリアンずが存圚する堎合は別々にカりント)単䜍のカりントデヌタ。倚くの解析は遺䌝子単䜍で行うので、䞻に前者のファむルを䜿う。

less コマンド, wc コマンドで内容確認

(ex)

gene_id,2D2L_rep1,2D2L_rep2,2D2L_rep3,2D_rep1,2D_rep2,2D_rep3
AT1G01020|ARV1,8,8,4,5,0,19
AT1G01060|LHY,3,3,0,0,0,4
AT1G01070|AT1G01070,11,9,4,0,0,0
AT1G01040|DCL1,36,18,22,24,42,18
AT1G01046|MIR838A,0,0,1,0,0,0
AT1G01050|AtPPa1,67,70,54,45,33,25
AT1G01080|AT1G01080,76,58,58,68,38,55
...

wc gene_count_matrix.csv
  33603   33680 1140286 gene_count_matrix.csv

カンマ区切りのCSVフォヌマットであるこず、33602 x 6 の matrixであるこずがわかる。

edgeR による発珟倉動解析 -- 2D2L / 2D の条件の違いで統蚈的に有意に発珟が異なる遺䌝子を同定する

前ステップたでで埗られた遺䌝子発珟カりントデヌタに基づいお、2D2L ず 2D の぀の条件で統蚈的に有意に発珟レベルが異なる遺䌝子を芋぀ける。ここでは、Rのラむブラリの䞀぀であるedgeRを甚いお矀間比范のパむプラむンをR環境で実斜する。

コマンドラむンにおR環境を起動する。

$ R

以䞋R環境

> library(edgeR) # edgeRラむブラリを読み蟌む

# 前ステップたでで埗られた遺䌝子ごずのリヌドカりントデヌタCSVフォヌマットを読み蟌む。デヌタフレヌムに栌玍される。
> dat <- read.csv("gene_count_matrix.csv",row.names=1)

> head(dat) # 適切に入力できたか確認
                    X2D2L_rep1 X2D2L_rep2 X2D2L_rep3 X2D_rep1 X2D_rep2 X2D_rep3
MSTRG.1|ARV1                 8          8          4        5        0       19
AT1G01060|LHY                3          3          0        0        0        4
AT1G01070|AT1G01070         11          9          4        0        0        0
MSTRG.6|DCL1                36         18         22       24       42       18
MSTRG.6|MIR838A              0          0          1        0        0        0
MSTRG.7|AtPPa1              67         70         54       45       33       25

# ここからedgeRを䜿った解析
> grp <- c(rep("2D2L", 3), rep("2D", 3)) # サンプルがそれぞれ条件のどちらに属するか定矩
> grp
[1] "2D2L" "2D2L" "2D2L" "2D"   "2D"   "2D"

> D <- DGEList(dat, group=grp) # 先ほど読み蟌んだカりントデヌタのデヌタフレヌムをedgeRで扱うためのオブゞェクトに倉換する。
> D <- calcNormFactors(D, method="TMM")        # Normalization 暙準化
> D <- estimateCommonDisp(D)                   # 実デヌタから確率分垃負の二項分垃のパラメヌタ掚定 step-1
> D <- estimateTagwiseDisp(D)                  # 実デヌタから確率分垃負の二項分垃のパラメヌタ掚定 step-2

# ここたでで準備完了。䞊蚘ステップで掚定された各皮パラメヌタを確認しおおく。

> D$samples # normalization の効果を確認
           group lib.size norm.factors
X2D2L_rep1  2D2L   987874    1.0267383
X2D2L_rep2  2D2L   824228    0.9305706
X2D2L_rep3  2D2L   689697    0.9888950
X2D_rep1      2D   597188    1.0250815
X2D_rep2      2D   516354    1.1027216
X2D_rep3      2D   655218    0.9363031

> D$common.dispersion #負の二項分垃のcommon dispersion
[1] 0.243539
> summary(D$tagwise.dispersion) #負の二項分垃のtagごず今回の堎合堎合遺䌝子ごずのdispersion
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max.
0.003805 0.218418 0.318444 1.599216 2.219825 9.752049

それではいよいよ、発珟倉動遺䌝子(Differential Expressed Genes; DEG)の同定。edgeRのexactTest関数を䜿う。これは䞊蚘のように掚定されたデヌタの確率分垃に基づいお、統蚈的に有意に条件間で発珟レベルが異なるかどうかをtestする。

> de.2D.vs.2D2L <- exactTest(D, pair=c("2D", "2D2L"))

# pvalueが䞊䜍の遺䌝子を芋おみる
> topTags(de.2D.vs.2D2L)
Comparison of groups:  2D2L-2D
                      logFC    logCPM        PValue           FDR
AT2G34430|LHB1B1  10.394710 10.665673 1.995311e-138 6.704643e-134
AT3G01500|CA1      4.743305 11.015099 5.666909e-135 9.520974e-131
AT5G54770|THI1     6.910262 10.734379 2.778929e-131 3.112586e-127
AT2G38530|LTP2    -5.467124 11.523626 1.033709e-127 8.683676e-124
AT4G14130|XTR7    -6.262324  9.393107 5.761200e-126 3.871757e-122
AT5G54190|PORA   -12.891697  9.390253 1.750147e-123 9.801404e-120
AT3G21720|ICL     -6.505456 11.583401 8.206907e-123 3.939550e-119
AT3G54890|LHCA1    5.230979 11.440747 2.381888e-121 1.000453e-117
AT3G47470|LHCA4    3.859215 11.471514 2.015963e-102  7.526709e-99
AT2G05070|LHCB2    5.400649  9.067715  1.141347e-99  3.835153e-96

# 蚈算結果をタブ区切りテキストに出力する。

> tmp <- topTags(de.2D.vs.2D2L, n=nrow(de.2D.vs.2D2L))
> write.table(tmp$table, "de.2D.vs.2D2L.txt", sep="\t", quote=F)

R環境から抜けお、de.2D.vs.2D2L.txt ファむルが生成されおいるかを確認。䞭身をless等で確認。

DEG遺䌝子の怜蚌。たずえばTopTagsで第䜍の”AT2G34430|LHB1B1”遺䌝子に着目しよう。この遺䌝子は、リヌドカりントは以䞋のようになっおいる。

(R環境の堎合)

> dat["AT2G34430|LHB1B1",]
                 X2D2L_rep1 X2D2L_rep2 X2D2L_rep3 X2D_rep1 X2D_rep2 X2D_rep3
AT2G34430|LHB1B1       2743       2875       2227        2        2        0

(コマンドラむンの堎合)

$ grep "^AT2G34430|LHB1B1" gene_count_matrix.csv
AT2G34430|LHB1B1,2743,2875,2227,2,2,0

぀たり、2D2L条件明条件では発珟レベルが高く、2D条件暗条件でほずんど発珟しおいない。どのような機胜の遺䌝子なのであろうかモデル怍物であるシロむヌナズナでは遺䌝子情報が蓄積されおいるのでNCBIのデヌタベヌスで確認しおみる。

䞊蚘デヌタベヌスの怜玢りィンドりに、AT2G34430 のIDを入力しおみよう。

「light-harvesting chlorophyll-protein complex II subunit B1」ずアノテヌションされおおり、説明を読むず、葉緑䜓内郚のクロロフィルを構成する光合成に関わるタンパク質をコヌドする遺䌝子であるこずがわかる。明条件でのみ発珟が高かったこずが玍埗いく結果である。

Links

hisat2

https://ccb.jhu.edu/software/hisat2/index.shtml

stringtie

http://www.ccb.jhu.edu/software/stringtie/

edgeR

http://bioconductor.org/packages/release/bioc/html/edgeR.html

Notes

論文情報

Transcript-level expression analysis of RNA-seq experiments with HISAT, StringTie and Ballgown https://www.nature.com/articles/nprot.2016.095

⚠ **GitHub.com Fallback** ⚠