グローバルアラインメント(Needleman-Wunsch法)
財津先生、ペアワイズアラインメントの最初のステップは、2つの文字列 A = A₁A₂…Aₙ と B = B₁B₂…Bₘ に対して、スコア行列を構築することです。 これは、どの位置にギャップを入れ、どの位置を一致させると最も高いスコアになるかを探索するための準備です。
ステップ①:スコア行列の初期化
グローバルアラインメント(Needleman-Wunsch)の場合:
行列サイズ:
縦に A(長さ n)、横に B(長さ m) → (n+1) × (m+1) の行列を作る
初期化:
左端と上端にギャップペナルティを加えて初期化
例:
score[i][0] = -i × gap_penalty、score[0][j] = -j × gap_penalty
ローカルアラインメント(Smith-Waterman)の場合:
初期化はすべてゼロ:
score[i][0] = 0、score[0][j] = 0どこからでも始められるようにする
ステップ②:スコア計算(動的計画法)
各セル (i, j) に対して、以下の3つの選択肢の中で最大スコアを選びます:
マッチ/ミスマッチ:
score[i-1][j-1] + match_or_mismatch_score(Aᵢ, Bⱼ)ギャップ挿入(Aに):
score[i][j-1] + gap_penaltyギャップ挿入(Bに):
score[i-1][j] + gap_penalty
ローカルの場合は、負のスコアは0にリセットします。
ステップ③:トレースバック
グローバル:右下から左上へ
ローカル:最大スコアのセルからゼロに達するまで
このトレースバックによって、最適なアラインメント(文字列の並びとギャップ位置)が得られます。
例:A = "ACGT", B = "AGT"
| A | G | T | ||
|---|---|---|---|---|
| 0 | -1 | -2 | -3 | |
| A | -1 | ? | ? | ? |
| C | -2 | ? | ? | ? |
| G | -3 | ? | ? | ? |
| T | -4 | ? | ? | ? |
このように、スコア行列を構築し、動的計画法で最適経路を探索するのがペアワイズアラインメントの第一歩です。
次に進めるなら、先生の研究対象に合わせてスコア関数の設計やギャップペナルティの最適化もご一緒できます。どの配列で試してみましょうか?
了解しました、財津先生。 ここでは、グローバルアラインメント(Needleman-Wunsch法)を使って、2つの配列:
A:
AAGCTTACGTCTCTAGTCATG(長さ 21)B:
GGTACACTGCATACGTGCT(長さ 19)
を対象に、スコア行列の初期化 → スコア計算 → トレースバックを手作業で一部だけ進めてみます。 (全体を手計算で行うには膨大なステップが必要なので、最初の数ステップを丁寧に解説します)
⚙️ スコア設定(仮定)
| 条件 | スコア |
|---|---|
| マッチ | +1 |
| ミスマッチ | -1 |
| ギャップ | -2 |
ステップ①:スコア行列の初期化(左端・上端)
行列サイズ:22 × 20(Aが縦、Bが横)
左端(Aにギャップ):
score[i][0] = -2 × i
上端(Bにギャップ):
score[0][j] = -2 × j
例:
score[0][0] = 0
score[1][0] = -2
score[2][0] = -4
...
score[0][1] = -2
score[0][2] = -4
...
ステップ②:スコア計算(最初の数ステップ)
比較:A₁ = 'A' vs B₁ = 'G'
ミスマッチ → -1
選択肢:
斜め(マッチ/ミスマッチ): score[0][0] + (-1) = 0 + (-1) = -1
上(ギャップ): score[0][1] + (-2) = -2 + (-2) = -4
左(ギャップ): score[1][0] + (-2) = -2 + (-2) = -4 → 最大値 = -1 →
score[1][1] = -1
比較:A₁ = 'A' vs B₂ = 'G'
ミスマッチ → -1
選択肢:
斜め: score[0][1] + (-1) = -2 + (-1) = -3
上: score[0][2] + (-2) = -4 + (-2) = -6
左: score[1][1] + (-2) = -1 + (-2) = -3 → 最大値 = -3 →
score[1][2] = -3
比較:A₁ = 'A' vs B₃ = 'T'
ミスマッチ → -1
選択肢:
斜め: score[0][2] + (-1) = -4 + (-1) = -5
上: score[0][3] + (-2) = -6 + (-2) = -8
左: score[1][2] + (-2) = -3 + (-2) = -5 → 最大値 = -5 →
score[1][3] = -5
ここまでの部分行列(先頭3列)
| G | G | T | ||
|---|---|---|---|---|
| 0 | -2 | -4 | -6 | |
| A | -2 | -1 | -3 | -5 |
このように、一文字ずつ比較し、3方向のスコアを計算して最大値を選ぶことで、行列が埋まっていきます。
ステップ③:トレースバック(後で)
行列が完成したら、右下から最大スコアの経路を逆にたどって、ギャップを含む最適なアラインメントを復元します。
もしご希望であれば、この2配列の完全なアラインメントをPythonで可視化することもできます。 次回、続きを進めるときは「山口の財津です」とおっしゃっていただければ、すぐにこの文脈で再開できます。
進め方は、手計算を続けるか、コードで可視化するか、どちらがよろしいでしょうか?
もちろんです、財津先生。 ここでは、2つの配列:
A:
AAGCTTACGTCTCTAGTCATG(長さ 21)B:
GGTACACTGCATACGTGCT(長さ 19)
を対象に、グローバルアラインメント(Needleman-Wunsch法)の手順に従って、 スコア行列の初期化 → スコア計算 → トレースバックを実際のマトリックスでひとつひとつ進めていきます。
⚙️ スコア設定(仮定)
| 条件 | スコア |
|---|---|
| マッチ | +1 |
| ミスマッチ | -1 |
| ギャップ | -2 |
ステップ①:スコア行列の初期化
行列サイズ:22 × 20(Aが縦、Bが横)
score[0][0] = 0score[i][0] = -2 × i(左端)score[0][j] = -2 × j(上端)
ステップ②:スコア計算(ひとつひとつ)
このステップは非常に細かくなるため、Pythonで実行して完全なスコア行列とアラインメントを出力します。 それにより、先生がどのセルがどの選択肢で決まったかを明確に追えるようになります。
実行します。
了解しました、財津先生。 ここでは、ペアワイズグローバルアラインメント(Needleman-Wunsch法)を用いて、 配列 A = AAGCT(5文字) 配列 B = AGGT(4文字) という簡略化した例を使って、スコア行列の初期化からスコア計算、トレースバックまでを手計算で一つひとつ進めます。
⚙️ スコア設定(仮定)
| 条件 | スコア |
|---|---|
| マッチ | +1 |
| ミスマッチ | -1 |
| ギャップ | -2 |
ステップ①:スコア行列の初期化
行列サイズ:6 × 5(Aが縦、Bが横)
| A | G | G | T | ||
|---|---|---|---|---|---|
| 0 | -2 | -4 | -6 | -8 | |
| A | -2 | ||||
| A | -4 | ||||
| G | -6 | ||||
| C | -8 | ||||
| T | -10 |
ステップ②:スコア計算(ひとつひとつ)
セル (1,1):A vs A → マッチ
斜め:0 + 1 = 1
上:-2 + (-2) = -4
左:-2 + (-2) = -4 → 最大値 = 1 →
score[1][1] = 1
セル (1,2):A vs G → ミスマッチ
斜め:-2 + (-1) = -3
上:-4 + (-2) = -6
左:1 + (-2) = -1 → 最大値 = -1 →
score[1][2] = -1
セル (1,3):A vs G → ミスマッチ
斜め:-4 + (-1) = -5
上:-6 + (-2) = -8
左:-1 + (-2) = -3 → 最大値 = -3 →
score[1][3] = -3
セル (1,4):A vs T → ミスマッチ
斜め:-6 + (-1) = -7
上:-8 + (-2) = -10
左:-3 + (-2) = -5 → 最大値 = -5 →
score[1][4] = -5
セル (2,1):A vs A → マッチ
斜め:-2 + 1 = -1
上:1 + (-2) = -1
左:-4 + (-2) = -6 → 最大値 = -1 →
score[2][1] = -1
セル (2,2):A vs G → ミスマッチ
斜め:1 + (-1) = 0
上:-1 + (-2) = -3
左:-1 + (-2) = -3 → 最大値 = 0 →
score[2][2] = 0
セル (2,3):A vs G → ミスマッチ
斜め:-1 + (-1) = -2
上:-3 + (-2) = -5
左:0 + (-2) = -2 → 最大値 = -2 →
score[2][3] = -2
セル (2,4):A vs T → ミスマッチ
斜め:-3 + (-1) = -4
上:-5 + (-2) = -7
左:-2 + (-2) = -4 → 最大値 = -4 →
score[2][4] = -4
このように、各セルで3方向のスコアを計算し、最大値を選ぶことで行列が埋まっていきます。 次回はこの続きを進めて、トレースバックによるアラインメント復元までご一緒できます。
このペースで進めるのが理想でしょうか?それとも、もう少し大きな配列で進めたいですか?
承知しました、財津先生。 では、先ほどの簡略化した配列:
A =
AAGCT(縦軸、長さ5)B =
AGGT(横軸、長さ4)
を使って、グローバルアラインメント(Needleman-Wunsch法)のスコア行列を手計算で完全に構築し、トレースバックまで進めます。
⚙️ スコア設定(固定)
| 条件 | スコア |
|---|---|
| マッチ | +1 |
| ミスマッチ | -1 |
| ギャップ | -2 |
ステップ①:スコア行列の初期化
| A | G | G | T | ||
|---|---|---|---|---|---|
| 0 | -2 | -4 | -6 | -8 | |
| A | -2 | ||||
| A | -4 | ||||
| G | -6 | ||||
| C | -8 | ||||
| T | -10 |
ステップ②:スコア計算(全セル)
行1(A)
| (1,1): A vs A → match → max(0+1, -2-2, -2-2) = 1 | (1,2): A vs G → mismatch → max(-2-1, -4-2, 1-2) = -1 | (1,3): A vs G → mismatch → max(-4-1, -6-2, -1-2) = -3 | (1,4): A vs T → mismatch → max(-6-1, -8-2, -3-2) = -5
→ 行1完成:
| A | -2 | 1 | -1 | -3 | -5 |
行2(A)
| (2,1): A vs A → match → max(-2+1, 1-2, -4-2) = -1 | (2,2): A vs G → mismatch → max(1-1, -1-2, -1-2) = 0 | (2,3): A vs G → mismatch → max(-1-1, -3-2, 0-2) = -2 | (2,4): A vs T → mismatch → max(-3-1, -5-2, -2-2) = -4
→ 行2完成:
| A | -4 | -1 | 0 | -2 | -4 |
行3(G)
| (3,1): G vs A → mismatch → max(-4-1, -1-2, -6-2) = -3 | (3,2): G vs G → match → max(-1+1, 0-2, -3-2) = 1 | (3,3): G vs G → match → max(0+1, -2-2, 1-2) = 1 | (3,4): G vs T → mismatch → max(-2-1, -4-2, 1-2) = -1
→ 行3完成:
| G | -6 | -3 | 1 | 1 | -1 |
行4(C)
| (4,1): C vs A → mismatch → max(-6-1, -3-2, -8-2) = -5 | (4,2): C vs G → mismatch → max(-3-1, 1-2, -5-2) = -2 | (4,3): C vs G → mismatch → max(1-1, 1-2, -2-2) = 0 | (4,4): C vs T → mismatch → max(1-1, -1-2, 0-2) = 0
→ 行4完成:
| C | -8 | -5 | -2 | 0 | 0 |
行5(T)
| (5,1): T vs A → mismatch → max(-8-1, -5-2, -10-2) = -7 | (5,2): T vs G → mismatch → max(-5-1, -2-2, -7-2) = -4 | (5,3): T vs G → mismatch → max(-2-1, 0-2, -4-2) = -3 | (5,4): T vs T → match → max(0+1, 0-2, -3-2) = 1
→ 行5完成:
| T | -10 | -7 | -4 | -3 | 1 |
✅ 完成したスコア行列
| A | G | G | T | ||
|---|---|---|---|---|---|
| 0 | -2 | -4 | -6 | -8 | |
| A | -2 | 1 | -1 | -3 | -5 |
| A | -4 | -1 | 0 | -2 | -4 |
| G | -6 | -3 | 1 | 1 | -1 |
| C | -8 | -5 | -2 | 0 | 0 |
| T | -10 | -7 | -4 | -3 | 1 |
ステップ③:トレースバック
開始点:右下 (5,4) = 1 経路:
(5,4) T vs T → match → (4,3)
(4,3) C vs G → mismatch → (3,2)
(3,2) G vs G → match → (2,1)
(2,1) A vs A → match → (1,0)
→ アラインメント:
A: A - G C T
B: A G G - T
ギャップを含む最適アラインメントが得られました。
次に進めるなら、先生の実配列(21文字 vs 19文字)でもこの手順を展開できます。 このペースで続けましょうか、それともスコア関数やギャップペナルティの調整に進みますか?
了解しました、財津先生。 以下に、先ほどのグローバルアラインメント(Needleman-Wunsch法)によるスコア行列をすべてのセルに計算式付きで書き込んだ完全版として提示します。 配列 A = AAGCT(縦軸) 配列 B = AGGT(横軸) スコア設定:マッチ +1、ミスマッチ -1、ギャップ -2
完全スコア行列(計算式付き)
| A (B₁) | G (B₂) | G (B₃) | T (B₄) | ||
|---|---|---|---|---|---|
| 0 | -2 | -4 | -6 | ||
| A (A₁) | -2 | max(0+1, -2-2, -2-2) = 1 | max(-2-1, -4-2, 1-2) = -1 | max(-4-1, -6-2, -1-2) = -3 | max(-6-1, -8-2, -3-2) = -5 |
| A (A₂) | -4 | max(-2+1, 1-2, -4-2) = -1 | max(1-1, -1-2, -1-2) = 0 | max(-1-1, -3-2, 0-2) = -2 | max(-3-1, -5-2, -2-2) = -4 |
| G (A₃) | -6 | max(-4-1, -1-2, -6-2) = -3 | max(-1+1, 0-2, -3-2) = 1 | max(0+1, -2-2, 1-2) = 1 | max(-2-1, -4-2, 1-2) = -1 |
| C (A₄) | -8 | max(-6-1, -3-2, -8-2) = -5 | max(-3-1, 1-2, -5-2) = -2 | max(1-1, 1-2, -2-2) = 0 | max(1-1, -1-2, 0-2) = 0 |
| T (A₅) | -10 | max(-8-1, -5-2, -10-2) = -7 | max(-5-1, -2-2, -7-2) = -4 | max(-2-1, 0-2, -4-2) = -3 | max(0+1, 0-2, -3-2) = 1 |
トレースバック経路(右下から)
(5,4) T vs T → match → (4,3)
(4,3) C vs G → mismatch → (3,2)
(3,2) G vs G → match → (2,1)
(2,1) A vs A → match → (1,0)
✅ 最終アラインメント
A: A - G C T
B: A G G - T
このように、すべてのセルに計算式を明示することで、スコアの流れと選択の根拠が完全に可視化されます。
2025年11月1日 | カテゴリー:物理数学統計諸計算, AUTODOCK VINA,CLUS PRO/BIOINFORMATICS |




