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

What's hot

Pythonと型チェッカー
Pythonと型チェッカーPythonと型チェッカー
Pythonと型チェッカー
Tetsuya Morimoto
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safeKumazaki Hiroki
 
ELFの動的リンク
ELFの動的リンクELFの動的リンク
ELFの動的リンク
7shi
 
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書くRuby で高速なプログラムを書く
Ruby で高速なプログラムを書く
mametter
 
PHP の GC の話
PHP の GC の話PHP の GC の話
PHP の GC の話
y-uti
 
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
shinjiigarashi
 
脆弱性情報はこうしてやってくる
脆弱性情報はこうしてやってくる脆弱性情報はこうしてやってくる
脆弱性情報はこうしてやってくる
JPCERT Coordination Center
 
Efficient Lifelong Learning with A-GEM ( ICLR 2019 読み会 in 京都 20190602)
Efficient Lifelong Learning with A-GEM ( ICLR 2019 読み会 in 京都 20190602)Efficient Lifelong Learning with A-GEM ( ICLR 2019 読み会 in 京都 20190602)
Efficient Lifelong Learning with A-GEM ( ICLR 2019 読み会 in 京都 20190602)
YuMaruyama
 
大容量ファイルもGitで管理。 Git LFSの使い方
大容量ファイルもGitで管理。 Git LFSの使い方大容量ファイルもGitで管理。 Git LFSの使い方
大容量ファイルもGitで管理。 Git LFSの使い方
hibiki443
 
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptokatagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Crypto
trmr
 
Boost tour 1.60.0 merge
Boost tour 1.60.0 mergeBoost tour 1.60.0 merge
Boost tour 1.60.0 merge
Akira Takahashi
 
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングQEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミング
Yuma Ohgami
 
最速C# 7.x
最速C# 7.x最速C# 7.x
最速C# 7.x
Yamamoto Reki
 
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)
Akihiko Matuura
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由kikairoya
 
python-ptraceでプロセスメモリエディタっぽいことをしよう
python-ptraceでプロセスメモリエディタっぽいことをしようpython-ptraceでプロセスメモリエディタっぽいことをしよう
python-ptraceでプロセスメモリエディタっぽいことをしよう
monochrojazz
 
GoによるiOSアプリの開発
GoによるiOSアプリの開発GoによるiOSアプリの開発
GoによるiOSアプリの開発
Takuya Ueda
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
 
「Android案件できます」って言ったら、ヒドい目にあった話
「Android案件できます」って言ったら、ヒドい目にあった話「Android案件できます」って言ったら、ヒドい目にあった話
「Android案件できます」って言ったら、ヒドい目にあった話
Kenta Komori
 
Katagaitai CTF勉強会 #4 Crypto
Katagaitai CTF勉強会 #4 CryptoKatagaitai CTF勉強会 #4 Crypto
Katagaitai CTF勉強会 #4 Crypto
trmr
 

What's hot (20)

Pythonと型チェッカー
Pythonと型チェッカーPythonと型チェッカー
Pythonと型チェッカー
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
 
ELFの動的リンク
ELFの動的リンクELFの動的リンク
ELFの動的リンク
 
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書くRuby で高速なプログラムを書く
Ruby で高速なプログラムを書く
 
PHP の GC の話
PHP の GC の話PHP の GC の話
PHP の GC の話
 
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
 
脆弱性情報はこうしてやってくる
脆弱性情報はこうしてやってくる脆弱性情報はこうしてやってくる
脆弱性情報はこうしてやってくる
 
Efficient Lifelong Learning with A-GEM ( ICLR 2019 読み会 in 京都 20190602)
Efficient Lifelong Learning with A-GEM ( ICLR 2019 読み会 in 京都 20190602)Efficient Lifelong Learning with A-GEM ( ICLR 2019 読み会 in 京都 20190602)
Efficient Lifelong Learning with A-GEM ( ICLR 2019 読み会 in 京都 20190602)
 
大容量ファイルもGitで管理。 Git LFSの使い方
大容量ファイルもGitで管理。 Git LFSの使い方大容量ファイルもGitで管理。 Git LFSの使い方
大容量ファイルもGitで管理。 Git LFSの使い方
 
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptokatagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Crypto
 
Boost tour 1.60.0 merge
Boost tour 1.60.0 mergeBoost tour 1.60.0 merge
Boost tour 1.60.0 merge
 
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングQEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミング
 
最速C# 7.x
最速C# 7.x最速C# 7.x
最速C# 7.x
 
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
python-ptraceでプロセスメモリエディタっぽいことをしよう
python-ptraceでプロセスメモリエディタっぽいことをしようpython-ptraceでプロセスメモリエディタっぽいことをしよう
python-ptraceでプロセスメモリエディタっぽいことをしよう
 
GoによるiOSアプリの開発
GoによるiOSアプリの開発GoによるiOSアプリの開発
GoによるiOSアプリの開発
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
「Android案件できます」って言ったら、ヒドい目にあった話
「Android案件できます」って言ったら、ヒドい目にあった話「Android案件できます」って言ったら、ヒドい目にあった話
「Android案件できます」って言ったら、ヒドい目にあった話
 
Katagaitai CTF勉強会 #4 Crypto
Katagaitai CTF勉強会 #4 CryptoKatagaitai CTF勉強会 #4 Crypto
Katagaitai CTF勉強会 #4 Crypto
 

Similar to RNASkim

JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
Koichi Sakata
 
Kashiwa.R#9 Rでゲノム解析
Kashiwa.R#9 Rでゲノム解析Kashiwa.R#9 Rでゲノム解析
Kashiwa.R#9 Rでゲノム解析Haruka Ozaki
 
qPCR_primer_construction_ver_1.0
qPCR_primer_construction_ver_1.0qPCR_primer_construction_ver_1.0
qPCR_primer_construction_ver_1.0Satoshi Kume
 
Buffer overflow
Buffer overflowBuffer overflow
Buffer overflow
ionis111
 
0.1 pg の mRNA をシーケンスする高精度なRNA-Seq法: Quartz-Seq
0.1 pg の mRNA をシーケンスする高精度なRNA-Seq法: Quartz-Seq0.1 pg の mRNA をシーケンスする高精度なRNA-Seq法: Quartz-Seq
0.1 pg の mRNA をシーケンスする高精度なRNA-Seq法: Quartz-Seq
Itoshi Nikaido
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
do_aki
 
メタバーコーディングのフレームワークとアルゴリズム
メタバーコーディングのフレームワークとアルゴリズムメタバーコーディングのフレームワークとアルゴリズム
メタバーコーディングのフレームワークとアルゴリズム
astanabe
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
 
[DDBJing30] メタゲノム解析と微生物統合データベース
[DDBJing30] メタゲノム解析と微生物統合データベース[DDBJing30] メタゲノム解析と微生物統合データベース
[DDBJing30] メタゲノム解析と微生物統合データベース
DNA Data Bank of Japan center
 
Intel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86optiIntel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86opti
Takashi Hoshino
 
SNPデータ解析入門
SNPデータ解析入門SNPデータ解析入門
SNPデータ解析入門
Amelieff
 
ENCODE勉強会
ENCODE勉強会ENCODE勉強会
ENCODE勉強会
Itoshi Nikaido
 
Elixirだ 第2回
Elixirだ 第2回Elixirだ 第2回
Elixirだ 第2回
Joe_noh
 
ゆるいテキスト検索
ゆるいテキスト検索ゆるいテキスト検索
ゆるいテキスト検索
Toshi Harada
 
深層学習を用いた言語モデルによる俳句生成に関する研究
深層学習を用いた言語モデルによる俳句生成に関する研究深層学習を用いた言語モデルによる俳句生成に関する研究
深層学習を用いた言語モデルによる俳句生成に関する研究
harmonylab
 
日本語形態素解析
日本語形態素解析日本語形態素解析
日本語形態素解析
Yoshihiro Shimoji
 
Yamadai.Rデモンストレーションセッション
Yamadai.RデモンストレーションセッションYamadai.Rデモンストレーションセッション
Yamadai.Rデモンストレーションセッション
考司 小杉
 
集合知プログラミング5章前半
集合知プログラミング5章前半集合知プログラミング5章前半
集合知プログラミング5章前半Atsushi Hayakawa
 
フリーソフトではじめるNGS融合遺伝子解析入門
フリーソフトではじめるNGS融合遺伝子解析入門フリーソフトではじめるNGS融合遺伝子解析入門
フリーソフトではじめるNGS融合遺伝子解析入門
Amelieff
 

Similar to RNASkim (20)

JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
 
Kashiwa.R#9 Rでゲノム解析
Kashiwa.R#9 Rでゲノム解析Kashiwa.R#9 Rでゲノム解析
Kashiwa.R#9 Rでゲノム解析
 
qPCR_primer_construction_ver_1.0
qPCR_primer_construction_ver_1.0qPCR_primer_construction_ver_1.0
qPCR_primer_construction_ver_1.0
 
Buffer overflow
Buffer overflowBuffer overflow
Buffer overflow
 
0.1 pg の mRNA をシーケンスする高精度なRNA-Seq法: Quartz-Seq
0.1 pg の mRNA をシーケンスする高精度なRNA-Seq法: Quartz-Seq0.1 pg の mRNA をシーケンスする高精度なRNA-Seq法: Quartz-Seq
0.1 pg の mRNA をシーケンスする高精度なRNA-Seq法: Quartz-Seq
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
 
メタバーコーディングのフレームワークとアルゴリズム
メタバーコーディングのフレームワークとアルゴリズムメタバーコーディングのフレームワークとアルゴリズム
メタバーコーディングのフレームワークとアルゴリズム
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
[DDBJing30] メタゲノム解析と微生物統合データベース
[DDBJing30] メタゲノム解析と微生物統合データベース[DDBJing30] メタゲノム解析と微生物統合データベース
[DDBJing30] メタゲノム解析と微生物統合データベース
 
Intel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86optiIntel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86opti
 
SNPデータ解析入門
SNPデータ解析入門SNPデータ解析入門
SNPデータ解析入門
 
ENCODE勉強会
ENCODE勉強会ENCODE勉強会
ENCODE勉強会
 
Elixirだ 第2回
Elixirだ 第2回Elixirだ 第2回
Elixirだ 第2回
 
ゆるいテキスト検索
ゆるいテキスト検索ゆるいテキスト検索
ゆるいテキスト検索
 
深層学習を用いた言語モデルによる俳句生成に関する研究
深層学習を用いた言語モデルによる俳句生成に関する研究深層学習を用いた言語モデルによる俳句生成に関する研究
深層学習を用いた言語モデルによる俳句生成に関する研究
 
Statistics_R
Statistics_RStatistics_R
Statistics_R
 
日本語形態素解析
日本語形態素解析日本語形態素解析
日本語形態素解析
 
Yamadai.Rデモンストレーションセッション
Yamadai.RデモンストレーションセッションYamadai.Rデモンストレーションセッション
Yamadai.Rデモンストレーションセッション
 
集合知プログラミング5章前半
集合知プログラミング5章前半集合知プログラミング5章前半
集合知プログラミング5章前半
 
フリーソフトではじめるNGS融合遺伝子解析入門
フリーソフトではじめるNGS融合遺伝子解析入門フリーソフトではじめるNGS融合遺伝子解析入門
フリーソフトではじめるNGS融合遺伝子解析入門
 

More from 弘毅 露崎

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

More from 弘毅 露崎 (20)

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