とらりもんHOME  Index  Search  Changes  Login

python入門: 期末レポート課題II ... 血液型の人口動態シミュレーション

pythonを使って現実問題のシミュレーションをやってみよう。世の中にはいろんな血液型の人がいるが, それぞれの血液型が人口の中に占める比率は, 世代と共にどう変わっていくのだろうか?

 よく知られているように, 人の血液型は, A, B, Oの3種類の対立遺伝子が2つ組み合わさってできる(ここではRH+/-などは考えない)。AAとAO(=OA)はA型, BBとBO(=OB)はB型, ABはAB型, OOはO型である。そのような組み合わせまで考慮すれば, 人の血液型は, AA, AB, AO, BB, BO, OOの6種類である。

 AO型とAB型のカップルからは, AA, AB, AO, BOという4種類の血液型のどれかをもつ子が生まれる(OO型やBB型は生まれない!)。そのように, 生まれる子どもの血液型は親の血液型(の組み合わせ)で決まる。

 まず練習として, AA型, AB型, BB型しかいない世界を考えよう。ある世代における, それぞれの血液型の人の割合をAA, AB, BBと書き, 次世代のそれぞれの血液型の人の割合をnAA, nAB, nBBと書こう(nはnextの意味)。カップルの相性は血液型には依存しないとし, また, 血液型の人口比は男女でかわらないとする。pythonでは, nAA, nAB, nBBは次のように求められることはわかるだろうか?

nAA = AA*AA + AA*AB/2 + AB*AA/2 + AB*AB/4
nAB = AA*BB + BB*AA + AB*BB/2 + AB*AB/2 + BB*AB/2 + AA*AB/2 + AB*AA/2
nBB = AB*AB/4 + AB*BB/2 + BB*AB/2 + BB*BB
sum=nAA+nAB+nBB
nAA /= sum
nAB /= sum
nBB /= sum
(ヒント: AA*BBのような掛け算の前半は父親, 後半は母親からそれぞれ来る対立遺伝子について考慮している。

 sumは全員の人数。最後にsumで割ることで, 割合にしている。)

問1. この考え方を基に, 以下のような関数をpythonで作れ:

  • 名前はbloodAB()
  • 引数は, ある世代のAA, AB, BB型のそれぞれの割合と, そこから計算する世代の数(n)
  • 出力は, n世代後のAA, AB, BB型のそれぞれの割合

つまり, たとえばblood(0.4,0.3,0.3,10)と打てば, AA, AB, BBのそれぞれが4割, 3割, 3割の世代から10世代後の各血液型の割合が出てくる, というかんじ。おそらく以下のようなコードになる:

def bloodAB(AA, AB, BB, n):
  for i in range (0, n):
    nAA = AA*AA + AA*AB/2 + AB*AA/2
    nAB = ...(略)...
	nBB = ...(略)...
	sum = nAA + nAB + nBB
    nAA /= sum
    ... (略) ...
  return(nAA, nAB, nBB)

問2. その関数が正しく作られていることを, 以下のケースを試して確認せよ:

  • 最初, 全員がAA型である場合。何世代たっても全員AA型のはずである。
  • AAとBBが半々でABが0の場合。何世代たってもAAとBBの割合は同じはずである(対称なので)。

問3. これを, AA, AB, AO, BB, BO, OOの6種類に拡張せよ(正しく作られたことを, 上記のような方法で確認せよ)。たとえば, nAAについては,

nAA = AA*AA + AA*AO/2 + AO*AA/2 + AO*AO/4 + AA*AB/2 + AB*AA/2 + AB*AO/4 + AO*AB/4 + AB*AB/4

のようになるだろう(最後にsumで割るとして)。

問4. 現在, 日本の血液型の人口比は, AA=0.08, AB=0.10, AO=0.31, BB=0.03, BO=0.19, OO=0.29である。この比率は, 1世代後, 5世代後, 100世代後のそれぞれではどうなるか?

問5. もしも, ある国がO型の移民の優遇策を打ち出した結果, 日本からO型の人全員が一斉に去ってしまったなら(OO=0), 日本の次世代以降の血液型の比率はどうなるか?

問6. 前問と同様のことがもしA型の人(AAおよびAO)について起きたなら, 日本の次世代以降の血液型の比率はどうなるか?

問7. 以上の結果を, ハーディー・ワインベルクの法則に基づいて考察せよ。

問8(任意). 血液型を決定するA, B, Oのように, 3つの対立遺伝子からなる遺伝子型に関するハーディー・ワインベルクの法則を数学的に証明せよ。

Last modified:2020/02/07 15:02:14
Keyword(s):
References:[python入門]