ミトコンドリア・シミュレータ その4
たけ(tk):
GGB03124@nifty.ne.jp
大三元さんからのリクエストがあったので・・、
「ある二人の人物のmtDNAがN個違う場合に、その両人の母系の遠い
祖先が分岐したのはいつ頃と推定できるか」
というような計算をしてみました。(ベースになっているのは、2000年
9月頃にニフティの古代史の会議室 nifty:FREKI/MES/14/2112 にアップし
たものです)。
おおざっぱな結論を言ってしまえば・・、
十中八九(じゅっちゅうはっく)でよければ・・、
変異がなければ、3万5000年前より後に分岐した。
変異が一つなら、1万年前から5万年前の間に分岐した。
変異が2個なら、1万5000年前から7万年前の間に分岐した。
変異が3個なら、2万5000年前から9万年前の間に分岐した。
変異が4個なら、3万5000年前から11万年前の間に分岐した。
変異が5個なら、4万5000年前から13万年前の間に分岐した。
てな感じになります。
「十中八九(じゅっちゅうはっく)」というのは「前後10%の可能性を
除いた80%の部分の範囲」では、という意味です。これはどういうことか
というと、5回答えた場合に1回は間違っている、という意味でもあります。
5回に1回はずれでは精度が低すぎるから、「前後1%を除いた98%以
上の確率で言える」ように答えたい、と言うのであれば、表の1%と99%
の範囲をみればよいです。「変異が3個ある場合には5000年前(☆)か
ら14万年前(★)の間に分岐したことがほぼ確実」と言えるでしょう。
しかし、13万5000年などという長期間で答えたのでは、納得してくれ
る人は少ないでしょうね。意味があると言えばあるけど・・。そこら辺の評
価は読者にお任せします。
変異が一つだから平均1万4000年前に分岐したはずだ、といっても、
実際には1世代前に分岐した(この二人は姉妹)かも知れない。し、9万年
前(△)に遡らなければ同一の母親にたどり着かないかも知れない(1.03% の
確率でその可能性がある)。したがって、本当のことは全然分からない。け
れども、確率としては平均やだいたいの範囲は計算できる、ということです。
「ねえ、今度のテスト何点とれた?」
「クラスの平均点は55点だったよ」
「だから、平均じゃなくて君は何点取ったのさ」
「クラスの人の得点分布をみると、十中八九、40点から70点というと
ころかな」
「いいたくないの?」
「もらってすぐ捨てちゃったし、忘れちゃった」
「・・・」
では、結果として出てきた表をあげておきます。数字だらけで目眩がしま
すね。
十中八九(じゅっちゅうはっく)でよければ、ということで10%のライ
ンに「----」、90%のラインに「====」を引いておきました。
累積(%) 0 1 2 3 4 5 6 7
nen 5000 : 30.04 9.02 1.59 0.19 0.02 0.00 0.00 0.00
----- ☆☆☆
nen 10000 : 51.06 21.65 6.05 1.25 0.21 0.03 0.00 0.00
-----
nen 15000 : 65.76 34.91 13.07 3.75 0.88 0.17 0.03 0.00
nen 20000 : 76.05 47.27 21.81 7.91 2.36 0.60 0.13 0.03
-----
nen 25000 : 83.25 58.08 31.36 13.60 4.90 1.50 0.40 0.10
nen 30000 : 88.29 67.16 40.99 20.47 8.58 3.08 0.97 0.27
===== -----
nen 35000 : 91.81 74.56 50.16 28.11 13.36 5.48 1.97 0.63
nen 40000 : 94.27 80.48 58.53 36.09 19.06 8.75 3.54 1.28
-----
nen 45000 : 95.99 85.14 65.95 44.04 25.46 12.87 5.76 2.31
nen 50000 : 97.20 88.76 72.35 51.67 32.28 17.75 8.68 3.83
===== -----
nen 55000 : 98.04 91.55 77.77 58.78 39.26 23.25 12.31 5.89
nen 60000 : 98.63 93.68 82.29 65.23 46.18 29.20 16.58 8.54
-----
nen 65000 : 99.04 95.29 86.00 70.97 52.85 35.41 21.42 11.79
nen 70000 : 99.33 96.51 89.01 75.98 59.13 41.71 26.70 15.62
=====
nen 75000 : 99.53 97.42 91.42 80.30 64.92 47.93 32.29 19.95
nen 80000 : 99.67 98.09 93.34 83.96 70.16 53.93 38.05 24.72
nen 85000 : 99.77 98.60 94.86 87.04 74.83 59.62 43.85 29.82
nen 90000 : 99.84 98.97 96.05 89.59 78.94 64.92 49.57 35.14
△△△ =====
nen 95000 : 99.89 99.25 96.98 91.69 82.51 69.78 55.10 40.58
nen 100000 : 99.92 99.45 97.70 93.41 85.57 74.17 60.37 46.03
nen 105000 : 99.95 99.60 98.25 94.80 88.18 78.10 65.30 51.40
=====
nen 110000 : 99.97 99.71 98.67 95.91 90.38 81.56 69.87 56.59
nen 115000 : 99.98 99.79 99.00 96.80 92.21 84.59 74.04 61.56
nen 120000 : 99.99 99.85 99.25 97.51 93.73 87.20 77.81 66.24
nen 125000 : 99.99 99.89 99.44 98.07 94.99 89.45 81.18 70.59
=====
nen 130000 : 100.00 99.92 99.58 98.52 96.02 91.36 84.16 74.60
nen 135000 : 100.00 99.95 99.69 98.86 96.85 92.98 86.77 78.26
★★★
nen 140000 : 100.00 99.96 99.77 99.13 97.53 94.33 89.05 81.55
=====
nen 145000 : 100.00 99.97 99.83 99.34 98.07 95.46 91.01 84.51
nen 150000 : 100.00 99.98 99.87 99.50 98.51 96.40 92.70 87.12
nen 155000 : 100.00 99.99 99.91 99.63 98.86 97.17 94.13 89.42
=====
nen 160000 : 100.00 99.99 99.93 99.72 99.13 97.81 95.34 91.44
nen 165000 : 100.00 100.00 99.95 99.80 99.35 98.32 96.37 93.18
nen 170000 : 100.00 100.00 99.96 99.86 99.52 98.74 97.22 94.69
nen 175000 : 100.00 100.00 99.97 99.90 99.66 99.08 97.93 95.98
nen 180000 : 100.00 100.00 99.98 99.93 99.76 99.35 98.52 97.08
nen 185000 : 100.00 100.00 99.99 99.96 99.85 99.57 99.01 98.01
nen 190000 : 100.00 100.00 99.99 99.97 99.91 99.75 99.41 98.79
nen 195000 : 100.00 100.00 100.00 99.99 99.96 99.89 99.73 99.45
nen 200000 : 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
ミトコンドリア・シミュレータ その3 へ戻る
ミトコンドリア・シミュレータ その5 へ
(↓にまだ、続きがあります)
上の表は「累積」の表ですが、その前提となったのは下の「分布」の表です。
これを見ると、「平均1万4000年」(と言われている)の倍数の辺り peek
が入っていることが分かります。
「peek の頃に分岐した可能性が一番高い」と言うことは出来ますが、変異
が一個の場合でも高々14%程度に確率で当たるにすぎません。これは、さい
ころを2個振ったときに出た目の合計が7である確率(1/6=16.7%)
より低いのです。
分布(%) 0 1 2 3 4 5 6 7
nen 5000 : 30.04 9.02 1.59 0.19 0.02 0.00 0.00 0.00
nen 10000 : 21.02 12.63 4.46 1.06 0.19 0.03 0.00 0.00
peek
nen 15000 : 14.71 13.25 7.02 2.50 0.67 0.14 0.03 0.00
nen 20000 : 10.29 12.36 8.74 4.16 1.48 0.42 0.10 0.02
nen 25000 : 7.20 10.81 9.56 5.68 2.54 0.91 0.27 0.07
peek
nen 30000 : 5.04 9.08 9.63 6.87 3.68 1.58 0.57 0.18
nen 35000 : 3.52 7.41 9.17 7.64 4.78 2.40 1.00 0.36
nen 40000 : 2.46 5.92 8.38 7.98 5.70 3.27 1.57 0.65
peek
nen 45000 : 1.72 4.66 7.42 7.95 6.39 4.12 2.22 1.03
nen 50000 : 1.21 3.62 6.40 7.63 6.82 4.88 2.92 1.51
nen 55000 : 0.84 2.79 5.42 7.11 6.98 5.50 3.62 2.06
peek
nen 60000 : 0.59 2.13 4.52 6.45 6.92 5.95 4.28 2.65
nen 65000 : 0.41 1.61 3.71 5.74 6.67 6.21 4.84 3.25
nen 70000 : 0.29 1.21 3.01 5.02 6.28 6.30 5.28 3.83
peek
nen 75000 : 0.20 0.91 2.41 4.32 5.79 6.22 5.59 4.34
nen 80000 : 0.14 0.68 1.92 3.67 5.24 6.01 5.76 4.77
peek
nen 85000 : 0.10 0.51 1.52 3.08 4.67 5.69 5.80 5.10
nen 90000 : 0.07 0.38 1.19 2.55 4.11 5.30 5.72 5.32
nen 95000 : 0.05 0.28 0.93 2.10 3.57 4.86 5.53 5.44
nen 100000 : 0.03 0.20 0.72 1.71 3.06 4.39 5.27 5.45
nen 105000 : 0.03 0.15 0.55 1.39 2.61 3.92 4.94 5.36
nen 110000 : 0.02 0.11 0.43 1.11 2.20 3.46 4.57 5.20
nen 115000 : 0.01 0.08 0.33 0.89 1.83 3.03 4.17 4.96
nen 120000 : 0.01 0.06 0.25 0.71 1.52 2.62 3.77 4.68
nen 125000 : 0.00 0.04 0.19 0.56 1.26 2.25 3.37 4.36
nen 130000 : 0.00 0.03 0.14 0.44 1.03 1.91 2.98 4.01
nen 135000 : 0.00 0.02 0.11 0.35 0.84 1.62 2.62 3.65
nen 140000 : 0.00 0.02 0.08 0.27 0.68 1.36 2.27 3.30
nen 145000 : 0.00 0.01 0.06 0.21 0.54 1.13 1.96 2.95
nen 150000 : 0.00 0.01 0.05 0.16 0.44 0.94 1.69 2.62
nen 155000 : 0.00 0.01 0.03 0.13 0.35 0.77 1.43 2.30
nen 160000 : 0.00 0.00 0.03 0.10 0.28 0.63 1.21 2.01
nen 165000 : 0.00 0.00 0.02 0.08 0.22 0.52 1.02 1.75
nen 170000 : 0.00 0.00 0.01 0.06 0.17 0.42 0.86 1.50
nen 175000 : 0.00 0.00 0.01 0.04 0.14 0.34 0.71 1.29
nen 180000 : 0.00 0.00 0.01 0.03 0.11 0.27 0.59 1.10
nen 185000 : 0.00 0.00 0.01 0.03 0.08 0.22 0.49 0.93
nen 190000 : 0.00 0.00 0.00 0.02 0.06 0.18 0.40 0.79
nen 195000 : 0.00 0.00 0.00 0.01 0.05 0.14 0.32 0.66
nen 200000 : 0.00 0.00 0.00 0.01 0.04 0.11 0.27 0.55
「分布」の表の前に計算したのが、
「ある二人がN年前に分岐したとしたら、現在いくつの変異があるか」
の分布の表です。
この表では横方向の合計が100%になります。この表を再計算して縦方
向が100%になるように再計算したのが「分布」の表で、さらに、「分布」
を累計したのが「累積」の表になります。
peek に関しては上の「分布」と一致していることが分かるでしょう。
なお、この表で分かるとおり、変異が2個以上の場合20万年までの計算
でも0%(0.01%未満)になっていません。従って、「これを縦計算した場
合には1%以上の可能性(20万年以上の可能性)が無視されてしまってい
ます。その点で、上記の「分布」「累積」の表は完全ではありませんのでご
注意ください。
0 1 2 3 4 5 6 7 8 9
5000 69.96% 25.00% 4.45% 0.53% 0.05% 0.00% 0.00% 0.00% 0.00% 0.00%
10000 48.95% 34.99% 12.48% 2.97% 0.53% 0.08% 0.01% 0.00% 0.00% 0.00%
peek
15000 34.25% 36.72% 19.66% 7.01% 1.87% 0.40% 0.07% 0.01% 0.00% 0.00%
20000 23.96% 34.25% 24.46% 11.64% 4.15% 1.18% 0.28% 0.06% 0.01% 0.00%
25000 16.76% 29.95% 26.75% 15.91% 7.10% 2.53% 0.75% 0.19% 0.04% 0.01%
peek
30000 11.73% 25.15% 26.95% 19.24% 10.30% 4.41% 1.57% 0.48% 0.13% 0.03%
35000 8.20% 20.52% 25.66% 21.39% 13.36% 6.68% 2.78% 0.99% 0.31% 0.09%
40000 5.74% 16.40% 23.45% 22.34% 15.95% 9.11% 4.34% 1.77% 0.63% 0.20%
peek
45000 4.01% 12.91% 20.76% 22.25% 17.88% 11.49% 6.15% 2.82% 1.13% 0.40%
50000 2.81% 10.04% 17.93% 21.36% 19.07% 13.62% 8.10% 4.13% 1.84% 0.73%
55000 1.96% 7.72% 15.18% 19.89% 19.53% 15.35% 10.04% 5.63% 2.76% 1.20%
peek
60000 1.37% 5.90% 12.64% 18.06% 19.36% 16.59% 11.85% 7.25% 3.88% 1.85%
65000 0.96% 4.47% 10.38% 16.07% 18.65% 17.32% 13.40% 8.88% 5.15% 2.66%
70000 0.67% 3.36% 8.42% 14.04% 17.55% 17.56% 14.63% 10.45% 6.53% 3.62%
75000 0.47% 2.52% 6.76% 12.08% 16.18% 17.34% 15.48% 11.85% 7.93% 4.72%
80000 0.33% 1.88% 5.38% 10.26% 14.66% 16.75% 15.96% 13.03% 9.30% 5.90%
85000 0.23% 1.40% 4.25% 8.61% 13.07% 15.87% 16.06% 13.93% 10.57% 7.13%
90000 0.16% 1.04% 3.33% 7.15% 11.49% 14.78% 15.84% 14.54% 11.68% 8.34%
95000 0.11% 0.77% 2.60% 5.88% 9.98% 13.55% 15.33% 14.86% 12.60% 9.50%
100000 0.08% 0.56% 2.01% 4.80% 8.57% 12.25% 14.59% 14.89% 13.29% 10.55%
105000 0.06% 0.41% 1.55% 3.88% 7.29% 10.94% 13.68% 14.65% 13.74% 11.45%
110000 0.04% 0.30% 1.19% 3.12% 6.14% 9.66% 12.65% 14.20% 13.95% 12.18%
115000 0.03% 0.22% 0.91% 2.50% 5.13% 8.44% 11.55% 13.56% 13.93% 12.71%
120000 0.02% 0.16% 0.69% 1.99% 4.26% 7.30% 10.44% 12.78% 13.70% 13.04%
125000 0.01% 0.12% 0.53% 1.57% 3.51% 6.27% 9.33% 11.90% 13.28% 13.18%
130000 0.01% 0.09% 0.40% 1.24% 2.87% 5.33% 8.26% 10.96% 12.72% 13.12%
135000 0.01% 0.06% 0.30% 0.97% 2.34% 4.51% 7.25% 9.98% 12.04% 12.90%
140000 0.00% 0.05% 0.23% 0.75% 1.89% 3.78% 6.30% 9.01% 11.26% 12.52%
145000 0.00% 0.03% 0.17% 0.59% 1.52% 3.15% 5.44% 8.06% 10.43% 12.01%
150000 0.00% 0.02% 0.13% 0.45% 1.22% 2.61% 4.67% 7.15% 9.57% 11.40%
155000 0.00% 0.02% 0.09% 0.35% 0.97% 2.15% 3.97% 6.29% 8.71% 10.71%
160000 0.00% 0.01% 0.07% 0.27% 0.77% 1.77% 3.36% 5.50% 7.85% 9.97%
165000 0.00% 0.01% 0.05% 0.21% 0.61% 1.44% 2.83% 4.77% 7.03% 9.21%
170000 0.00% 0.01% 0.04% 0.16% 0.48% 1.17% 2.37% 4.11% 6.24% 8.43%
175000 0.00% 0.00% 0.03% 0.12% 0.38% 0.95% 1.97% 3.52% 5.51% 7.65%
180000 0.00% 0.00% 0.02% 0.09% 0.30% 0.76% 1.63% 3.00% 4.83% 6.90%
185000 0.00% 0.00% 0.02% 0.07% 0.23% 0.61% 1.35% 2.54% 4.20% 6.17%
190000 0.00% 0.00% 0.01% 0.05% 0.18% 0.49% 1.11% 2.15% 3.64% 5.49%
195000 0.00% 0.00% 0.01% 0.04% 0.14% 0.39% 0.90% 1.80% 3.14% 4.85%
200000 0.00% 0.00% 0.01% 0.03% 0.11% 0.31% 0.74% 1.50% 2.69% 4.27%
ミトコンドリア・シミュレータ その3 へ戻る
ミトコンドリア・シミュレータ その5 へ
(↓にまだ、続きがあります)
では、これらの計算をしたスクリプトを紹介しておきます。
計算方法は nifty:FREKI/MES/14/2107 で早傘さんに教えてもらった次の
方法です。
》;(1) 計算式はどうなっているのでしょうか?。
》
》変異の発生頻度 7/10^8(変異/座位/年) に
》500座位を掛けて 35/10^6(変異/年)
》1世代28年として 35*28/10^6=0.00098(変異/世代)
》端数を丸めて 0.001(変異/世代)とする
》
》a世代の間にb回の変異が起こる確率は、
》
》combin(a,b)*0.001^b*0.999^(a-b)
》###( combin(a,b) は、a個からb個を取出す"組合せ")###
》
》同一先祖に由来する2者のC年後の異なり字数を計算する場合
》
》a=C*2/28=C/14 として計算することになりますが、僕の場合は、
》aを切りのよい数にして、C=14a として表を作成しました(だから1400年の倍数
》になっている)
》
》;(2)1000年(できれば500年)単位で、2万年くらいまでを計
》; 算した表を突くっていただけないでしょうか?。
》
》以上の計算式をワークシートに設定すれば、いくらでも表が作れると思います
》
》;(3)下の表では、横軸の合計が100%になっていますが(分岐時期
》; から変異数を推定する方法)、縦軸の合計が100%になるように
》; はできないでしょうか?。(変異数から分岐時期を推定する方法)。
》
》まずは、確率が十分に小さくなるまで長い年数まで、表を縦に伸ばす。(異なり
》字数1の場合は7000世代程度で十分か。理想は1世代刻みだが、面倒なので、僕は
》確率の変化が少ないところでは200世代刻み、変化が多いところでは50世代刻みに
》しました)
》
》縦の合計を出し、(刻みが一定でない場合は、重みを付けて集計する)
》それで、各年代の確率を割り、範囲で集計すれば各期間の確率が計算でき
》ます。
--
#!ruby
$fact_data = { 0 => 1 }
def fact100(n)
f = $fact_data[n]
return f if f
f = n * fact(n-1)
$fact_data.store( n,f )
return f
end
def fact(n)
return 1 if n == 0
f = 1
while n>0
return f*fact100(n-1) if ( n % 100 ) == 1
f *= n
n -= 1
end
return f
end
def combin(a,b) ## combination
fact(a,b)/fact(a-b)
end
##a世代の間にb回の変異が起こる確率は、
##
##combin(a,b)*0.001^b*0.999^(a-b)
###( combin(a,b) は、a個からb個を取出す"組合せ")###
def heni(a,b)
combin(a,b)*(0.00098**b)*(0.99902**(a-b))
end
def heni_str(nen,sedai)
format( "%6.2f%" , (heni( nen/14 , sedai)*100.0) )
end
##for nen in [2800,5600,11200,16800]
for i in 1..20
nen = i*5000
print "%6d" % nen
for sedai in 0..8
print heni_str( nen,sedai)
end
puts
end
--
これを実行すると、一番下の横方向の分布表が出てきます。
横方向の分布表を初期データとして、縦方向の分布表、累積表を出したの
は次のスクリプトです。
--
#!ruby
require "phi" ; include Phi
s = <<EOS
5000 69.96% 25.00% 4.45% 0.53% 0.05% 0.00% 0.00% 0.00% 0.00% 0.00%
10000 48.95% 34.99% 12.48% 2.97% 0.53% 0.08% 0.01% 0.00% 0.00% 0.00%
15000 34.25% 36.72% 19.66% 7.01% 1.87% 0.40% 0.07% 0.01% 0.00% 0.00%
20000 23.96% 34.25% 24.46% 11.64% 4.15% 1.18% 0.28% 0.06% 0.01% 0.00%
25000 16.76% 29.95% 26.75% 15.91% 7.10% 2.53% 0.75% 0.19% 0.04% 0.01%
30000 11.73% 25.15% 26.95% 19.24% 10.30% 4.41% 1.57% 0.48% 0.13% 0.03%
35000 8.20% 20.52% 25.66% 21.39% 13.36% 6.68% 2.78% 0.99% 0.31% 0.09%
40000 5.74% 16.40% 23.45% 22.34% 15.95% 9.11% 4.34% 1.77% 0.63% 0.20%
45000 4.01% 12.91% 20.76% 22.25% 17.88% 11.49% 6.15% 2.82% 1.13% 0.40%
50000 2.81% 10.04% 17.93% 21.36% 19.07% 13.62% 8.10% 4.13% 1.84% 0.73%
55000 1.96% 7.72% 15.18% 19.89% 19.53% 15.35% 10.04% 5.63% 2.76% 1.20%
60000 1.37% 5.90% 12.64% 18.06% 19.36% 16.59% 11.85% 7.25% 3.88% 1.85%
65000 0.96% 4.47% 10.38% 16.07% 18.65% 17.32% 13.40% 8.88% 5.15% 2.66%
70000 0.67% 3.36% 8.42% 14.04% 17.55% 17.56% 14.63% 10.45% 6.53% 3.62%
75000 0.47% 2.52% 6.76% 12.08% 16.18% 17.34% 15.48% 11.85% 7.93% 4.72%
80000 0.33% 1.88% 5.38% 10.26% 14.66% 16.75% 15.96% 13.03% 9.30% 5.90%
85000 0.23% 1.40% 4.25% 8.61% 13.07% 15.87% 16.06% 13.93% 10.57% 7.13%
90000 0.16% 1.04% 3.33% 7.15% 11.49% 14.78% 15.84% 14.54% 11.68% 8.34%
95000 0.11% 0.77% 2.60% 5.88% 9.98% 13.55% 15.33% 14.86% 12.60% 9.50%
100000 0.08% 0.56% 2.01% 4.80% 8.57% 12.25% 14.59% 14.89% 13.29% 10.55%
105000 0.06% 0.41% 1.55% 3.88% 7.29% 10.94% 13.68% 14.65% 13.74% 11.45%
110000 0.04% 0.30% 1.19% 3.12% 6.14% 9.66% 12.65% 14.20% 13.95% 12.18%
115000 0.03% 0.22% 0.91% 2.50% 5.13% 8.44% 11.55% 13.56% 13.93% 12.71%
120000 0.02% 0.16% 0.69% 1.99% 4.26% 7.30% 10.44% 12.78% 13.70% 13.04%
125000 0.01% 0.12% 0.53% 1.57% 3.51% 6.27% 9.33% 11.90% 13.28% 13.18%
130000 0.01% 0.09% 0.40% 1.24% 2.87% 5.33% 8.26% 10.96% 12.72% 13.12%
135000 0.01% 0.06% 0.30% 0.97% 2.34% 4.51% 7.25% 9.98% 12.04% 12.90%
140000 0.00% 0.05% 0.23% 0.75% 1.89% 3.78% 6.30% 9.01% 11.26% 12.52%
145000 0.00% 0.03% 0.17% 0.59% 1.52% 3.15% 5.44% 8.06% 10.43% 12.01%
150000 0.00% 0.02% 0.13% 0.45% 1.22% 2.61% 4.67% 7.15% 9.57% 11.40%
155000 0.00% 0.02% 0.09% 0.35% 0.97% 2.15% 3.97% 6.29% 8.71% 10.71%
160000 0.00% 0.01% 0.07% 0.27% 0.77% 1.77% 3.36% 5.50% 7.85% 9.97%
165000 0.00% 0.01% 0.05% 0.21% 0.61% 1.44% 2.83% 4.77% 7.03% 9.21%
170000 0.00% 0.01% 0.04% 0.16% 0.48% 1.17% 2.37% 4.11% 6.24% 8.43%
175000 0.00% 0.00% 0.03% 0.12% 0.38% 0.95% 1.97% 3.52% 5.51% 7.65%
180000 0.00% 0.00% 0.02% 0.09% 0.30% 0.76% 1.63% 3.00% 4.83% 6.90%
185000 0.00% 0.00% 0.02% 0.07% 0.23% 0.61% 1.35% 2.54% 4.20% 6.17%
190000 0.00% 0.00% 0.01% 0.05% 0.18% 0.49% 1.11% 2.15% 3.64% 5.49%
195000 0.00% 0.00% 0.01% 0.04% 0.14% 0.39% 0.90% 1.80% 3.14% 4.85%
200000 0.00% 0.00% 0.01% 0.03% 0.11% 0.31% 0.74% 1.50% 2.69% 4.27%
EOS
a = []
s.each{|line|
if /^\D*(\d+)\D+(\d+\.\d+)\D+(\d+\.\d+)\D+(\d+\.\d+)\D+(\d+\.\d+)\D+(\d+\.\d+)\D+(\d+\.\d+)\D+(\d+\.\d+)\D+(\d+\.\d+)/ =~ line
a << [$2, $3, $4, $5, $6, $7, $8, $9].collect{|s| s.to_f }
end
}
sums = [0,0,0,0,0,0,0,0]
maxs = [0,0,0,0,0,0,0,0]
a.each{|arr|
arr.each_with_index{ |val,i|
sums[i] += val
maxs[i] = val if val > maxs[i]
}
}
b = []
c = []
d = [0,0,0,0,0,0,0,0]
h = []
a.each{ |arr|
f = []
g = []
arr.each_with_index{ |val,i|
e = val / sums[i]
d[i] += e
f << e
g << val / maxs[i]
}
b << f
c << d.dup
h << g
}
def dsp a
a.each_with_index{ |aa,i|
nen = (i+1)*5000
print "nen %6d : " % nen
print aa.collect{|n| "%6.2f " % (n*100.0) } , "\n"
}
end
dsp b
dsp c
dsp h
ミトコンドリア・シミュレータ その3 へ戻る
ミトコンドリア・シミュレータ その5 へ