2002年度後期
担当: 菊地
例えば、確率が半々(0.5)で表、裏が出るようなコイン投げを考えてみる。10回投げた時には、いわゆる理想的に表と裏が起これば、確率通り、5回が表、5回が裏となる。ただし、実際には、それぞれのコイン投げは独立な事象であり、必ずしも5回ずつではなく、6、4であったり、ひどい時には、10、0の場合もないとはいえない。
しかし、例えば1000回投げた場合を想像してみると、1000、0というのは、まず考えられないし、600、400ということもあまり考えにくい。だいたい、表、裏が500回前後になりそうだ、というのは、実感として受け入れやすいことである。
すなわち、投げる回数が多ければ多いほど、だいたい半々で表、裏が起こるということになる。もう少しつきつめて考えてみると、逆に、何回投げれば、表と裏が半々に出たと判断できるほど近付くのか、知りたくなってくる。このことは、実は大数の法則、中心極限定理によって示されていることである。
この実験では、上記の事象をコンピュータによってシミュレートし、大数の法則、中心極限定理で示されていることの検証を行う。このように、理論的に示されていることの中には、一見、実社会の現象と結びつかないようなことであっても、実際には、すでに常識的に理解されていることを証明しているような場合もある。
[0, 1)の一様分布に従う乱数から、確率pで1、確率(1-p)で0となるような0と1から構成されるデータをn個発生させる。なお、プログラムは、1となる確率(成功の確率)p、データの個数nを、後から容易に変更ができるように作成する。例えば、n=5として、生成したデータが{1, 0, 0, 0,1}であった場合には、5回投げて、表、裏、裏、裏、表と出たことを表すことになる。
Cを用いる場合には、一様乱数の発生は以下の手順で行う。なお、用いる計算機の言語、アプリケーションは何でもかまわない。
#include <stdlib.h>
srand48(time(NULL));
data=drand48();とすると、dataという変数に[0, 1)の区間に入る乱数がdouble型で代入される。
srand48(time(NULL))は、実行する度に乱数のシードを変更するための呼び出しである。この関数を実行しないと、毎回実行する度に同じ乱数が発生されるため、シミュレーション実験を行う場合には、通常、この関数を呼び出すことが多い。
標本分散: Xvar=((X1-Xmean)2+(X2-Xmean)2+...+(Xn-Xmean)2)/n
この時、理論的には、平均はp、分散はp(1-p)となるので、シミュレーションにより実際に求めた値と比較を行うこと。
Xmeanの平均、分散の値は、理論的にはそれぞれ、p、p(1-p)/nとなる。また、Xmeanの分散の平方根の値(標準偏差)を、標本平均の標準誤差と呼ぶ。なお、Xmeanは、平均と分散の値が計算されているだけではなく、nを大きくしていくと、中心極限定理により、その分布自体の形が平均p、分散p(1-p)/nの正規分布に近付いていくことがわかっている。