50
2009年度春学期バイオインフォマティクスアルゴリズム 隠れマルコフモデル (1) 慶應義塾大学 環境情報学部

2009年度春学期バイオインフォマティクスアルゴリ …bioinfo.sfc.keio.ac.jp/class/bioinfo-a/PPT/bioinfo-a09s...確率分布 z確率モデルを記述する上で有用な概念

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

2009年度春学期バイオインフォマティクスアルゴリズム

隠れマルコフモデル (1)

慶應義塾大学

環境情報学部

この世の現象の多くは偶然性に支配されている?

決定的でない現象の例:

コインを投げたときの裏表

サイコロの目

天気 (降水確率)野球の打者の安打? (打率)

偶然性にはどのような法則があるのか?

確率モデルとは?

サイコロが出る目の確率モデル:P(X) = 1/6

確率を取り入れた模型、抽象化

・ 部分的にはでたらめに見える

・ 全体的には秩序があり、それは確率のルールによって決まる

確率分布

確率モデルを記述する上で有用な概念

確率変数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-1回の試行で出た目をX1, X2, .. Xn-1として…P(Xn)は過去n-1回の試行に関係なく1/6?

6,2,5,1,…

毎日の天気を試行とすると…

天気の移り変わりが穏やかな季節なら…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)

特定の部分での塩基の出現パターンの法則は?

ゲノム全体

コード領域

非コード領域

シグナル配列部分

核酸配列、アミノ酸配列のシグナル

開始コドン、終止コドン

翻訳開始シグナル(SD, Kozak)

プロモータ配列

タンパクのモチーフ

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)使用

マルコフモデルとは?

状態+状態間の遷移確率

前の状態に依存して確率的に次の状態が決まる

ゲノム配列を例にとってみると…

マルコフモデル

0.6

0.4

1.0

0.7

0.31.0

AG

T

C

A

ACTAが観測される確率は…?

単純なマルコフモデル

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次のマルコフモデル

一次のマルコフモデル

n次のマルコフモデル

多くのゲノムの非コード領域は1次のマルコフモデルで近似されることが多い

隠れマルコフモデルとは?

状態とその間をつなぐ遷移確率がある

状態から出力される記号は確率的に決まる

隠れマルコフモデル

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

与えられた配列の出力確率は?経路が分かっていない場合

Forwardアルゴリズム

Backwardアルゴリズム

与えられた配列の通った経路はどうやって求める?

通った経路は確率的にしか決まらない

最大の確率を与えるような経路はViterbiのアルゴリ

ズムで求める

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)は一定

Viterbiのアルゴリズム

⎪⎩

⎪⎨

→−==≠=

=))()1,((max)(

0 and 0 if 10 and 0 if 0

),(lktikvbe

lili

ilv

kil

最大確率と直前のノードの記録

v(l,i)

各状態lとi番目について、(1)最大スコアv(l,i)と(2)方角ptr(l,i)を記録しておく

l

k1

k2 k3

“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

Viterbiのテーブルv(l,i)

状態l

配列のi番目

0 1 2 3 4

0 1

1 0.4

2 0.224

3 0.024

4 0.056

5 0.0392

Viterbiのテーブルptr(l, i)

配列のi番目

状態l

経路:5←4←2←1←0

0 1 2 3 4

0

1 0

2 1

3 1

4 2

5 4

演習問題

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)を記録すること。

演習問題 解答 v(l, i)

0 1 2 3 4

0 1 0

1 0.4 0

2 0 0.032

3 0.024 0

4 0.0084

5 0.0059

演習問題 解答 ptr(l, i)

0 1 2 3 4

0

1 0 0

2 0 1

3 1 0

4 3

5 4

実装(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)