見出し画像

医療とテクノロジーの交差点にて【第7話】プログラミングで解析したDNA鑑定の精度

どうも、トア・ルドクターです。

本日のテーマは、犯罪捜査におけるDNA鑑定です。犯人特定における決定的証拠と思われるDNA鑑定ですが、その精度は実は絶対的なものではありません。この意外な事実をプログラミングを用いて解き明かしてみよう、というのが本記事の内容です。

以下が、現在用いられている代表的なDNA鑑定法です。

① STR法
② Y染色体STR法
③ MLP法
④ SLP法
⑤ ミトコンドリア法

このうち、①のSTR法が金銭的・時間的コストパフォーマンスが良い点で重宝されております。DNA中には同様のDNA配列が反復される領域があり、このような反復単位(繰り返し領域)の反復数に着目して個体識別する方法だそうです。この反復単位のことを Short Tandem Repeat(短鎖縦列反復配列)といい、STR法という呼称はこれに由来します。

さて、このSTR法の個人識別の精度(偶然一致の確率)は4.7兆分の1と言われております。世界の人口は高々77億人(中国の一人っ子政策に伴う無戸籍児ヘイハイズを考慮するともう少し多いとも)ですから、DNAが偶々一致することなど殆どありえないように思えます。しかし現実に、アメリカのメリーランド州が登録している3万人分のデータベース(DNA型プール)においてDNA型の偶然一致が実在したという事例がありました。4.7兆という天文学的数字を考えると直感に反しますが、この謎をプログラミングを用いて解き明かしていきましょう。データサイエンスの基本は「問題の単純化・モデル化」なので、まずは簡単な問題を考えてみてください。所謂「バースデー・パラドクス」と言われる問題です。

【問題】バースデー・パラドクス
40人のクラスで誕生日が一致するペアが存在する確率は?
(閏年は考慮せず、1年は365日とする)

至極簡単ですね。余事象を考えるとスムーズに計算できます。

【解答】
余事象(40人全員の誕生日が不一致の確率)は
comp = 364/365 × 363/365 × 362/365 ×・・・×326/365
よって求める確率は、
P = 1 - comp

問題としてはこれで終わりですが、
一般化してn人のクラスの場合を考えると(n <= 365)
comp = 364/365 × 363/365 ×...×(365-N+1)/365
 = [365×364×...×(365-N+1)] / 365^N
 = 365! / [(365 - N)! × 365^N]

よって求める確率関数は、
P(N) = 1 - 365! / [(365-N)! × 365^N] (n <= 365)

なお、n > 365 の場合については、鳩ノ巣原理により絶対に1組は誕生日が一致するので、P(N) = 1 となります。

この確率関数 P(N)のグラフをpython3で描いてみます。

import numpy as np
import sympy as sp
import matplotlib.pyplot as plt

# 確率を計算する関数
def p(n):
   comp = sp.factorial(365) / (sp.factorial(365-n) * 365**n)
   return 1 - comp

# 40人クラスの場合の確率
ans = float(p(40))
print(ans)

# numpyでx座標・y座標の配列を作成
n = np.arange(366, dtype=np.int64)
p = np.array([p(i) for i in range(366)], dtype=np.float64)

# matplotlibでグラフ描出
plt.plot(n,p)
plt.xlabel("number")
plt.ylabel("probability")
plt.show()
---------------------------------------
>> 0.891231809817949

numpy / sympy / matplotlib のいずれもデータサイエンスで頻出のライブラリなので、馴染みない方は是非とも勉強してみてください。
40人のクラスで誕生日が一致するペアが存在する確率 P(40)は、実際に計算してみると 0.89...(約90%)とかなり高確率となります。
0〜365人の場合の確率を各々プロットしたグラフは次の通りです。グラフを見ても N=40 のときに確率が 0.9 くらいだと分かります。

スクリーンショット 2019-10-07 12.29.22

特定の二人の誕生日が一致する確率はわずか 1/365 だけれど、どの2人でもいいから一致する確率となると格段に増えるというのが肝です。そして、これこそがDNA鑑定のピットフォールなのです。

バースデー・パラドクスをDNA鑑定の話に敷衍すると、先程とほとんど同様の議論ができます。即ち、ある2人のSTR型が一致する確率は4.7兆分の1という微小なものだけれど、ある母体の中で一致するペアが存在する確率となると意外に高確率となります。どのくらいの確率かというと、大阪市の人口250万人の中でSTR型一致ペアが50%の確率で存在することになります。ただ厳密なことを言えば、DNA鑑定の話はバースデー・パラドクスと全く同様ではありません。というのも、誕生日は1月1日から12月31日まで(おそらく)生起確率の等しい事象であるのに対して、STR型の反復数というのは1つ1つ生起確率が異なる事象だからです。本記事では簡便化のため、どの事象も対等に起こり得ると仮定していたわけです。

犯罪者特定の要であるDNA鑑定の偶然一致により冤罪になる可能性が0ではないと考えると恐ろしいですね。ここで誤解を招きやすいのですが、逆にDNA鑑定が不一致だった場合に無実と言い切るのは問題ありません。実際、足利事件などDNA鑑定が不一致だったことで冤罪証明されたケースは多々あります。当然「個人が一致ならば、DNA鑑定も一致」なので、対偶をとれば「DNA鑑定が不一致ならば、個人も不一致」と言えるわけです。ここでのポイントは、「DNA鑑定が一致」というのが「個人が一致」の必要条件にすぎないことです。即ち「個人が一致ならば、DNA鑑定も一致」は言えても「DNA鑑定で一致ならば、個人が一致」は言えないというのが本記事で解き明かした結論です。

まとめると、DNA鑑定というのは感度100%(不一致なら容疑者から除外)であるけど特異度99%くらい(一致しても限りなく疑わしいだけ)の検査だということです。確率計算・論理の包含関係など、数学リテラシーの重要性を実感できるテーマでした。

それではまたいつか!

【著者プロフィール】
都内で医師として研鑽する傍ら、独学でプログラミングを学ぶ26歳。趣味は『ギター / バイオリン / 美術鑑賞 / youtube鑑賞 / 創作料理 / 囲碁 / チェス / 折り紙 / スノボ / サーフィン / ドライブ』など枚挙にいとまがない。CIAの格闘武術クラブマガを始める。得意料理はバナナシチュー。ビールと牡蠣は生派だが生セックスは断固せず、経験人数の常用対数は2未満と清純を極める。略歴としては高2で数学全国1位(駿台)、文系で官僚をめざすも、ドラマ『コードブルー』の影響から気づいたら医師に。ディープラーニングG検定、統計検定2級、知的財産検定3級など取得。TOEICは次回900目指す予定(仮)。
【記事アーカイブ】
【第1話】医者なのにプログラミングを勉強してみた話
【第2話】pythonプログラミングの小技(1)ラムダ
【第3話】プログラミング初心者が学ぶべき3つのポイント
【第4話】競技プログラミングのススメ
【第5話】競技プログラミング物語(1)バイトリーダーの苦悩
【第6話】プログラミングで自作する実用アプリ(1)NEVER-NOTE
【第7話】プログラミングで解析したDNA鑑定の精度
【第8話】統計学は最強の学問であるのか?
【第9話】プログラミングすれば人類最高IQに対抗できる説

この記事が気に入ったらサポートをしてみませんか?