須通り
Sudo Masaaki official site
For the reinstatement of
population ecology.

いっぽうソヴィエトでは鉛筆を使った。

     

ホーム | 統計 Top | 俺のRが二項分布で乱数を生成するには

二項分布に従う乱数をRで作ってみる

たとえばシミュレーションをやりたい場合、ある確率分布に従う乱数を作るのが最初の関門となる。二項分布に従う乱数をRで生成するには、標準で用意されている関数rbinom()を使うのが便利である。

rbinom(n, size, prob)

nは発生させる乱数の数(言い方を変えると観察数ないしシミュレーションの繰り返し回数)、sizeは各乱数(各観察)におけるベルヌーイ試行の回数、probは各ベルヌーイ試行における成功確率。

   
##まあ使ってみるべえ
> rbinom(50,1,0.3)
 [1] 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 1 1 0 1 0 0 0 1 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0
 
> rbinom(50,10,0.3)
 [1] 3 6 3 1 1 0 2 1 2 2 3 3 0 1 4 3 3 3 1 4 5 3 5 6 2 4 1 2 1 2 7 5 3 6 2 2 4 1 2 5 2 2 1 3 5 4 0 4 3 3
    

上の例は、10回に3回の確率でアタリが出る(すなわち当選確率0.3の)籤を1回引いては、それがアタリ(1)かハズレ(0)かを記録する(正確に言うと、籤は引いた後に戻してシャッフルする)操作を1回の観察と定義し、それを50回繰り返すのに等しい。
いっぽう下の例は、当選確率0.3の籤を10回引いてアタリが出た合計回数を記録し、それを50回繰り返すのに等しい。この場合、各観察における結果の値は0(1回もアタリが出ない)から10(10回ともアタリが出る)までの11通りを取り得るのだが、実際には全ての値が均等に出るわけではない。下に図示したように、3を中心とした山形の分布を示す。

> stem( rbinom(50,10,0.3) ) ##先の乱数を実際に発生させてみた例

  The decimal point is at the |

  0 | 0
  1 | 0000000
  2 | 00000000000
  3 | 000000000000000
  4 | 000000000
  5 | 0000000


> stem( rbinom(50,10,0.3) ) ##再度同じ手順で発生させてみた例。乱数なので、毎回同じ結果が得られるとは限らない。

  The decimal point is at the |

  0 | 0
  1 | 00000
  2 | 000000000000000
  3 | 0000000000
  4 | 000000000000000
  5 | 0000

> stem( rbinom(1000000,10,0.3) ) ##マシンパワーに物を言わせて100万回シミュレートしてみる。Core i7搭載のマシンなら、実際には1秒程度で計算できる。

  The decimal point is at the |

   0 | 00000000000000000000000000000000000000000000000000000000000000000000+28251
   1 | 00000000000000000000000000000000000000000000000000000000000000000000+121517
   2 | 00000000000000000000000000000000000000000000000000000000000000000000+233350
   3 | 00000000000000000000000000000000000000000000000000000000000000000000+266675
   4 | 00000000000000000000000000000000000000000000000000000000000000000000+200002
   5 | 00000000000000000000000000000000000000000000000000000000000000000000+102599
   6 | 00000000000000000000000000000000000000000000000000000000000000000000+36466
   7 | 00000000000000000000000000000000000000000000000000000000000000000000+8919
   8 | 00000000000000000000000000000000000000000000000000000000000000000000+1364
   9 | 00000000000000000000000000000000000000000000000000000000000000000000+53
  10 | 0000
    

お分かりいただけただろうか。ここから我々の実人生に生かすべき教訓としては、勝率3割の10番勝負で1回も勝てない事例は35回に1回程度の割合で生じ、対して10戦全勝することなど100万回に数回しか起こりえないということである。