高校数学をプログラミングで解く(数学B編)「4-9 標本平均の分布」
マガジンリスト > 数学B編 4.確率分布と統計的な推測 > 4-9 標本平均の分布
はじめに
今回は、数学Bで学ぶ「標本平均の分布」について、大数の法則が成り立っているかどうかを確かめるためのプログラムを作成して、実際に確かめてみます。
標本平均の分布
まず、標本平均の分布、大数の法則について解説しておきます。
標本平均$${\bar{X}}$$の分布
母平均$${m}$$、母標準偏差$${\sigma}$$の母集団から大きさ$${n}$$の無作為標本を抽出するものとする。
①標本平均$${\bar{X}}$$の期待値、標準偏差
$$
E(\bar{X})=m, \ \ \sigma(\bar{X})=\frac{\sigma}{\sqrt{n}}
$$
②標本平均$${\bar{X}}$$の分布
母集団が正規分布$${N(m,\sigma^2)}$$に従うときは、$${\bar{X}}$$も正規分布に従い、どのような母集団でも、$${n}$$が大きいときは、正規分布$${N(m, \sigma^2/n)}$$に従う。
大数の法則
母平均$${m}$$の母集団から大きさ$${n}$$の無作為標本を抽出するとき、その標本平均$${\bar{X}}$$は、$${n}$$が大きくなるに従って、母平均$${m}$$に近づく。
大数の法則を確かめる
今回は大数の法則が成り立つことを確かめてみます。
確認方法
$${a}$$を正の整数として$${0}$$以上$${a}$$未満の実数を母集団とします。この母集団の母平均は、$${m=a/2}$$となります。
この母集団から大きさ$${n}$$の無作為標本を抽出してその標本平均$${\bar{X}}$$を計算します。この試行を trails_num 回繰り返し実施して、その trails_num 個の結果をもとに、階級の幅を$${1}$$としてヒストグラムを作成します。もし、大数の法則が成り立つのであれば、ヒストグラムは$${n}$$が大きくなるに従って$${m=a/2}$$にピークが立つグラフになっていくはずです。
ランダム関数
今回、$${0}$$以上$${a}$$未満の実数から無作為標本を抽出しますが、そのために random 関数を利用します。
float random(a);
このランダム関数は、0 以上 a 未満の実数から1つの実数値をランダムに返す関数となります。
以下のプログラムではこの random 関数を利用します。
プログラム
では、大数の法則を確かめるためにヒストグラムを描くプログラムを作成していきます。
// 大数の法則を確かめる
void setup(){
size(500,200);
translate(0,height);
scale(1,-1);
// 標本数
int n = 100;
// 母集団の上限
int a = width;
// 試行回数
int trials_num = 1000000;
// 度数の幅が1のときの標本平均の数を表す配列
int[] sample_mean_num = new int[a];
for(int i=0; i<a; i++){
sample_mean_num[i] = 0;
}
float x_mean;
for(int i=0; i<trials_num; i++){
// 標本平均の計算
x_mean = 0;
for(int j=0; j<n; j++){
x_mean = x_mean + random(a);
}
x_mean = x_mean / n;
// 計算した標本平均の値が入る度数を1増やす
sample_mean_num[int(x_mean)] = sample_mean_num[int(x_mean)] + 1;
}
// ヒストグラムを描く
for(int i=0; i<a; i++){
line(i, 0.0, i, (float)sample_mean_num[i] * height / trials_num * 3.0);
}
}
ソースコード1 大数の法則を確かめるためにヒストグラムを描くプログラム
大数の法則の確認
このソースコード1を、Processingの開発環境ウィンドウを開いて(スケッチ名を「LawofAverages」としています)、テキストエディタ部分に書いて実行します。
なお、今回は$${a}$$をキャンバスの幅 width(=500)と同じにしています。そのため、母平均は$${m=250}$$となります。また、試行回数 trials_num は 1000000 回にしました。
最初、$${n=100}$$として実行すると、図1のようにキャンバス上にヒストグラムが描かれます。
図1をみると、母平均$${m=250}$$のあたりにピークが見えますが、少し大きな広がりをもったピークとなっています。
次に、$${n=1000}$$として実行すると、図2のようになります。
図1($${n=100}$$)のときよりも$${m=250}$$のあたりのピークが先鋭化されていることがわかります。
最後に、$${n=10000}$$として実行すると、図3のようになります。
図2($${n=1000}$$)のときよりもさらに$${m=250}$$のあたりのピークが先鋭化されていることがわかります。
つまり、図1($${n=100}$$)から図3($${n=10000}$$)へのヒストグラムの変化をみると、標本平均$${\bar{X}}$$は、$${n}$$が大きくなるに従って、母平均$${m=250}$$に近づいていることがわかります。
まとめ
今回は、数学Bで学ぶ「標本平均の分布」について、大数の法則が成り立っているかどうかを確かめるためのプログラムを作成して、実際に確かめてみました。
実際に、標本平均を算出するときの標本数$${n}$$が大きくなるにつれて、母平均$${m}$$のあたりにピークをもつ標本平均の値のヒストグラムは、どんどん先鋭化されていきました。これは、標本平均$${\bar{X}}$$が、母平均$${m}$$に近づいていることを表しています。
今回は、一様分布に基づいて無作為標本を抽出しましたが、どんな確率分布であっても、$${n}$$を大きくするにつれて、標本平均$${\bar{X}}$$は母平均$${m}$$に近づいていきます。もし機会があれば、一様分布以外の確率分布でも大数の法則が成り立つことを確かめてみてください。
参考文献
改訂版 教科書傍用 スタンダード 数学B(数研出版、ISBN9784410209468)