ギャップの減点でアラインメントが変わる
ギャップペナルティとは、アラインメントでギャップに与える減点のことです。点のつけ方を変えると、いちばんよい並べ方が変わります。
このレッスンでは、点の決め方で並べ方がどう変わるかを調べ、全体を並べる方法と、似た部分だけを並べる方法を比べます。配列は作り話です。
このレッスンのゴール
メモ
点のつけ方を変えて、よい並べ方が変わることを確かめられる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| ギャップペナルティ | ギャップ1つにつける減点 | -2 |
| スコアリング | 一致、不一致、ギャップの点の決め方 | |
| グローバルアラインメント | 配列の端から端まで並べる方法 | |
| ローカルアラインメント | 似ている部分だけを並べる方法 | |
| 局所最高点 | 途中で区切ったときの、最も高い合計点 |
学生が入力するセルは、このプレビューでは空白です。
ギャップの減点を変えると最良が変わる
次の2通りの並べ方を比べます。1つ目はギャップなしで、不一致が2つあります。2つ目はギャップが2つで、一致が3つあります。
ギャップの減点が軽いと、2つ目が有利です。重くすると、1つ目が有利になります。
例: ACGT と AGTT の2通り
| 並べ方 | 上と下 | ギャップ -1 | ギャップ -2 |
|---|---|---|---|
| 1つ目 | ACGT と AGTT | 0 | 0 |
| 2つ目 | ACGT- と A-GTT | 1 | -1 |
| よいほう | 2つ目 | 1つ目 |
学生が入力するセルは、このプレビューでは空白です。
ギャップの点を変えて比べる
docker exec jupyter python3 -c 'U="ACGT-"; L="A-GTT"; print([sum([1 if p == q else g if "-" in (p, q) else -1 for p, q in zip(U, L)]) for g in [-1, -2]])'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
ギャップの減点に、ただ1つの正しい値があると考えがちです。実際は、調べたいことに合わせて決めます。値を変えれば、よい並べ方も変わるので、使った値は必ず書いておきます。
ローカルは似た部分だけを並べる
グローバルアラインメントは、配列を端から端まで並べます。端が全然違うと、減点が増えます。
ローカルアラインメントは、似ている部分だけを選びます。合計がマイナスになったら 0 に戻し、そこまでの最高点を答えにします。
例: 列ごとの点と合計の動き
| 列 | 点 | グローバルの合計 | ローカルの合計 |
|---|---|---|---|
| 1 | -1 | -1 | 0 |
| 2 | -1 | -2 | 0 |
| 3 | 1 | -1 | 1 |
| 4 | 1 | 0 | 2 |
| 5 | 1 | 1 | 3 |
| 6 | 1 | 2 | 4 |
| 7 | -2 | 0 | 2 |
学生が入力するセルは、このプレビューでは空白です。
ローカルの最高点を求める
# 列ごとの点を順に足し、マイナスになったら 0 に戻します。
column_points = [-1, -1, 1, 1, 1, 1, -2, 1, 1, -1, -1]
running = 0
best = 0
for point in column_points:
running = running + point
if running < 0:
running = 0
if running > best:
best = running
print("全体の合計:", sum(column_points))
print("ローカルの最高点:", best)
# 最初の -1 を 3 に変えて、もう一度実行してください。
# 2つの値は、どう変わりますか。