Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
確率分布
確率モデルを記述する上で有用な概念
確率変数Xが取り得る各々の値に対して、その起こりやすさを関数Pとして記述する– サイコロの目をXとすれば1が出る確率は、P(X=1) =
1/6、より一般的にはP(X) = 1/6– コインをトスしたときに出る面をXとすれば、表が出る確率P(X=head) = ½
– Etc.
確率分布のパラメータ (1)
確率分布の大まかな形(性質?)は決まっているが、一意な形が定
まっていない場合がある
形を一意に定める部分を定数とする式が作られる
P(向き=上) = pP(向き=下) = 1 – p
パラメータ
確率分布のパラメータ (2)
確率変数が1つのときは、 P(X=i) = piで多くの
確率分布を表現できる– サイコロの例では、 p1=1/6, p2=1/6, p3=1/6, p4=1/6,
p5=1/6, p6=1/6となる
– ゆがんだサイコロでは?
パラメータが未知の場合はパラメータの推定が必要
確率モデルの構築
モデルの構築– P(向き=上) = p– P(向き=下) = 1 – p
パラメータの推定– 何度も画鋲を投げて、向きが上、
下になる割合を観測する
– 例えば1000回投げた結果、600回上向きになったとすれば、推定値は とするの
が妥当?
例:画鋲が出る向き
6.0)(ˆ ==上向きP
毎日の天気を試行とすると…
天気の移り変わりが穏やかな季節なら…n日目の天気をXnとして、
同じ天気は続きやすい?
曇りの後は雨になりやすい?
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12
以前の試行結果が次の試行結果に影響する
一般的に雨の確率が20%だとしても、前の日が曇りならその確率は40%になる?
式で表すなら、
– P(Xn = Rainy) = 0.2– P(Xn = Rainy | Xn-1 = Cloudy) = 0.4前の試行結果X1,X2,…Xn-1に依存して次の試行結果の確率P(Xn|X1,X2,…Xn-1) が決まる確率モデルをマルコフモデルと呼ぶ
1つ前の試行結果Xn-1のみに依存して次の試行結果の確率P(Xn|Xn-1)が決まるモデルを一次のマルコフモデルと呼ぶ
一次のマルコフモデルの表現方法
0.4
0.2
0.4
0.4
0.40.5
0.10.2
0.4
状態遷移図
0.4 0.4 0.20.2 0.4 0.40.1 0.5 0.4
行列
Xn-1
Xn
条件付確率 (S:Sunny, C:Cloudy, R:Rainy)
P(Xn=S|Xn-1=S)=0.4,P(Xn=S|Xn-1=C)=0.4, P(Xn=S|Xn-1=C)=0.2 P(Xn=C|Xn-1=C)=0.4,P(Xn=C|Xn-1=S)=0.2, P(Xn=C|Xn-1=R)=0.4P(Xn=R|Xn-1=R)=0.4,P(Xn=R|Xn-1=C)=0.5, P(Xn=R|Xn-1=S)=0.1
どんな法則で塩基配列の出現パターンが決まるのか?
ggagctgcagcccgaccgcggggaggacgccatcgccgcctgcttcctcatcaactgcctctacgagcagaacttcgtgtgcaagttcgcgcccagggagggcttcatcaactacctcacgagggaagtgtaccgctcctaccgccagctgcggacccagggctttggagggtctgggatccccaaggcctgggcaggcatagacttgaaggtacaaccccaggaacccctggtgctgaaggatgtggaaaacacagattggcgcctactgcggggtgacacggatgtcagggtagagaggaaagacccaaaccaggtggaactgtggggactcaaggaaggcacctacctgttccagctgacagtgactagctcagaccacccagaggacacggccaacgtcacagtcactgtgctgtccaccaagcagacagaagactactgcctcgcatccaacaaggtgggtcgctgccggggctctttcccacgctggtactatgaccccacggagcagatctgcaagagtttcgtttatggaggctgcttgggcaacaagaacaactaccttcgggaagaagagtgcattctagcctgtcggggtgtgcaaggcccctccatggaaaggcgccatccagtgtgctctggcacctgtcagcccacccagttccgctgcagcaatggctgctgcatcgacagtttcctggagtgtgacgacacccccaactgccccgacgcctccgacgaggctgcctgtgaaaaatacacgagtggctttgacgagctccagcgcatccatttccccagtgacaaagggcactgcgtggacctgccagacacaggactctgcaaggagagcatcccgcgctggtactacaaccccttcagcgaacactgcgcccgctttacctatggtggttgttatggcaacaagaacaactttgaggaagagcagcagtgcctcgagtcttgtcgcggcatctccaagaaggatgtgtttggcctgaggcgggaaatccccat
ゲノム全体はA,C,G,Tが均等に出現するランダム配列か?
大腸菌Accession Number: NC_000913
Length of Sequence : 4639675A Content : 1142228 (24.62%)T Content : 1140970 (24.59%)G Content : 1176923 (25.37%)C Content : 1179554 (25.42%)
Others : 0 (0.00%)AT Content : 49.21%GC Content : 50.79%
マイコプラズマ菌 (M. genitalium)Accession Number: NC_000908
Length of Sequence : 580074A Content : 200543 (34.57%)T Content : 195695 (33.74%)G Content : 92312 (15.91%)C Content : 91524 (15.78%)
Others : 0 (0.00%)AT Content : 68.31%GC Content : 31.69%
Output of G-language GAE (Arakawa et al. 2003)
AUGAGGAGG
AUUCCUCC
16S rRNA
fMet-tRNAf
Methionine
Shine-Dalgarnosequence
開始コドンmRNA
リボソーム
16S rRNAの3‘末端はShine-Dalgarno配列と
対合する
ttacagagtacacaacatcc atg aaacgcatta [thr operon leader peptide:thrL]aaggtaacgaggtaacaacc atg cgagtgttga [aspartokinase I]atggaagttaggagtctgac atg gttaaagttt [homoserine kinase:thrB]cacgagtactggaaaactaa atg aaactctaca [threonine synthase:thrC]aatgataaaaggagtaacct gtg aaaaagatgc [hypothetical protein:b0005]atttcctgcaaggactggat atg ctgattctta [hypothetical protein:yaaA]gtttaaagagaaatactatc atg acggacaaat [transaldolase B:talB]
SD配列のパターンはA,Gが多いけど曖昧
タンパク質のモチーフ(Helix-loop-Helix)これもアミノ酸の偏りはあるけど曖昧…
1 50YNP2_CAEEL_6-57 AKR..NARER TRVHTVNQAF .LVLKQHLPS .LR....... ..........Q9W7E6_51-103 KREMVNAKER LRIRNLNTMF .SRLKRMLPL MQ........ ..........O55208_60-112 RRRVANAKER ERIKNLNRGF .AKLKALVPF LP........ ..........ASH3_MOUSE_94-145 IRK.RNERER QRVKCVNEGY .ARLRRHLPE .D........ ..........O76488_77-138 ARR..NARER NRVKQVNDGF .NALRRHLPA .SVVAALS.. ..........AST5_DROME_27-91 IRR..NARER NRVKQVNNGF .SQLRQHIPA .AVIADLSN. ..........AST4_DROME_102-163 QRR..NARER NRVKQVNNSF .ARLRQHIPQ .SIITDLT.. ..........
51 93YNP2_CAEEL_6-57 .......... .........Q FTKR.VSKLR ILNAAITYID TLLQ9W7E6_51-103 .......... .......... PDKK.PSKVD TLKAATEYIR LLLO55208_60-112 .......... .......... QSRK.PSKVD ILKGATEYIQ ILGASH3_MOUSE_94-145 .......... .......... YLEKRLSKVE TLRAAIKYIS YLQO76488_77-138 .......... ....GGARRG SGKK.LSKVD TLRMVVEYIR YLQAST5_DROME_27-91 .......... ..GRRGIGPG ANKK.LSKVS TLKMAVEYIR RLQAST4_DROME_102-163 .......... ....KGGGRG PHKK.ISKVD TLRIAVEYIR RLQ
配列パターンのゆらぎ
結局ゲノム配列のどこを見ても、A,C,G,Tが均等にランダムというところはあまりなさそうだ
シグナル配列もカッチリ決まっているわけではなく、ゆらぎがある
これら塩基配列の出現の法則を何とかエレガントに表せないか?
確率モデ
塩基配列の出現を表す確率モデルは?
モデルの構築:各塩基がそれぞれ一定確率で出現P(A) = P(C) = P(G) = P(T) = ¼種によって塩基の偏りがある
– 変異しやすい方向– tRNAの性質– 二次構造およびその回避– その他たくさんの理由
P(A) = P(T) = 0.34, P(C) = P(G) = 0.16ではどうか?(マイコプラズマ菌)
大腸菌Accession Number: NC_000913
Length of Sequence : 4639675A Content : 1142228 (24.62%)T Content : 1140970 (24.59%)G Content : 1176923 (25.37%)C Content : 1179554 (25.42%)
Others : 0 (0.00%)AT Content : 49.21%GC Content : 50.79%
マイコプラズマ菌 (M. genitalium)Accession Number: NC_000908
Length of Sequence : 580074A Content : 200543 (34.57%)T Content : 195695 (33.74%)G Content : 92312 (15.91%)C Content : 91524 (15.78%)
Others : 0 (0.00%)AT Content : 68.31%GC Content : 31.69%
Output of G-language GAE (Arakawa et al. 2003)
ある塩基の出現率は前の塩基に影響される
1番目の塩基 2番目の塩基 2番目の塩基の出現率
a 0.296
c 0.225
g 0.208 A
t 0.271
a 0.276
c 0.230
g 0.294 C
t 0.200
a 0.227
c 0.326
g 0.230 G
t 0.217
a 0.186
c 0.234
g 0.282 T
t 0.298
終止コドンがコード領域中にないから?
CpGがTpGに変異?(高等生物)前の塩基を考慮するような確率モデルが必要
大腸菌、G-language GAE(Arakawa et al. 2003)使用
単純なマルコフモデル
A
G
C
T
P(A|G) P(G|A)P(C|T) P(T|C)
P(C|A)
P(A|C)
P(T|G)
P(G|T)
P(A|A) P(C|C)
P(T|T)P(G|G)
P(C|G)
P(G|C)
P(A|T)
P(T|A)
b1 b2 P(b2|b1)
a 0.296
c 0.225
g 0.208 A
t 0.271
a 0.276
c 0.230
g 0.294 C
t 0.200
a 0.227
c 0.326
g 0.230 G
t 0.217
a 0.186
c 0.234
g 0.282 T
t 0.298
塩基配列の観測確率 (1)
∏−=
=+
−
→=
→××→×→×1
111
132211
)()(
)()()()(ij
jjj
ii
kktkP
kktkktkktkP L
P(k1)を初期状態がk1である確率、t(k→l)を状態kから状態lへの遷移確率として、経路k1,k2,k3,…,kiを通過す
る確率は
0.6
0.4
1.0
0.3
0.7
1.0A
G
T
C
A
塩基配列の観測確率 (2)
∏=
=−
−
=
××××ij
jjj
ii
xxPxP
xxPxxPxxPxP
211
123121
)|()(
)|()|()|()( L
状態とそこから出力される塩基の種類が1対1対応の場合、長さiの塩基配列x1,x2,x3,…,xiが観
測される確率は、
A
G
C
T
P(A|G) P(G|A)P(C|T) P(T|C)
P(C|A)
P(A|C)
P(T|G)
P(G|T)
P(A|A) P(C|C)
P(T|T)P(G|G)
P(C|G)
P(G|C)
P(A|T)
P(T|A)
隠れマルコフモデル
0.6
0.4
1.0
0.3
0.7
1.0A:0.3T:0.2C:0.4G:0.1 A:0.3
T:0.4C:0.2G:0.1
A:0.1T:0.2C:0.4G:0.3
A:0.3T:0.2C:0.1G:0.4
A:0.2T:0.2C:0.2G:0.4
隠れマルコフモデルは以下の2つで定義される
t(k→l) … 状態kから状態lへの遷移確率
el(b) … 状態lにおいて、記号bが出力される確率
上記モデルから長さiの塩基配列x1,x2,x3,…,xiが出力される
隠れマルコフモデルの構造の一例
endstart
挿入
欠損
A:0.7C:0.1G:0.1T:0.1
A:0.0C:0.7G:0.2T:0.1
A:0.0C:0.9G:0.1T:0.0
A:0.0C:0.1G:0.1T:0.8
与えられた配列の出力確率は?経路が分かっている場合
0.6
0.4
1.0
0.3
0.7
1.0A:0.3T:0.2C:0.4G:0.1 A:0.3
T:0.4C:0.2G:0.1
A:0.1T:0.2C:0.4G:0.3
A:0.3T:0.2C:0.1G:0.4
A:0.2T:0.2C:0.2G:0.4
P(“ATCC”)=0.3 x 0.4 x 0.4 x 0.7x 0.4 x 1.0 x 0.1
Viterbiのアルゴリズム
0
1
2 4
5
1.0
A:0.1C:0.3G:0.5T:0.1
A:0.7C:0.1G:0.1T:0.1
3
0.8
0.2
0.5
0.5
0.7
0.3
1.0
A:0.4C:0.1G:0.3T:0.2
A:0.1C:0.1G:0.1T:0.7
A:0.2C:0.2G:0.3T:0.3
“ATGA”が観測されたとき、
どの経路を通った可能性が最も高いか?
v(l, i)の定義
v(l, i) … 状態lにおいて、塩基配列x1,x2,..xiが観
測されているときの最大確率
0
1
2 4
5
1.0
A:0.1C:0.3G:0.5T:0.1
A:0.7T:0.1C:0.1G:0.13
0.8
0.2
0.5
0.5
0.7
0.3
1.0
A:0.4C:0.1G:0.3T:0.2
A:0.1C:0.1G:0.1T:0.7
A:0.2C:0.2G:0.3T:0.3
今、 atgaが観測されたとして、v(3,2)は状態3の時点でatが観測されている最大確率
l
kmax
t(kmax → l)
el(xi)
ekmax(xi-1)
状態lにつながる直前の状態k
v(l, i)
pmax = v(kmax, i-1)
k1
k2
k4
v(l,i)を与える直前の状態をkmax、そこまでの確率をpmaxとすると、
v(l,i)=pmax × t(kmax→l) ×el(xi)
各々のkに対して、t(k→l)は一定
“atga”はどの経路を通った?
0
1
2 4
5
1.0
A:0.1C:0.3G:0.5T:0.1
A:0.7T:0.1C:0.1G:0.1
3
0.8
0.2
0.5
0.5
0.7
0.3
1.0
A:0.4C:0.1G:0.3T:0.2
A:0.1C:0.1G:0.1T:0.7
A:0.2C:0.2G:0.3T:0.3
演習問題
0
1
2 4
5
1.0
A:0.1C:0.3G:0.5T:0.1
A:0.7T:0.1C:0.1G:0.1
3
0.8
0.2
0.5
0.5
0.7
0.3
1.0
A:0.4C:0.1G:0.3T:0.2
A:0.1C:0.1G:0.1T:0.7
A:0.2C:0.2G:0.3T:0.3
下記マルコフモデルで、“agga”が出力されるときの
最大確率およびその経路を求めよ。v(l,i), ptr(l,i)を記録すること。
実装(C言語)
0
1
2 4
5
1.0
A:0.1C:0.3G:0.5T:0.1
A:0.7C:0.1G:0.1T:0.1
3
0.8
0.2
0.5
0.5
0.7
0.3
1.0
A:0.4C:0.1G:0.3T:0.2
A:0.1C:0.1G:0.1T:0.7
A:0.2C:0.2G:0.3T:0.3
static double t[K][K] = { /* 0 1 2 3 4 5 */
0.0, 1.0, 0.0, 0.0, 0.0, 0.0 ], /* 0 */0.0, 0.0, 0.8, 0.2, 0.0, 0.0 ], /* 1 */0.0, 0.0, 0.5, 0.0, 0.5, 0.0 ], /* 2 */0.0, 0.0, 0.0, 0.0, 0.7, 0.3 ], /* 3 */0.0, 0.0, 0.0, 0.0, 0.0, 1.0 ], /* 4 */0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] /* 5 */
};
static double e[K][NUC_NUM] = { /* a c g t */[ 0.00, 0.00, 0.00, 0.00 ], /* 0 */[ 0.40, 0.10, 0.30, 0.20 ], /* 1 */[ 0.10, 0.10, 0.10, 0.70 ], /* 2 */[ 0.20, 0.20, 0.30, 0.30 ], /* 3 */[ 0.10, 0.30, 0.50, 0.10 ], /* 4 */[ 0.70, 0.10, 0.10, 0.10 ] /* 5 */
};
static char x[L];strcpy(x, "atga");
塩基配列
状態遷移確率 記号出力確率
static int type[K]= ( "TYPE_S", "TYPE_N",
"TYPE_N", "TYPE_N","TYPE_N", "TYPE_N" );
状態のタイプ
K: 状態の数、 L: 配列の長さ、 NUC_NUM: 塩基の種類数
double viterbi(int l, int i){
int k, k_max;double p, p_max;
switch(type[l]){case TYPE_S:if(i <= 0){ return 0.0; }else { return LOG0; }
case TYPE_N:if(i <= 0){ return LOG0; }
for(p_max = LOG0 - 1, k = 0;k < K;k ++){if(tr[k][l] > 0.0)p = viterbi(k, i - 1) + log(tr[k][l]);else p = LOG0;if(p > p_max){ p_max = p; k_max = k; }
}return p_max + log(e[l][ (int)cton(x[i - 1]) ]);
}}
Viterbi関数の実装例 (C言語)
実装(Perl)
0
1
2 4
5
1.0
A:0.1C:0.3G:0.5T:0.1
A:0.7C:0.1G:0.1T:0.1
3
0.8
0.2
0.5
0.5
0.7
0.3
1.0
A:0.4C:0.1G:0.3T:0.2
A:0.1C:0.1G:0.1T:0.7
A:0.2C:0.2G:0.3T:0.3
@t = ( # 0 1 2 3 4 5[ 0.0, 1.0, 0.0, 0.0, 0.0, 0.0 ], # 0[ 0.0, 0.0, 0.8, 0.2, 0.0, 0.0 ], # 1[ 0.0, 0.0, 0.5, 0.0, 0.5, 0.0 ], # 2[ 0.0, 0.0, 0.0, 0.0, 0.7, 0.3 ], # 3[ 0.0, 0.0, 0.0, 0.0, 0.0, 1.0 ], # 4[ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] # 5
);
@e = ( # a c g t[ 0.00, 0.00, 0.00, 0.00 ], # 0[ 0.40, 0.10, 0.30, 0.20 ], # 1[ 0.10, 0.10, 0.10, 0.70 ], # 2[ 0.20, 0.20, 0.30, 0.30 ], # 3[ 0.10, 0.30, 0.50, 0.10 ], # 4[ 0.70, 0.10, 0.10, 0.10 ] # 5
);
@x = split("", "atga");
塩基配列
状態遷移確率 記号出力確率
@type = ( "TYPE_S", "TYPE_N", "TYPE_N", "TYPE_N","TYPE_N", "TYPE_N" );
状態のタイプ
sub viterbi($$){my($l, $i) = @_;my($k, $k_max);my($p, $p_max);
if($type[$l] eq "TYPE_S"){if($i <= 0){ return 0.0; }else { return $::LOG0; }
}elsif($type[$l] eq "TYPE_N"){if($i <= 0){ return $::LOG0; }for($p_max = $::LOG0 - 1, $k = 0;$k < $::K;$k ++){if($tr[$k]->[$l] > 0.0){ $p = viterbi($k, $i - 1) + log($tr[$k]->[$l]); }else { $p = $::LOG0; }if($p > $p_max){ $p_max = $p; $k_max = $k; }
}return $p_max + log($e[$l]->[ $cton{ $x[$i - 1] } ]);
}}
Viterbi関数の実装例 (Perl)