3A
  • Portfolio Top
  • Categories
  • Tags
  • Archives

Pair HMM

※実装時のパラメータ¶

PairHMMによるアラインメントを実装していく。なお、(kerasy.Bio.alignment.PairHMM)に定義してあります。

In [1]:
from kerasy.Bio.alignment import PairHMM
In [2]:
# サンプル配列
seqX = "CCAGAGCTGTGGCAGACAGTGGCT"
seqY = "CCAGCTGTGCAGACACTGGCTT"
In [3]:
model = PairHMM()
In [4]:
! cat params.json
{
  "delta": "1/10",
  "epsilon": "1/5",
  "tau": "1/30",
  "px_e_y": "1/8",
  "px_ne_y": "1/24",
  "qx": "1/4",
  "qy": "1/4"
}
In [5]:
model.set_params(path="params.json")

Pair HMM とその利点

  • HMMのために開発されたアルゴリズムを使える。(らしい←正解ラベルの無いアラインメントでBaum-Welchアルゴリズムをどのように使うのかは現在考察中です。)
  • アラインメントの確率的な解釈が可能になる。

グローバルアラインメントを出力する Pair-HMM¶

  • Mは $x$ と $y$ がマッチした状態。($x_i$ と $y_j$ がアライン)
  • Xは $x$ に挿入が起きている状態。($x_i$ と $-$ がアライン)
  • Yは $x$ に欠失が起きている状態。($-$ と $y_j$ がアライン)

PairHMM

Pair HMMのためのViterbiアルゴリズム¶

2本数の配列 $x,y$ を与えると確率最大のアラインメントを求めるアルゴリズム。

Initialization:¶

$$ \begin{cases} V^M(0,0)=1, V^M(i,0)=V^M(0,j)=0\text{ for }i\neq0,j\neq0\\ V^X(0,0)=0, V^X(1,0)=\delta q_{x_1} V^X(i,0)=\varepsilon q_{x_i}V^X(i-1,0) \text{ for }i=2,\ldots,n\\ V^Y(0,0)=0, V^Y(0,1)=\delta q_{y_1} V^Y(0,j)=\varepsilon q_{y_j}V^Y(0,j-1) \text{ for }j=2,\ldots,m\\ \end{cases} $$

Recursion: $i=1,\ldots,n,\quad j=1,\ldots,m$¶

$$ \begin{aligned} V^M(i,j) &= p_{x_iy_j}\max\begin{cases}(1-2\delta-\tau)V^M(i-1,j-1)\\(1-\varepsilon-\tau)V^X(i-1,j-1)\\(1-\varepsilon-\tau)V^Y(i-1,j-1)\end{cases}\\ V^X(i,j) &= q_{x_i}\max\begin{cases}\delta V^M(i-1,j)\\\varepsilon V^X(i-1,j)\end{cases}\\ V^Y(i,j) &= q_{y_j}\max\begin{cases}\delta V^M(i,j-1)\\\varepsilon V^X(i,j-1)\end{cases}\\ \end{aligned} $$

Termination:¶

$$v_e = \tau\max\left(V^M(n,m),V^X(n,m),V^Y(n,m)\right)$$
In [6]:
P_optimal = model.align(seqX,seqY,return_score=True)
 Pair HMM (Viterbi) 
Alignment score: 3.551370651291424e-30

|parameter|       value        |
--------------------------------
|delta    |                 0.1|
|epsilon  |                 0.2|
|tau      | 0.03333333333333333|
|px_e_y   |               0.125|
|px_ne_y  |0.041666666666666664|
|qx       |                0.25|
|qy       |                0.25|
===============================================================
X: CCAGAGCTGTGGCAGACAGTGGC-T
Y: CC--AGCTGT-GCAGACACTGGCTT
===============================================================
In [7]:
print(f"π*={P_optimal}")
π*=3.551370651291424e-30

アラインメントの信頼性¶

配列 $x,y$ が与えられた時、アラインメント $\pi$ が得られる条件付き確率を考えることができ、それがアラインメントの信頼度を表していると考ることができる。

$$ P(\pi|x,y) = \frac{P(x,y,\pi)}{P(x,y)}\\ P(x,y) = \sum_{\text{alignments }\pi}P(x,y,\pi) $$

※ なお、ここで $P(x,y)$ は $x,y$ に関する全ての可能なアラインメントについて確率を足し合わせたものであり、Forwardアルゴリズムで計算することができる。

Pair HMMのためのForwardアルゴリズム¶

※ Viterbiの $\max$ を $\text{sum}$ に変更しただけ。

Initialization:¶

$$ \begin{cases} F^M(0,0)=1, F^M(i,0)=F^M(0,j)=0\text{ for }i\neq0,j\neq0\\ F^X(0,0)=0, F^X(1,0)=\delta q_{x_1} F^X(i,0)=\varepsilon q_{x_i}F^X(i-1,0) \text{ for }i=2,\ldots,n\\ F^Y(0,0)=0, F^Y(0,1)=\delta q_{y_1} F^Y(0,j)=\varepsilon q_{y_j}F^Y(0,j-1) \text{ for }j=2,\ldots,m\\ \end{cases} $$

Recursion: $i=1,\ldots,n,\quad j=1,\ldots,m$¶

$$ \begin{aligned} F^M(i,j) &= p_{x_iy_j}\text{sum}\begin{cases}(1-2\delta-\tau)F^M(i-1,j-1)\\(1-\varepsilon-\tau)F^X(i-1,j-1)\\(1-\varepsilon-\tau)F^Y(i-1,j-1)\end{cases}\\ F^X(i,j) &= q_{x_i}\text{sum}\begin{cases}\delta F^M(i-1,j)\\\varepsilon F^X(i-1,j)\end{cases}\\ F^Y(i,j) &= q_{y_j}\text{sum}\begin{cases}\delta F^M(i,j-1)\\\varepsilon F^X(i,j-1)\end{cases}\\ \end{aligned} $$

Termination:¶

$$F_e = \tau\ \text{sum}\left(F^M(n,m),F^X(n,m),F^Y(n,m)\right)$$
In [8]:
F,P_all = model.forward(seqX,seqY)
In [9]:
print(f"𝐹^𝐸(𝑛,𝑚)=𝑃(𝑥,𝑦)=Σalignments𝜋𝑃(𝑥,𝑦,𝜋)={P_all}")
𝐹^𝐸(𝑛,𝑚)=𝑃(𝑥,𝑦)=Σalignments𝜋𝑃(𝑥,𝑦,𝜋)=2.0457988072916236e-28
In [10]:
print(f"P(π*|x, y)={P_optimal/P_all}")
P(π*|x, y)=0.017359334840912267

$x_i$ と $y_j$ がアラインされる確率¶

  • 次の式で表される。 $$ \begin{aligned} P(x_i\diamondsuit y_i|x,y) &= \frac{\sum_{\pi\in\Omega_{ij}}P(x,y,\pi)}{P(x,y)}\\ &= \frac{F^M(i,j)\cdot B^M(i,j)}{P(x,y)} \end{aligned}$$

※ $\Omega_{ij}$:$x_i$ と $y_j$ がアラインされるアラインメントの集合

Pair HMMのためのBackwardアルゴリズム¶

Needleman-Wunsh-Gotoh のBackwardアルゴリズムとの類似性に注目!

Initialization:¶

$$ \begin{cases} B^M(n,m)=B^X(n,m)=B^Y(n,m)=\tau\\ B^X(i,m)=\varepsilon q_{x_{i+1}}B^X(i+1,m)\text{ for }i=n-1,\ldots,1\\ B^Y(i,m)=\varepsilon q_{y_{j+1}}B^X(n,j+1)\text{ for }j=m-1,\ldots,1\\ B^M(i,m)=\delta q_{x_{i+1}}B^X(i+1,m)\text{ for }i=n-1,\ldots,1\\ B^M(n,j)=\delta q_{y_{j+1}}B^Y(n,j+1)\text{ for }j=m-1,\ldots,1\\ \end{cases} $$

Recursion: $i=n-1,\ldots,1,\quad j=m-1,\ldots,1$¶

$$ \begin{aligned} B^M(i,j) &= \text{sum}\begin{cases}(1-2\delta-\tau)p_{x_iy_j}B^M(i+1,j+1)\\\delta q_{x_{i+1}}B(i+1,j)\\\delta q_{y_{j+1}}B^Y(i,j+1)\end{cases}\\ B^X(i,j) &= (1-\varepsilon-\tau)p_{x_{i+1},y_{j+1}}B^M(i+1,j+1) + \varepsilon q_{x_{i+1}}B^X(i+1,j)\\ B^Y(i,j) &= (1-\varepsilon-\tau)p_{x_{i+1},y_{j+1}}B^M(i+1,j+1) + \varepsilon q_{y_{j+1}}B^Y(i,j+1)\\ \end{aligned} $$
In [11]:
B = model.backward(seqX,seqY)
In [12]:
Pij = (F*B)/P_all
In [13]:
import seaborn as sns
import matplotlib.pyplot as plt
In [14]:
sns.heatmap(Pij)
plt.show()
In [15]:
# 可視化のために pandas を使用。
import pandas as pd
r,c = Pij.shape
pd.set_option('display.max_rows', r)
pd.set_option('display.max_columns', c)
In [16]:
df = pd.DataFrame(Pij)
In [17]:
df
Out[17]:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
0 1.139605e+00 1.145169e-02 1.061625e-04 9.380071e-06 7.330898e-07 1.256616e-08 5.467340e-10 2.910714e-11 5.763005e-12 3.410212e-13 5.102192e-15 2.187247e-16 1.988821e-17 1.147484e-18 1.367416e-20 6.720910e-22 4.976161e-24 7.098501e-26 9.237930e-28 2.211060e-29 3.898762e-32 1.763484e-40
1 1.002452e-01 9.915333e-01 6.192125e-03 1.868999e-04 4.332564e-05 9.546525e-07 4.066396e-08 2.157028e-09 9.465879e-11 4.846141e-11 4.058759e-13 3.267685e-14 8.754145e-16 1.928520e-16 1.373420e-18 1.082830e-19 9.927246e-22 1.394016e-23 1.508549e-25 4.777080e-27 9.963503e-30 8.788027e-38
2 2.530997e-02 1.110298e-01 7.189425e-01 4.724160e-03 2.510915e-04 4.961792e-05 1.187062e-06 1.017255e-07 3.970235e-09 2.068131e-10 9.703401e-11 7.255597e-13 1.565563e-13 2.611280e-15 3.254769e-16 2.694314e-18 1.079695e-19 1.562036e-21 1.545424e-23 1.735256e-25 1.265060e-27 2.215960e-35
3 1.439692e-03 1.313691e-01 9.101842e-02 4.446381e-01 5.912097e-03 3.126913e-04 8.585244e-05 1.538885e-06 1.919091e-07 8.250641e-09 2.393023e-10 1.283784e-10 1.387610e-12 2.250638e-13 4.821068e-15 2.111543e-16 4.457287e-18 2.448800e-19 3.227733e-21 1.284984e-23 8.240296e-26 3.335362e-33
4 3.517101e-05 3.000139e-03 4.131934e-01 8.504087e-02 1.663724e-01 9.561056e-03 2.917045e-04 9.039141e-05 1.788740e-06 1.312414e-07 2.869640e-08 4.101759e-10 1.507867e-10 3.456004e-12 5.959996e-13 5.757530e-15 2.024716e-16 4.111221e-18 7.279991e-20 1.060049e-21 6.121304e-24 4.843531e-31
5 9.934762e-06 1.458875e-04 3.927027e-03 6.740773e-01 8.441291e-02 7.234362e-02 1.094905e-02 1.879103e-04 1.252776e-04 1.454564e-06 1.059818e-07 2.729047e-08 9.494833e-10 8.082013e-11 1.033243e-11 3.411004e-13 6.554134e-15 3.958672e-16 8.201302e-18 3.482706e-20 2.714352e-22 4.461969e-29
6 5.322130e-07 6.381400e-05 4.257593e-04 6.688387e-03 9.174344e-01 4.917686e-02 4.329939e-02 3.819221e-03 1.763480e-04 1.328334e-04 1.940120e-06 9.105133e-08 1.541103e-08 2.609538e-09 8.150731e-11 2.404569e-11 1.889654e-13 3.985572e-15 1.024288e-16 6.839760e-18 1.341414e-20 4.476503e-27
7 5.863612e-10 7.892422e-07 1.012986e-04 1.397365e-03 1.342858e-02 1.002812e+00 2.593641e-02 3.890025e-02 1.670263e-03 1.614886e-04 8.871868e-05 1.756325e-06 1.155298e-07 1.122902e-08 2.203971e-09 1.028948e-10 2.509711e-11 1.531285e-13 2.099939e-15 4.258022e-17 2.374690e-18 1.208869e-24
8 1.171184e-11 2.035729e-09 3.700419e-07 2.397639e-04 4.844063e-03 2.599346e-02 9.949710e-01 1.502418e-02 2.712144e-02 1.478651e-03 1.433184e-04 6.712671e-05 1.454730e-06 9.766789e-08 9.072910e-09 2.328874e-09 6.340026e-11 1.502027e-11 1.916941e-13 1.314758e-15 1.242412e-17 4.691715e-23
9 3.005919e-13 6.399055e-11 5.515662e-09 3.748097e-07 1.153167e-04 1.497122e-02 6.310820e-02 8.863944e-01 1.030851e-02 1.491223e-02 2.002265e-03 8.941933e-05 3.530505e-05 1.470719e-06 9.754840e-08 8.043302e-09 3.375435e-09 3.679377e-11 2.917845e-12 5.484419e-14 1.471719e-15 4.178025e-21
10 1.792807e-15 1.557812e-12 1.844985e-10 1.289502e-08 7.545128e-07 6.340240e-05 2.061627e-02 1.787166e-01 5.419262e-01 1.188051e-02 1.024380e-02 2.347055e-03 7.577232e-05 1.796622e-05 1.114937e-06 7.069534e-08 8.011504e-09 2.756012e-09 4.374664e-11 6.704524e-13 1.075503e-14 1.217530e-19
11 1.923711e-17 4.362099e-15 1.941124e-12 6.147024e-10 1.551641e-08 5.550653e-07 1.380449e-04 9.537258e-03 5.398937e-01 1.863598e-01 1.452105e-02 9.548898e-03 1.837989e-03 5.136835e-05 1.397535e-05 6.835406e-07 5.429499e-08 8.819330e-09 1.851138e-09 1.231506e-11 1.775772e-13 2.576473e-18
12 5.638842e-19 1.455168e-16 9.139939e-15 1.547158e-12 1.037887e-09 2.248539e-08 1.151600e-06 9.872926e-05 5.973776e-03 8.862574e-01 6.786997e-02 1.624026e-02 4.029496e-03 2.179139e-03 2.921118e-05 1.601828e-05 5.561847e-07 3.123249e-08 2.978327e-09 9.604760e-10 3.744283e-12 9.636167e-17
13 3.331427e-21 7.494769e-19 2.963338e-16 6.987305e-15 4.315679e-12 6.087761e-10 3.497465e-08 3.604967e-06 8.639915e-05 5.915526e-03 9.923696e-01 2.749764e-02 2.345296e-02 2.411435e-03 1.600356e-03 2.967960e-05 1.263876e-05 5.535990e-07 1.777340e-08 1.086922e-09 1.497803e-10 4.715717e-15
14 8.334075e-23 3.113616e-20 1.885485e-18 4.096232e-16 1.085250e-14 2.877122e-12 9.801182e-10 2.465783e-08 7.111413e-06 1.332057e-04 5.532024e-03 1.019408e+00 1.546140e-02 2.230611e-02 1.326417e-03 7.657518e-04 3.756285e-05 1.397395e-05 7.084890e-07 8.614586e-09 3.251784e-10 1.560898e-13
15 2.761536e-24 1.577325e-22 1.652226e-19 6.855680e-18 4.640406e-16 1.789313e-14 1.881340e-12 7.696555e-10 3.721167e-08 3.131924e-06 2.768933e-04 5.432195e-03 1.019385e+00 1.220031e-02 2.678270e-02 1.012065e-03 4.234835e-04 2.691482e-05 8.312535e-06 2.735984e-07 4.296980e-09 1.264609e-12
16 1.125679e-25 3.526855e-23 5.295754e-22 1.029758e-19 2.954167e-17 8.415539e-16 3.337555e-14 1.886064e-12 3.708635e-10 8.103999e-08 2.979865e-06 2.717052e-04 5.867388e-03 1.008690e+00 1.398136e-02 2.796359e-02 1.094449e-03 2.222028e-04 1.653854e-05 6.727102e-06 7.321521e-08 3.095212e-11
17 5.314132e-29 1.371847e-25 1.002377e-22 1.431441e-21 2.329882e-19 2.824449e-17 1.264033e-15 1.039492e-13 1.896385e-12 2.117496e-10 8.676212e-08 1.428983e-06 4.224040e-04 7.551663e-03 9.828098e-01 2.577489e-02 2.154489e-02 1.348560e-03 1.271999e-04 1.123527e-05 1.554246e-06 1.061734e-09
18 1.311292e-30 3.344026e-28 1.039987e-25 1.917693e-22 4.842995e-21 2.644625e-19 5.424283e-17 1.016892e-15 2.466777e-13 3.876336e-12 1.412328e-10 6.644843e-08 1.307534e-06 2.267450e-04 1.352321e-02 9.236001e-01 4.123399e-02 2.242045e-02 1.780378e-03 1.137684e-04 4.658387e-06 2.707169e-08
19 3.685034e-32 1.308860e-29 1.727006e-27 1.846830e-25 9.168694e-23 2.025241e-20 2.015727e-19 7.009128e-17 1.110761e-15 2.135974e-13 8.991483e-12 3.294862e-10 2.170110e-08 1.342768e-06 1.738901e-04 1.366663e-02 9.157034e-01 5.085192e-02 1.134612e-02 1.333942e-03 1.601513e-04 7.755075e-07
20 2.627187e-34 3.307561e-31 6.412082e-29 8.638204e-27 5.130913e-25 5.421429e-23 2.735844e-20 4.581117e-19 4.673008e-17 1.996269e-15 1.567873e-13 2.425635e-11 7.144030e-10 2.339911e-08 4.401237e-07 1.583398e-04 8.993801e-03 8.715290e-01 1.032744e-01 9.301698e-03 8.040002e-04 1.264439e-05
21 3.712503e-36 1.248259e-33 7.484327e-31 4.015876e-28 1.275117e-26 7.126689e-25 1.294296e-22 1.126902e-20 1.562753e-18 3.245370e-17 8.822502e-16 3.618329e-13 1.719160e-11 9.436607e-10 3.634534e-08 4.567520e-07 2.489897e-05 1.031566e-02 8.313752e-01 1.337435e-01 9.529909e-03 1.755113e-04
22 1.081603e-37 4.975375e-35 3.859345e-33 1.396911e-30 8.994506e-28 2.233130e-26 1.907603e-24 1.395483e-22 7.223861e-21 2.385762e-18 3.020013e-17 1.437842e-15 1.876938e-13 2.135337e-11 5.432165e-10 7.346489e-08 4.608162e-07 1.776497e-05 2.915009e-03 7.255898e-01 2.520881e-01 4.862597e-03
23 7.053935e-40 3.695478e-37 9.639089e-35 1.470014e-32 2.795455e-30 1.235666e-27 2.213410e-26 7.771768e-24 1.829949e-22 1.539068e-20 1.623359e-18 3.985091e-17 3.521057e-15 1.986472e-13 1.486597e-11 3.334896e-10 7.576041e-08 5.116867e-07 2.834710e-05 1.528768e-03 3.676275e-01 6.239253e-01
In [ ]:
 

  • « 生物物理学 第2回
  • 分子生命科学Ⅲ 第2回 »
hidden
Table of Contents
Published
Oct 3, 2019
Last Updated
Oct 3, 2019
Category
情報基礎実験(浅井)
Tags
  • 3A 127
  • 情報基礎実験(浅井) 13
Contact
Other contents
  • Home
  • Blog
  • Front-End
  • Kerasy
  • Python-Charmers
  • Translation-Gummy
    • 3A - Shuto's Notes
    • MIT
    • Powered by Pelican. Theme: Elegant