これら10都道府県にある映画館の合計スクリーン数の平均は「93.8」でした。この「93.8」を47都道府県(=母集団)の平均値(つまり母平均)と見なしてしまおう、とするのが母平均の点推定です。やや強引な感じがしますが、17-2章 大数の法則で学んだ「標本平均の期待値は母平均と一致する」という性質を用いています。(18-2. 母平均の点推定と推定量・推定値 | 統計学の時間 | 統計WEB https://bellcurve.jp/statistics/course/8610.html )
大数の法則とは
Wikipediaによると、大数の法則とは
大数の法則(たいすうのほうそく、英: law of large numbers)は、確率論・統計学における極限定理のひとつで、「経験的確率と理論的確率が一致する」 という、素朴な意味での確率を意味付け、定義付ける法則である。
らしい。試行回数を増やしていくと、標本の確率と母集団の確率が一致するということなんだろう。例えばサイコロで1の目が出る確率は1/6、でも実際6回振ってみたら、1が一回も出てこないということもあり得る。だけど、試行回数を増やせば、理論値である1/6に近づくよね。という話らしい。
シミュレーションしてみる。
いうて教材は母校の授業で使ったものだけど。
Rによる大数の法則のシミュレーション
さて、実際にサイコロの目で大数の法則をシミュレーションしてみる。
おおまかな流れとしてはこんな感じ。
(1) サイコロを振り、1,2,3,4,5,6が出る数を調べる
(2)試行回数を10,100,1000,10000と増やしていく
(3)その時のそれぞれの出る目の確率を計算する
ソースコードはこちら。
1 2 3 5 6
2 3 2 1 2
横軸はサイコロの目。縦軸は出現回数。そもそも出てない目すら存在している。
1 2 3 4 5 6
21 15 14 13 20 17
まだかなりギザギザしてる。
1 2 3 4 5 6
176 160 162 164 165 173
1 2 3 4 5 6
1670 1602 1687 1684 1691 1666
こんな感じで、理論的な確率分布は、標本の数を大きい数にしていくと、理論値に近づくんだね。
ソースコードはこちら。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#[1] 10回分試行する場合 | |
n = 10 | |
roll <- c("1","2","3","4","5","6") #サイコロの目を指定 | |
sample(roll, n, replace=T) #sample関数(後述) | |
table(sample(roll, n, replace=T)) #サイコロの目を、100回振ったものをtableで表示 | |
barplot(table(sample(roll, n, replace=T))) #それを棒グラフで表示 | |
#[2] 100回試行する場合 | |
n = 100 | |
roll <- c("1","2","3","4","5","6") #サイコロの目を指定 | |
sample(roll, n, replace=T) #sample関数(後述) | |
table(sample(roll, n, replace=T)) #サイコロの目を、100回振ったものをtableで表示 | |
barplot(table(sample(roll, n, replace=T))) #それを棒グラフで表示 | |
#[3] 1000回試行する場合 | |
n = 1000 | |
roll <- c("1","2","3","4","5","6") #サイコロの目を指定 | |
sample(roll, n, replace=T) #sample関数(後述) | |
table(sample(roll, n, replace=T)) #サイコロの目を、100回振ったものをtableで表示 | |
barplot(table(sample(roll, n, replace=T))) #それを棒グラフで表示 | |
#[4] 10000回試行する場合 | |
n = 10000 | |
roll <- c("1","2","3","4","5","6") #サイコロの目を指定 | |
sample(roll, n, replace=T) #sample関数(後述) | |
table(sample(roll, n, replace=T)) #サイコロの目を、100回振ったものをtableで表示 | |
barplot(table(sample(roll, n, replace=T))) #それを棒グラフで表示 |
1. n = 10 (10回サイコロを振った)の場合。
1 2 3 5 6
2 3 2 1 2
横軸はサイコロの目。縦軸は出現回数。そもそも出てない目すら存在している。
2. n = 100の場合。
1 2 3 4 5 6
21 15 14 13 20 17
まだかなりギザギザしてる。
3. n = 1000の場合。
1 2 3 4 5 6
176 160 162 164 165 173
4. n = 10000の場合
1 2 3 4 5 6
1670 1602 1687 1684 1691 1666
こんな感じで、理論的な確率分布は、標本の数を大きい数にしていくと、理論値に近づくんだね。
補足
sample関数についてはこちらを参照
[R]無作為抽出をするsample関数の使い方