SlideShare a Scribd company logo
RNA-Skim: a rapid method for 
RNA-Seq quantification at transcript level 
ISMB2014読み会@CBRC! 
! 
露崎弘毅! 
東京理科大学 薬学研究科 生命情報科学研究室! 
理化学研究所 バイオインフォマティクス研究開発ユニット
RNA-seqで発現量を 
示すための指標
RNA-seqで発現量を示すための指標 
Count 
Relative abundance [式変形の中でよく出てくる] 
配列に何個リードが張り付いたか! 
例 6 
全リードのうち、何割張り付いたか! 
例 6 × 1 / 107 = 6 × 10-7 
× 
全リード数 
1 
ρ = 
RPK/CPK (Reads/Counts per kilobase of exon) [Mortazavi, et al., 2008] 
100万リードのうち、何リード張り付いたか! 
例 0.6 
106 
RPM/CPM (Reads/Counts per million mapped reads) [Mortazavi, et al., 2008] 
配列の1000bp当たり、何リード張り付いたか! 
例 6 × 103 / 2000 = 3 
× 
全リード数 
× 
103 
配列長 
カウント 
カウント 
カウント 
カウント
RNA-seqで発現量を示すための指標 
RPKM (Reads per kilobase of exon per million mapped reads) 
[Mortazavi, et al., 2008, Marioni, et al., 2008] 
× 
106 
全リード数 
カウント 
FPKM (Fragments per kilobase of exon per million mapped reads) 
[Trapnell, et al., 2010] 
RPK + RPM! 
例 0.6 × 103 / 2000 = 0.3 
Paired-endに対応すべく、リードでは無くリードのペア 
(しいてはその元となるフラグメント)毎に考える! 
例 0.6 / 500 = 1.2 × 10-3 
× 
103 
配列長 
106 
全フラグメント数 
× 
103 
フラグメント長の期待値 
× 
フラグメント! 
(長さが一定ではない) 
flagment length 
カウント
RNA-seqで発現量を示すための指標 
TPM (Transcripts per million) [Li, et al., 2010, Patro, et al., 2014] 
106 × 
カウント 
マッピングされたリードは、全transcriptomeが106個ある場合、何transcript相当か! 
(リードのcoverageや、全transcriptの長さが一定であると暗に仮定)! 
例 6 × 10-7 × 106 = 0.6 
ソフトウェアによって何を計算するか違う! 
RNA-SkimはRPKMとTPMに対応している! 
本当は配列長で割るところは正確には”有効配列長”というものを使う! 
(詳しくは、@yag_aysさんのブログなど) 
配列長 
× 
1 
カウント 
配列長 
Σ all transcripts
RNA-seq定量化における 
EMアルゴリズム
フラグメント割当て問題 
gene Isoform Read 
現象 
12 × 2 = 24 reads 
6 × 3 = 18 reads 
6 × 4 = 24 reads 
データ解析 
exon1 exon2 exon3 exon4 
欲しいのはこういった相対値 
exon1exon2exon3exon4 
exon1exon2 
exon1exon3 
FASTQ 
どのIsoform由来かわからない 
同じエクソンを共有しているところ 
で、重複が出る 
exon1 exon2 exon3 exon4 
exon1 exon2 
exon1 exon3 
マッピング 
2 (0.22) 
3 (0.33) 
4 (0.44) 
exon1 exon2 exon3 exon4 
exon1 exon2 
exon1 exon3 
マルチマップ実はこうなってる 
exon1 exon2 exon3 exon4 
exon1 exon2 
exon1 exon3 
○!※□◇#△!? 
66 reads 
42 reads 
45 reads
HTSeq, DNAnexusの場合 
exon1 exon2 exon3 exon4 
そのまま使う 
(早いが不正確) 
exon1 exon2 
exon1 exon3 
66 reads 
42 reads 
45 reads
NEUMAの場合 
6 + α reads 
α’ reads 
α’’ reads 
exon1 exon2 exon3 exon4 
他のIsoformと共有している配列は低く見積もり、ユニークな配列だけ見る! 
(情報のロスが激しい) 
exon1 exon2 
exon1 exon3
rQuant, IsoInferの場合 
Isoformのcoverage 
exon1 exon2 exon3 exon4 
exon1 exon2 
exon1 exon3 
Geneのcoverage 
exon1 exon2 exon3 exon4 
どのIsoformも、極力 
Geneのcoverageに似 
るように 
カバレッジの期待値と観測値の誤差を最小化! 
(rQuantはリード毎にどのIsoformに割り当て、IsoInferはexon-intronの区間毎に割り当て)! 
ハードに割当て、最適解である保証は無い、個々のフラグメントの情報は失われる
Cufflinks (default) 
exon1 exon2 exon3 exon4 
重複した場合は平等に割る 
exon1 exon2 
exon1 exon3 
1 / 3にする 
1 / 2にする
Cufflinks (-u), RSEM, TIGAR, IsoEM, eXpress…の場合 
exon1 exon2 exon3 exon4 
2. Relative abundance! 
ρ = (ρ1, ρ2, ρ3)! 
を求める(E-Step) 
EMアルゴリズムを利用してリードを各Isoformに振り分ける! 
(現在の主流?、一番正確だと言われる) 
exon1 exon2 
exon1 exon3 
確率的に! 
最も尤もらしい 
exon1 exon2 exon3 exon4 
exon1 exon2 
exon1 exon3 
3. ρからαを再計算! 
(M-Step、暗に一様分 
布を仮定) 
1. このリードがここに張り付く確率! 
α = (α1, α2, α3)! 
を設定 
ρ1 
ρ2 
ρ3
Sailfishの場合 (k-mer counting) 
exon1 exon2 exon3 exon4 
リードのk-mer 
k-merのカウントを振り分け! 
(EMアルゴリズム) 
あらかじめk-merの場所を把握しておく & 高速、省メモリな 
ハッシュの利用で高速化を図る 
exon1 exon2 
exon1 exon3 
Index 
20-mer程度で短く見ていく 
exon1 exon2 exon3 exon4 
exon1 exon2 
exon1 exon3 
Minimum perfect hash function! 
Lock-Free memory-efficient hash table
RNA-Skimの場合 (sig-mer counting) 
このクラスターにのみ存在するk-mer (sig-mer) 
exon1 exon2 exon3 exon4 
exon1 exon2 
exon1 exon3 
Index 
リードのsig-mer 
sig-merのカウントを振り分け! 
(EMアルゴリズム) 
あらかじめ似ている配列をクラスタリングしておき、そのクラスターにだけ存在す 
るk-mer(sig-mer)に限定し、さらに見るところをまばらにする事で高速化を図る! 
(全k-merのうち、3.5%程度しか使わない) 
other sequence 
クラスター 
exon1 exon2 exon3 exon4 
exon1 exon2 
exon1 exon3 
other sequence 
at least 50bp
離れた二カ所のdepth 
0.985 
x x + 20 
fragment! 
depth 
transcriptome上のある箇所でのfragment depthちょっとずれたところで! 
みても大体同じ! 
-> 「全k-mer見ないで、所々かいつまんで見ても問題無い」という著者らの主張
Methods
全体の流れ 
reference transcriptome 
に対する操作 
RNA-seqデータ 
に対する操作
Preparation Stage (Transcriptome Partitioning) 
例1 : k-mer-Similarity(t1, t2)、5-merの場合! 
k-mer (t1) = (AAAGG, AAGGG, …, CTCTC)! 
k-mer (t2) = (AAAGG, AAGGG, …, GGGTT)! 
|k-mer (t1)| = 11! 
|k-mer (t2)| = 11! 
k-mer (t1) ∩ k-mer(t2) = (AAAGG, …, GAAAA)! 
| k-mer (t1) ∩ k-mer(t2)| = 6! 
より、! 
max(11/6, 11/6) = 1.83! 
! 
例2 : k-mer-Similarity(A, B)、5-merの場合! 
k-mer (A) = (AAAGG, AAGGG, …, CTATC)! 
k-mer (B) = (ATTTC, TTTCA, …, CTCTC)! 
|k-mer (A)| = 19! 
|k-mer (B)| = 12! 
k-mer (A) ∩ k-mer(B) = (CTCTC)! 
| k-mer (A) ∩ k-mer(B)| = 1! 
より、! 
max(1/19, 1/12) = 0.08 
A 
B 
k-mer()とはここでは与えられた配列のk-merを返す関数とする 
(φは1配列でも、複数の配列でも良い)! 
しきい値(γ)よりも大きい類似度同士は同じクラスターとする(論文では0.2を利用)
Preparation Stage (sig-mer discovery) 
A 
B 
このクラスター内にだけに存在するk-merをsig-merとする(下線のやつ)
Bloom Filter 
「たまに間違った値を返す時(偽陽性)があるけど、その分高速なハッシュ」みたいなもの! 
データを削除できない、値自体は取り出せないといった特徴がある 
クラスター毎に、このk-merが他のクラスター 
には無いかどうか判定するのに使っている 
(有る無し判定だけできれば良い)
Preparation Stage (Sig-mers selection) 
全てのsig-merは使わない! 
少なくとも50bpは離れるようにsig-merを選択
Quantification Stage (Filtering by rolling hash) 
Rabin-Karp String Search Algorithmで利用されるハッシュ関数! 
大量のテキストデータに、複数のキーワード検索をかける時とかに使うらしい
Quantification Stage (Counting, Quantification) 
sig-merは他のクラスターには無い(定義から)! 
EMアルゴリズムは各クラスター毎に完全に独立して計算できる! 
=> 並列化が容易
Results
クラスタリングについて 
Transcriptレベルで分割(全て異なるクラスターとする) 
Geneレベルで分割(同じgeneのtranscriptは同じクラスターとする) 
k-mer-similarityをベースに分割 
分割しない 
このsig-mer coverageが何を指しているのか不明! 
(文脈的に「sig-merを一つでも持っている配列の割合」?)! 
x軸をtranscript / clusterとして、! 
ランダムにxだけtranscript / clusterを選択して、sig-merが実際に 
他のtranscript / clusterに存在しないか確かめた、とかだろうか… 
「Transcriptレベルは、同じexonを共有しているisoformが存在する 
から、sig-merを見つける事が難しい」という事を言いたいらしい
検証1 (人口データ) 
Ensembl! 
Mouse reference sequence 
(GRCm38 build70) 
100サンプル! 
(リード数が2×107 ~ 1×108) 
Sailfish論文でも利用されていた 
人口SAMファイル作成プログラム
検証1 (人口データ) 
RSEM, Sailfish, eXpress, Cufflinksと比較した! 
RNA-Skimはsig-merの長さを20 - 95bpに変えてみた 
(a), (b) : 相関係数 (0.01より大きなRPKMの対数値)! 
- Truthと書いてあるのはFlux Simulatorがそういうデータを作るらしい! 
- どの手法も大して変わらない! 
- sig-merは長すぎても良くない(あてがわれるリードの数が減る) 
(c) : significant false positive rate! 
(RPKMの推定値が0.1より大きいのに、true RPKMが0.01より小さい 
transcriptの割合)! 
(d) : significant false negative rate! 
(RPKMの推定値が0.01よりも小さいのに、true RPKMは0.1より大きい 
transcriptの割合)! 
- sig-merは長過ぎても良くない(理由は上と同じ) 
経験的に60-merくらいが良いとの事
検証1 (人口データ) 
sig-merの数を変えてみた 
(a), (b) : 相関係数! 
- sig-merが多いほど良い 
(c) : significant false positive rate! 
- ほとんど変化無し 
(d) : significant false negative rate! 
- sig-merが多いほど良い 
sig-merは沢山使うほどよい! 
(論文では2.58だった)
検証1 (人口データ) 
sig-mer-similarityのしきい値(γ)を変えてみた! 
-> それほど変化無し 
True RPKMとRPKMの推定値は、綺麗に線形回帰する
検証2 (リアルデータも利用) 
18の近交系のマウスと! 
58のF1マウス! 
(CAST/EiJ, PWK/PhJ, WSB/EiJの3パターンのかけ合わせ)! 
のデータを使った(脳からサンプリング) 
RNA-Skimと他4手法で比較した 
相関係数は、real data / simulationデータでさほど 
変わらない! 
! 
実際のデータの方がばらつきやすい
実行時間 
この時はまだマルチスレッド 
に対応してなかった
展望 
❖ より省メモリなデータ構造! 
❖ より良いsig-mer selection (一様 -> 情報がある箇所だけ! 
❖ バイアスを考慮! 
❖ マルチスレッドに対応
実際に使ってみた
インストール (1/3) 
# GCC-4.8のインストール! 
# 自分のホームディレクトリにだけ、新しいGCCを入れたい場合! 
mkdir /PATH/TO/YOUR/HOME/GCC! 
mkdir /PATH/TO/YOUR/HOME/GCC/lib! 
cd /PATH/TO/YOUR/HOME/GCC! 
wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.3/gcc-4.8.3.tar.gz! 
tar zxvf gcc-4.8.3.tar.gz! 
cd gcc-4.8.3! 
./contrib/download_prerequisites! 
./configure --disable-multilib --prefix= /PATH/TO/YOUR/HOME/GCC ! 
--libdir= /PATH/TO/YOUR/HOME/GCC/lib! 
make! 
make install! 
! 
# マシンのデフォルトgcc/g++を確認! 
gcc --version! 
g++ —version! 
! 
# PATH/TO/YOUR/HOME/GCCにあるgcc/g++を確認! 
/PATH/TO/YOUR/HOME/GCC/bin/gcc --version! 
/PATH/TO/YOUR/HOME/GCC/bin/g++ --version
インストール (2/3) 
# RNA-Skimのインストール! 
wget https://github.com/zzj/RNASkim/archive/master.zip! 
unzip master.zip! 
cd RNASkim-master! 
export CXX=/PATH/TO/YOUR/HOME/GCC/bin/g++! 
! 
./prepare.sh! 
cd src! 
make all! 
make all # なぜか二回やらないとコンパイルされない
インストール (3/3) 
##### refMrnaを以下のような形式に変換! 
##### (Ensemblの場合はソースコード有り、RefSeqの場合は自力で)! 
##### > 遺伝子名|アイソフォーム名1|アイソフォーム名2! 
##### 配列1|配列2! 
! 
cat Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf |! 
awk '{print $10,$16}' | sed 's/"//g' | sed 's/;//g' | sort | uniq > list_mm10.txt! 
! 
# 自力の場合! 
R CMD BATCH RNASkim_Merge.R! 
!
RNASkim_Merge.Rの中身 
library("Biostrings")! 
! 
# Gene|Iso! 
Gene_Iso <- read.table("list_mm10.txt", header=F)! 
colnames(Gene_Iso) <- c("Gene", "Iso")! 
! 
# Iso|Seq! 
Iso_Seq <- readDNAStringSet("mm10.fa")! 
# Iso! 
Iso <- names(Iso_Seq)! 
# Seq! 
Seq <- as.vector(as.character(Iso_Seq))! 
! 
# Iso|Gene|Seq! 
TMP <- data.frame(Iso=Iso, Seq=Seq)! 
! 
# Gene|Iso1|Iso2|Seq1|Seq2! 
out <- merge(Gene_Iso, TMP, by="Iso")! 
! 
# >Gene|Iso1|Iso2! 
# Seq1|Seq2! 
Gene <- unique(as.character(Gene_Iso[,1]))! 
sink(file="mm10_merged.fa")! 
for(i in 1:length(Gene)){! 
! locus <- which(out[,2] == Gene[i])! 
! if(length(locus) != 0){! 
! ! cat(paste(paste(">", Gene[i], sep=""), paste(out[locus, 1], collapse="|"), sep="|"))! 
! ! cat("n")! 
! ! cat(paste0(out[locus,3], collapse="|"))! 
! ! cat("n")! 
! }! 
}! 
sink()!
コマンド 
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/PATH/TO/YOUR/HOME/GCC/lib64! 
Soft="/PATH/TO/YOUR/HOME/RNASkim-master/src"! 
! 
# reference transcriptomeに対する操作 (3コマンド)! 
GLOG_logtostderr=1 $Soft/rs_cluster -gene_fasta=mm10_merged.fa ! 
-num_threads=4 -output=mm10_clustered.fa -rs_length=60! 
GLOG_logtostderr=1 $Soft/rs_index -gene_fasta=mm10_clustered.fa ! 
-index_file=mm10_clustered_gene.fa.pb -rs_length=60 -num_threads 4! 
GLOG_logtostderr=1 $Soft/rs_select -index_file=mm10_clustered_gene.fa.pb ! 
-selected_keys_file=mm10_clustered_gene.fa.sk! 
! 
# fastqに対する操作 (2コマンド) 
GLOG_logtostderr=1 $Soft/rs_count -selected_keys_file=mm10_clustered_gene.fa.sk ! 
-count_file=XXXXX_clustered_gene.fa.cf -read_files1=XXXXX_1.trim.fastq ! 
-read_files2=XXXXX_2.trim.fastq -num_threads=4! 
! 
$Soft/rs_estimate -count_file=XXXXX_clustered_gene.fa.cf > FPKM_TABLE.txt
そもそも扱えるreference transcriptomeが少ない? 
Software reference hg19 
(RefSeq, Human) 
mm10 
(RefSeq, Mouse) 
cufflinks genome 43497 genes 30608 genes 
RSEM transcriptome 47246 transcripts 32987 transcripts 
TIGAR transcriptome 47246 transcripts 32987 transcripts 
eXpress transcriptome 47246 transcripts 32987 transcripts 
Sailfish transcriptome 47246 transcripts 32987 transcripts 
RNA-Skim transcriptome 33727 transcripts 26568 transcripts 
Warningメッセージを見る限り、referenceのうちIUPAC表記 
(R, W, Y, Nとか)が含まれているものは扱えないから?
実際はさほど早くない?
参考 
# 発現量の指標! 
・Transcript assembly and quantification by RNA-Seq reveals unannotated transcripts and isoform 
switching during cell differentiaion! 
・RSEM: accurate transcript quantification from RNA-Seq data with or without a reference genome! 
・RNA-Seq gene expression estimation with read mapping uncertainty! 
・Sailfish: Rapid Alignment-free Quantification of Osoforms from RNA-Seq Reads! 
・Measurement of mRNA abundance using RNA-seq data: RPKM measure is inconsistent among samples 
! 
# EMアルゴリズム! 
・潜在変数モデルと学習法に関して! 
・不完全データの統計解析! 
・RでEMアルゴリズムによる混合ガウスモデル最尤推定! 
・パターン認識と機械学習 第9章 「混合モデルとEM」! 
・EM algorithm@Slideshare
参考 
# フラグメント割当て問題! 
・What’s the FPKM?! 
・「RNA-Seqの数理 - 生成モデルによる発現量推定」シリーズ! 
・(Rで)塩基配列解析! 
・トランスクリプトームデータ解析戦略2014! 
・CSHL Keynote; Dr. Lior Pachter, UC Berkeley (youtube)! 
・Gene and transcript discovery and expression analysis with RNA-Seq! 
・eXpress: Streaming read deconvolution and abundance estimation applied to RNA-Seq! 
! 
# Bloom filter! 
・ブルームフィルタ(Wikipedia)! 
・Bloom filterの説明! 
! 
# Rolling Hash! 
・ラビン-カープ文字列検索アルゴリズム

More Related Content

PDF
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
PDF
Deep learningの発展と化学反応への応用 - 日本化学会第101春季大会(2021)
PDF
職務経歴書の書き方 ~Case M~
PPT
Primerdesign
PPTX
テストは料理だ!テストのレシピを見てみよう #wacate
PDF
TensorRT Inference Serverではじめる、 高性能な推論サーバ構築
PDF
Word2vecの並列実行時の学習速度の改善
PDF
スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
Deep learningの発展と化学反応への応用 - 日本化学会第101春季大会(2021)
職務経歴書の書き方 ~Case M~
Primerdesign
テストは料理だ!テストのレシピを見てみよう #wacate
TensorRT Inference Serverではじめる、 高性能な推論サーバ構築
Word2vecの並列実行時の学習速度の改善
スタートアップが提案する2030年の材料開発 - 2022/11/11 QPARC講演

What's hot (20)

PDF
IIBMP2016 深層生成モデルによる表現学習
PDF
PFP:材料探索のための汎用Neural Network Potential - 2021/10/4 QCMSR + DLAP共催
PDF
機械学習で泣かないためのコード設計 2018
PDF
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
PDF
コンテナ環境でJavaイメージを小さくする方法!
PPTX
Single-cell pseudo-temporal ordering 近年の技術動向
PPTX
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
PDF
はじめての Elastic Beanstalk
PDF
20171128分散深層学習とChainerMNについて
PPTX
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
PDF
パターン認識と機械学習 §8.3.4 有向グラフとの関係
PDF
そのRails Engine、 本当に必要ですか?
PDF
数式を(ちょっとしか)使わずに隠れマルコフモデル
PPTX
[DL輪読会]Graph R-CNN for Scene Graph Generation
PDF
アプリケーションの性能最適化2(CPU単体性能最適化)
PPTX
【DL輪読会】Hyena Hierarchy: Towards Larger Convolutional Language Models
PPTX
情報検索とゼロショット学習
PDF
ARM CPUにおけるSIMDを用いた高速計算入門
PPTX
東京大学2020年度深層学習(Deep learning基礎講座) 第9回「深層学習と自然言語処理」
PDF
『自由エネルギー原理入門』勉強会1章&2章前半
IIBMP2016 深層生成モデルによる表現学習
PFP:材料探索のための汎用Neural Network Potential - 2021/10/4 QCMSR + DLAP共催
機械学習で泣かないためのコード設計 2018
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
コンテナ環境でJavaイメージを小さくする方法!
Single-cell pseudo-temporal ordering 近年の技術動向
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
はじめての Elastic Beanstalk
20171128分散深層学習とChainerMNについて
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
パターン認識と機械学習 §8.3.4 有向グラフとの関係
そのRails Engine、 本当に必要ですか?
数式を(ちょっとしか)使わずに隠れマルコフモデル
[DL輪読会]Graph R-CNN for Scene Graph Generation
アプリケーションの性能最適化2(CPU単体性能最適化)
【DL輪読会】Hyena Hierarchy: Towards Larger Convolutional Language Models
情報検索とゼロショット学習
ARM CPUにおけるSIMDを用いた高速計算入門
東京大学2020年度深層学習(Deep learning基礎講座) 第9回「深層学習と自然言語処理」
『自由エネルギー原理入門』勉強会1章&2章前半
Ad

Similar to RNASkim (20)

PPTX
2019年度 第2回バイオインフォマティクス実習
PDF
RNAseqによる変動遺伝子抽出の統計: A Review
PPTX
2014年度 第5回バイオインフォマティクス実習
PDF
フリーソフトではじめるがん体細胞変異解析入門 第33回勉強会資料
PDF
CBI学会2013チュートリアル NGSデータ解析入門 (解析編)配布資料
PDF
フリーソフトではじめるChIP-seq解析_第40回勉強会資料
PDF
NGS現場の会第2回_アメリエフ株式会社_がんExome解析
PPT
Kashiwa.R#9 Rでゲノム解析
PDF
Normalization of microarray
PDF
Exome解析入門
PDF
20160324自由集会講演
PDF
0.1 pg の mRNA をシーケンスする高精度なRNA-Seq法: Quartz-Seq
PDF
NGS現場の会第2回_アメリエフ株式会社_RNAseq解析
PDF
Analysis of differential splicing suggests different modes of short-term spli...
PDF
ISMB/ECCB2015読み会イントロ+Misassembly detection using paired-end sequence reads an...
PDF
生命化学情報学2
PDF
SNPデータ解析入門
PPTX
R seminar on igraph
PDF
CBI学会2013チュートリアル NGSデータ解析入門(実験条件編) 配布資料
PDF
Statistics_R
2019年度 第2回バイオインフォマティクス実習
RNAseqによる変動遺伝子抽出の統計: A Review
2014年度 第5回バイオインフォマティクス実習
フリーソフトではじめるがん体細胞変異解析入門 第33回勉強会資料
CBI学会2013チュートリアル NGSデータ解析入門 (解析編)配布資料
フリーソフトではじめるChIP-seq解析_第40回勉強会資料
NGS現場の会第2回_アメリエフ株式会社_がんExome解析
Kashiwa.R#9 Rでゲノム解析
Normalization of microarray
Exome解析入門
20160324自由集会講演
0.1 pg の mRNA をシーケンスする高精度なRNA-Seq法: Quartz-Seq
NGS現場の会第2回_アメリエフ株式会社_RNAseq解析
Analysis of differential splicing suggests different modes of short-term spli...
ISMB/ECCB2015読み会イントロ+Misassembly detection using paired-end sequence reads an...
生命化学情報学2
SNPデータ解析入門
R seminar on igraph
CBI学会2013チュートリアル NGSデータ解析入門(実験条件編) 配布資料
Statistics_R
Ad

More from 弘毅 露崎 (20)

PDF
大規模テンソルデータに適用可能なeinsumの開発
PDF
バイオインフォ分野におけるtidyなデータ解析の最新動向
PDF
Benchmarking principal component analysis for large-scale single-cell RNA-seq...
PDF
R-4.0の解説
PDF
scTGIFの鬼QC機能の追加
PDF
20191204 mbsj2019
PDF
1細胞オミックスのための新GSEA手法
PDF
Predicting drug-induced transcriptome responses of a wide range of human cell...
PDF
LRBase × scTensorで細胞間コミュニケーションの検出
PDF
非負値テンソル分解を用いた細胞間コミュニケーション検出
PDF
Exploring the phenotypic consequences of tissue specific gene expression vari...
PDF
データベースとデータ解析の融合
PDF
ビール砲の放ち方
PDF
Identification of associations between genotypes and longitudinal phenotypes ...
PDF
A novel method for discovering local spatial clusters of genomic regions with...
PDF
Rによる統計解析と可視化
PDF
文献注釈情報MeSHを利用した網羅的な遺伝子の機能アノテーションパッケージ
PDF
PCAの最終形態GPLVMの解説
PDF
カーネル法を利用した異常波形検知
PDF
ISMB読み会 2nd graph kernel
大規模テンソルデータに適用可能なeinsumの開発
バイオインフォ分野におけるtidyなデータ解析の最新動向
Benchmarking principal component analysis for large-scale single-cell RNA-seq...
R-4.0の解説
scTGIFの鬼QC機能の追加
20191204 mbsj2019
1細胞オミックスのための新GSEA手法
Predicting drug-induced transcriptome responses of a wide range of human cell...
LRBase × scTensorで細胞間コミュニケーションの検出
非負値テンソル分解を用いた細胞間コミュニケーション検出
Exploring the phenotypic consequences of tissue specific gene expression vari...
データベースとデータ解析の融合
ビール砲の放ち方
Identification of associations between genotypes and longitudinal phenotypes ...
A novel method for discovering local spatial clusters of genomic regions with...
Rによる統計解析と可視化
文献注釈情報MeSHを利用した網羅的な遺伝子の機能アノテーションパッケージ
PCAの最終形態GPLVMの解説
カーネル法を利用した異常波形検知
ISMB読み会 2nd graph kernel

RNASkim

  • 1. RNA-Skim: a rapid method for RNA-Seq quantification at transcript level ISMB2014読み会@CBRC! ! 露崎弘毅! 東京理科大学 薬学研究科 生命情報科学研究室! 理化学研究所 バイオインフォマティクス研究開発ユニット
  • 3. RNA-seqで発現量を示すための指標 Count Relative abundance [式変形の中でよく出てくる] 配列に何個リードが張り付いたか! 例 6 全リードのうち、何割張り付いたか! 例 6 × 1 / 107 = 6 × 10-7 × 全リード数 1 ρ = RPK/CPK (Reads/Counts per kilobase of exon) [Mortazavi, et al., 2008] 100万リードのうち、何リード張り付いたか! 例 0.6 106 RPM/CPM (Reads/Counts per million mapped reads) [Mortazavi, et al., 2008] 配列の1000bp当たり、何リード張り付いたか! 例 6 × 103 / 2000 = 3 × 全リード数 × 103 配列長 カウント カウント カウント カウント
  • 4. RNA-seqで発現量を示すための指標 RPKM (Reads per kilobase of exon per million mapped reads) [Mortazavi, et al., 2008, Marioni, et al., 2008] × 106 全リード数 カウント FPKM (Fragments per kilobase of exon per million mapped reads) [Trapnell, et al., 2010] RPK + RPM! 例 0.6 × 103 / 2000 = 0.3 Paired-endに対応すべく、リードでは無くリードのペア (しいてはその元となるフラグメント)毎に考える! 例 0.6 / 500 = 1.2 × 10-3 × 103 配列長 106 全フラグメント数 × 103 フラグメント長の期待値 × フラグメント! (長さが一定ではない) flagment length カウント
  • 5. RNA-seqで発現量を示すための指標 TPM (Transcripts per million) [Li, et al., 2010, Patro, et al., 2014] 106 × カウント マッピングされたリードは、全transcriptomeが106個ある場合、何transcript相当か! (リードのcoverageや、全transcriptの長さが一定であると暗に仮定)! 例 6 × 10-7 × 106 = 0.6 ソフトウェアによって何を計算するか違う! RNA-SkimはRPKMとTPMに対応している! 本当は配列長で割るところは正確には”有効配列長”というものを使う! (詳しくは、@yag_aysさんのブログなど) 配列長 × 1 カウント 配列長 Σ all transcripts
  • 7. フラグメント割当て問題 gene Isoform Read 現象 12 × 2 = 24 reads 6 × 3 = 18 reads 6 × 4 = 24 reads データ解析 exon1 exon2 exon3 exon4 欲しいのはこういった相対値 exon1exon2exon3exon4 exon1exon2 exon1exon3 FASTQ どのIsoform由来かわからない 同じエクソンを共有しているところ で、重複が出る exon1 exon2 exon3 exon4 exon1 exon2 exon1 exon3 マッピング 2 (0.22) 3 (0.33) 4 (0.44) exon1 exon2 exon3 exon4 exon1 exon2 exon1 exon3 マルチマップ実はこうなってる exon1 exon2 exon3 exon4 exon1 exon2 exon1 exon3 ○!※□◇#△!? 66 reads 42 reads 45 reads
  • 8. HTSeq, DNAnexusの場合 exon1 exon2 exon3 exon4 そのまま使う (早いが不正確) exon1 exon2 exon1 exon3 66 reads 42 reads 45 reads
  • 9. NEUMAの場合 6 + α reads α’ reads α’’ reads exon1 exon2 exon3 exon4 他のIsoformと共有している配列は低く見積もり、ユニークな配列だけ見る! (情報のロスが激しい) exon1 exon2 exon1 exon3
  • 10. rQuant, IsoInferの場合 Isoformのcoverage exon1 exon2 exon3 exon4 exon1 exon2 exon1 exon3 Geneのcoverage exon1 exon2 exon3 exon4 どのIsoformも、極力 Geneのcoverageに似 るように カバレッジの期待値と観測値の誤差を最小化! (rQuantはリード毎にどのIsoformに割り当て、IsoInferはexon-intronの区間毎に割り当て)! ハードに割当て、最適解である保証は無い、個々のフラグメントの情報は失われる
  • 11. Cufflinks (default) exon1 exon2 exon3 exon4 重複した場合は平等に割る exon1 exon2 exon1 exon3 1 / 3にする 1 / 2にする
  • 12. Cufflinks (-u), RSEM, TIGAR, IsoEM, eXpress…の場合 exon1 exon2 exon3 exon4 2. Relative abundance! ρ = (ρ1, ρ2, ρ3)! を求める(E-Step) EMアルゴリズムを利用してリードを各Isoformに振り分ける! (現在の主流?、一番正確だと言われる) exon1 exon2 exon1 exon3 確率的に! 最も尤もらしい exon1 exon2 exon3 exon4 exon1 exon2 exon1 exon3 3. ρからαを再計算! (M-Step、暗に一様分 布を仮定) 1. このリードがここに張り付く確率! α = (α1, α2, α3)! を設定 ρ1 ρ2 ρ3
  • 13. Sailfishの場合 (k-mer counting) exon1 exon2 exon3 exon4 リードのk-mer k-merのカウントを振り分け! (EMアルゴリズム) あらかじめk-merの場所を把握しておく & 高速、省メモリな ハッシュの利用で高速化を図る exon1 exon2 exon1 exon3 Index 20-mer程度で短く見ていく exon1 exon2 exon3 exon4 exon1 exon2 exon1 exon3 Minimum perfect hash function! Lock-Free memory-efficient hash table
  • 14. RNA-Skimの場合 (sig-mer counting) このクラスターにのみ存在するk-mer (sig-mer) exon1 exon2 exon3 exon4 exon1 exon2 exon1 exon3 Index リードのsig-mer sig-merのカウントを振り分け! (EMアルゴリズム) あらかじめ似ている配列をクラスタリングしておき、そのクラスターにだけ存在す るk-mer(sig-mer)に限定し、さらに見るところをまばらにする事で高速化を図る! (全k-merのうち、3.5%程度しか使わない) other sequence クラスター exon1 exon2 exon3 exon4 exon1 exon2 exon1 exon3 other sequence at least 50bp
  • 15. 離れた二カ所のdepth 0.985 x x + 20 fragment! depth transcriptome上のある箇所でのfragment depthちょっとずれたところで! みても大体同じ! -> 「全k-mer見ないで、所々かいつまんで見ても問題無い」という著者らの主張
  • 17. 全体の流れ reference transcriptome に対する操作 RNA-seqデータ に対する操作
  • 18. Preparation Stage (Transcriptome Partitioning) 例1 : k-mer-Similarity(t1, t2)、5-merの場合! k-mer (t1) = (AAAGG, AAGGG, …, CTCTC)! k-mer (t2) = (AAAGG, AAGGG, …, GGGTT)! |k-mer (t1)| = 11! |k-mer (t2)| = 11! k-mer (t1) ∩ k-mer(t2) = (AAAGG, …, GAAAA)! | k-mer (t1) ∩ k-mer(t2)| = 6! より、! max(11/6, 11/6) = 1.83! ! 例2 : k-mer-Similarity(A, B)、5-merの場合! k-mer (A) = (AAAGG, AAGGG, …, CTATC)! k-mer (B) = (ATTTC, TTTCA, …, CTCTC)! |k-mer (A)| = 19! |k-mer (B)| = 12! k-mer (A) ∩ k-mer(B) = (CTCTC)! | k-mer (A) ∩ k-mer(B)| = 1! より、! max(1/19, 1/12) = 0.08 A B k-mer()とはここでは与えられた配列のk-merを返す関数とする (φは1配列でも、複数の配列でも良い)! しきい値(γ)よりも大きい類似度同士は同じクラスターとする(論文では0.2を利用)
  • 19. Preparation Stage (sig-mer discovery) A B このクラスター内にだけに存在するk-merをsig-merとする(下線のやつ)
  • 20. Bloom Filter 「たまに間違った値を返す時(偽陽性)があるけど、その分高速なハッシュ」みたいなもの! データを削除できない、値自体は取り出せないといった特徴がある クラスター毎に、このk-merが他のクラスター には無いかどうか判定するのに使っている (有る無し判定だけできれば良い)
  • 21. Preparation Stage (Sig-mers selection) 全てのsig-merは使わない! 少なくとも50bpは離れるようにsig-merを選択
  • 22. Quantification Stage (Filtering by rolling hash) Rabin-Karp String Search Algorithmで利用されるハッシュ関数! 大量のテキストデータに、複数のキーワード検索をかける時とかに使うらしい
  • 23. Quantification Stage (Counting, Quantification) sig-merは他のクラスターには無い(定義から)! EMアルゴリズムは各クラスター毎に完全に独立して計算できる! => 並列化が容易
  • 25. クラスタリングについて Transcriptレベルで分割(全て異なるクラスターとする) Geneレベルで分割(同じgeneのtranscriptは同じクラスターとする) k-mer-similarityをベースに分割 分割しない このsig-mer coverageが何を指しているのか不明! (文脈的に「sig-merを一つでも持っている配列の割合」?)! x軸をtranscript / clusterとして、! ランダムにxだけtranscript / clusterを選択して、sig-merが実際に 他のtranscript / clusterに存在しないか確かめた、とかだろうか… 「Transcriptレベルは、同じexonを共有しているisoformが存在する から、sig-merを見つける事が難しい」という事を言いたいらしい
  • 26. 検証1 (人口データ) Ensembl! Mouse reference sequence (GRCm38 build70) 100サンプル! (リード数が2×107 ~ 1×108) Sailfish論文でも利用されていた 人口SAMファイル作成プログラム
  • 27. 検証1 (人口データ) RSEM, Sailfish, eXpress, Cufflinksと比較した! RNA-Skimはsig-merの長さを20 - 95bpに変えてみた (a), (b) : 相関係数 (0.01より大きなRPKMの対数値)! - Truthと書いてあるのはFlux Simulatorがそういうデータを作るらしい! - どの手法も大して変わらない! - sig-merは長すぎても良くない(あてがわれるリードの数が減る) (c) : significant false positive rate! (RPKMの推定値が0.1より大きいのに、true RPKMが0.01より小さい transcriptの割合)! (d) : significant false negative rate! (RPKMの推定値が0.01よりも小さいのに、true RPKMは0.1より大きい transcriptの割合)! - sig-merは長過ぎても良くない(理由は上と同じ) 経験的に60-merくらいが良いとの事
  • 28. 検証1 (人口データ) sig-merの数を変えてみた (a), (b) : 相関係数! - sig-merが多いほど良い (c) : significant false positive rate! - ほとんど変化無し (d) : significant false negative rate! - sig-merが多いほど良い sig-merは沢山使うほどよい! (論文では2.58だった)
  • 29. 検証1 (人口データ) sig-mer-similarityのしきい値(γ)を変えてみた! -> それほど変化無し True RPKMとRPKMの推定値は、綺麗に線形回帰する
  • 30. 検証2 (リアルデータも利用) 18の近交系のマウスと! 58のF1マウス! (CAST/EiJ, PWK/PhJ, WSB/EiJの3パターンのかけ合わせ)! のデータを使った(脳からサンプリング) RNA-Skimと他4手法で比較した 相関係数は、real data / simulationデータでさほど 変わらない! ! 実際のデータの方がばらつきやすい
  • 32. 展望 ❖ より省メモリなデータ構造! ❖ より良いsig-mer selection (一様 -> 情報がある箇所だけ! ❖ バイアスを考慮! ❖ マルチスレッドに対応
  • 34. インストール (1/3) # GCC-4.8のインストール! # 自分のホームディレクトリにだけ、新しいGCCを入れたい場合! mkdir /PATH/TO/YOUR/HOME/GCC! mkdir /PATH/TO/YOUR/HOME/GCC/lib! cd /PATH/TO/YOUR/HOME/GCC! wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.3/gcc-4.8.3.tar.gz! tar zxvf gcc-4.8.3.tar.gz! cd gcc-4.8.3! ./contrib/download_prerequisites! ./configure --disable-multilib --prefix= /PATH/TO/YOUR/HOME/GCC ! --libdir= /PATH/TO/YOUR/HOME/GCC/lib! make! make install! ! # マシンのデフォルトgcc/g++を確認! gcc --version! g++ —version! ! # PATH/TO/YOUR/HOME/GCCにあるgcc/g++を確認! /PATH/TO/YOUR/HOME/GCC/bin/gcc --version! /PATH/TO/YOUR/HOME/GCC/bin/g++ --version
  • 35. インストール (2/3) # RNA-Skimのインストール! wget https://github.com/zzj/RNASkim/archive/master.zip! unzip master.zip! cd RNASkim-master! export CXX=/PATH/TO/YOUR/HOME/GCC/bin/g++! ! ./prepare.sh! cd src! make all! make all # なぜか二回やらないとコンパイルされない
  • 36. インストール (3/3) ##### refMrnaを以下のような形式に変換! ##### (Ensemblの場合はソースコード有り、RefSeqの場合は自力で)! ##### > 遺伝子名|アイソフォーム名1|アイソフォーム名2! ##### 配列1|配列2! ! cat Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf |! awk '{print $10,$16}' | sed 's/"//g' | sed 's/;//g' | sort | uniq > list_mm10.txt! ! # 自力の場合! R CMD BATCH RNASkim_Merge.R! !
  • 37. RNASkim_Merge.Rの中身 library("Biostrings")! ! # Gene|Iso! Gene_Iso <- read.table("list_mm10.txt", header=F)! colnames(Gene_Iso) <- c("Gene", "Iso")! ! # Iso|Seq! Iso_Seq <- readDNAStringSet("mm10.fa")! # Iso! Iso <- names(Iso_Seq)! # Seq! Seq <- as.vector(as.character(Iso_Seq))! ! # Iso|Gene|Seq! TMP <- data.frame(Iso=Iso, Seq=Seq)! ! # Gene|Iso1|Iso2|Seq1|Seq2! out <- merge(Gene_Iso, TMP, by="Iso")! ! # >Gene|Iso1|Iso2! # Seq1|Seq2! Gene <- unique(as.character(Gene_Iso[,1]))! sink(file="mm10_merged.fa")! for(i in 1:length(Gene)){! ! locus <- which(out[,2] == Gene[i])! ! if(length(locus) != 0){! ! ! cat(paste(paste(">", Gene[i], sep=""), paste(out[locus, 1], collapse="|"), sep="|"))! ! ! cat("n")! ! ! cat(paste0(out[locus,3], collapse="|"))! ! ! cat("n")! ! }! }! sink()!
  • 38. コマンド export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/PATH/TO/YOUR/HOME/GCC/lib64! Soft="/PATH/TO/YOUR/HOME/RNASkim-master/src"! ! # reference transcriptomeに対する操作 (3コマンド)! GLOG_logtostderr=1 $Soft/rs_cluster -gene_fasta=mm10_merged.fa ! -num_threads=4 -output=mm10_clustered.fa -rs_length=60! GLOG_logtostderr=1 $Soft/rs_index -gene_fasta=mm10_clustered.fa ! -index_file=mm10_clustered_gene.fa.pb -rs_length=60 -num_threads 4! GLOG_logtostderr=1 $Soft/rs_select -index_file=mm10_clustered_gene.fa.pb ! -selected_keys_file=mm10_clustered_gene.fa.sk! ! # fastqに対する操作 (2コマンド) GLOG_logtostderr=1 $Soft/rs_count -selected_keys_file=mm10_clustered_gene.fa.sk ! -count_file=XXXXX_clustered_gene.fa.cf -read_files1=XXXXX_1.trim.fastq ! -read_files2=XXXXX_2.trim.fastq -num_threads=4! ! $Soft/rs_estimate -count_file=XXXXX_clustered_gene.fa.cf > FPKM_TABLE.txt
  • 39. そもそも扱えるreference transcriptomeが少ない? Software reference hg19 (RefSeq, Human) mm10 (RefSeq, Mouse) cufflinks genome 43497 genes 30608 genes RSEM transcriptome 47246 transcripts 32987 transcripts TIGAR transcriptome 47246 transcripts 32987 transcripts eXpress transcriptome 47246 transcripts 32987 transcripts Sailfish transcriptome 47246 transcripts 32987 transcripts RNA-Skim transcriptome 33727 transcripts 26568 transcripts Warningメッセージを見る限り、referenceのうちIUPAC表記 (R, W, Y, Nとか)が含まれているものは扱えないから?
  • 41. 参考 # 発現量の指標! ・Transcript assembly and quantification by RNA-Seq reveals unannotated transcripts and isoform switching during cell differentiaion! ・RSEM: accurate transcript quantification from RNA-Seq data with or without a reference genome! ・RNA-Seq gene expression estimation with read mapping uncertainty! ・Sailfish: Rapid Alignment-free Quantification of Osoforms from RNA-Seq Reads! ・Measurement of mRNA abundance using RNA-seq data: RPKM measure is inconsistent among samples ! # EMアルゴリズム! ・潜在変数モデルと学習法に関して! ・不完全データの統計解析! ・RでEMアルゴリズムによる混合ガウスモデル最尤推定! ・パターン認識と機械学習 第9章 「混合モデルとEM」! ・EM algorithm@Slideshare
  • 42. 参考 # フラグメント割当て問題! ・What’s the FPKM?! ・「RNA-Seqの数理 - 生成モデルによる発現量推定」シリーズ! ・(Rで)塩基配列解析! ・トランスクリプトームデータ解析戦略2014! ・CSHL Keynote; Dr. Lior Pachter, UC Berkeley (youtube)! ・Gene and transcript discovery and expression analysis with RNA-Seq! ・eXpress: Streaming read deconvolution and abundance estimation applied to RNA-Seq! ! # Bloom filter! ・ブルームフィルタ(Wikipedia)! ・Bloom filterの説明! ! # Rolling Hash! ・ラビン-カープ文字列検索アルゴリズム