2020年5月30日土曜日

PCRの検査回数

https://news.livedoor.com/article/detail/18327790/
武漢では、10人のブレンド検査をして、陽性の場合にのみ全員検査を行って検査数を稼いでいるとある。

この記事のように、上手く検査すれば、検査回数を節約しつつ、多くの人数の検査が可能かもしれない。
関連して、12個の金貨から天秤を用いて重さの違う金貨を1枚見つけたり、奴隷に毒見させて1000本のワインから一本の毒入りのワインを特定する有名な論理パズルがあるが、似たような考え方である程度考えられるかもしれない。

上の二つの問題はシャノンの情報理論、エントロピーの考え方から解くことが出来る。
厳密にはエントロピーはlogなどを用いて定義されるが、要は何度のyes/no質問で、ある一つの状態を特定できるかを表すのがエントロピーだ。

ワインの問題は、1000通りの可能性があるが、奴隷の毒見から、奴隷が{死ぬ、生きる}の2通りの情報を得ることが出来る。
故に、10人の奴隷を用いると2^10=1024の情報を得ることが出来るので、最低奴隷が10人いれば毒入りワインの特定が可能だ。

金貨の問題では1~12番の金貨のうちの1枚が重いか軽いかで、全てで24通りの可能性がある。(n, b)nは1~12、bは{重、軽}の値を取る。
天秤は、①右が重い②左が重い③質量が等しい の3つのうちの一つの情報を与えることが出来る。
ここから、理論的には3回の試行で3^3=27の情報を得ることが出来るので、この問題の最小の試行回数は3だ。

仮に、精度が100%と仮定すれば(この時点で間違ってるが)PCR検査の回数もこの組み合わせの議論で節約できるかもしれない。
記事によると10人分くらいはミックスしてもいいみたいだ。ここに制約があるのでワインの毒見のようにはいかないが。


仮に人口30000人くらいを基準に考える。
目的 検査陽性者の特定(≠感染者)
とはいえ、一つの検査で{陽性、陰性}かつ一人の感染の状態が{感染、非感染}なので、単純に考えれば人数分の検査が必要だ。

そこで、今のところ感染者の報告はないことからも、感染者が仮にいても少なそうなので、仮に10%の人(完全ランダム)が感染していると仮定する。
すると、問題は、10%の感染者の特定だ。コインの重さの問題と似てきた。
適当な10人を選んで、1人特定するなら、上記から3回の検査で済む。とはいえ、今回は何人の感染者がこの無作為な10人のグループにいるかは分からないのでもっと複雑。

ちなみに、記事の方法なら、運悪く10%がばらけると人数分の検査が必要になるが、期待値で考えると、適当な10人の組に関して、1度で済む確率が、(9/10)^10≈0.35、10回必要になるのが残り0.65なので、平均して約7回で済む。(微妙に多いけど)
3万人で考えれば、3000の10人組があるので、全員に検査するよりは、平均で3*3000=9000回くらいは節約できそう。超単純計算だが(笑)

x%の人が感染者、n人をまとめて検査するという方式を取ると、
期待値は(30000/n)*((1-x/100)^n+n*(1-(1-n/100)^n))
必要な検査数が下図のように。横軸x、縦期待値
数が小さいほど効果的なので、ある程度感染率が高くなったら3人単位でやるのが効果的な模様。



上の10%の仮定では、ある個人のエントロピーが約0.465。全員の感染の状態が独立と仮定すると、30000人の系のエントロピーが約4050。
ここから、検査の時のブレンドに制約が無ければ、約4000回の検査で10%の特定が出来そう。しかし、今回は制約付き。

ちなみに、10人の系ならば、エントロピーが4.65なので、平均5回の検査で足りそう。ブレンドの上限の制約も確実にクリアできるので、検査数半分くらいになら出来そうだ。

記事を読んでの思いつきで、情報理論の知識に乏しいので、ここら辺でとりあえず限界。
具体的に、どうやって検査をデザインすればいいのか(多分coding的な話)、10人の検査の制限をどう考慮すればいいのか、そもそも検査が正確じゃない場合、感染の様態が独立でない場合、あるいは検査の正確性が異なる場合はどうなるかなど。