ある遺伝子座に2種類の遺伝子A, aがある場合を考えます。この形質Aaの表現型はAA, Aa, aaになります。
個体数nの中の遺伝子Aの頻度をfA, 遺伝子aの頻度をfa(=1-fA)とし、この集団からランダムに配偶子を選んで次世代が個体数n生まれるとします。
遺伝子Aの頻度の世代経緯をシミュレーションしてみましょう。
/* 7.3.10m */ n : 30$ fA : 0.5$ freqList : []$ while fA > 0 and fA < 1 do ( freqList : endcons(fA, freqList), numA : 0, for j : 1 thru n do ( if random(1.0) < fA then numA : numA + 1, if random(1.0) < fA then numA : numA + 1 ), fA : numA / (2*n) )$ plot2d([discrete, makelist(i, i, 1, length(freqList)), freqList], [y, 0, 1])$
横軸が世代、縦軸が頻度です。選択がランダムな場合、遺伝子ドリフトが起こり、一方の遺伝子が「絶滅」することがわかります。
では、初期頻度に対して、形質が単一になるまでの平均世代数はいくらか調べましょう。
/* 7.3.11m */ n : 30$ trials : 20$ extinctionList : []$ for fAinit : 1/n step 1/n thru 1 do ( genAverage : 0, for k : 1 thru trials do ( fA : fAinit, generation : 0, while fA > 0 and fA < 1 do ( numA : 0, for j : 1 thru n do ( if random(1.0) < fA then numA : numA + 1, if random(1.0) < fA then numA : numA + 1 ), fA : numA / (2*n), generation : generation + 1 ), genAverage : genAverage + generation ), genAverage : genAverage/trials, extinctionList : endcons([fAinit, genAverage], extinctionList) )$ plot2d([discrete, extinctionList])$
参考文献
- Crandall, Mathematica―理工系ツールとしての (アジソン ウェスレイ・トッパン情報科学シリーズ) p.208-p.211