要約
中心極限定理は偶然性の法則の一つで「一定の条件下で、Xの母集団分布が何であっても、Xの平均は正規分布に従う」という法則です。
・「Xの母集団分布が何であっても」という非常にゆるい条件で
・「平均は正規分布に従う」という非常に有用な知見をもたらす
ので、中心極限定理はすごいです。
全体像
(1)問題の構造
問い「中心極限定理は、すごい法則なのか?」は次のように分解できます。
①中心極限定理とは
②すごい法則の判断基準とは
③中心極限定理の判断基準に合致するのか
(2)前提の選択
①②を前提として選択します。
(3)論点の選択
③を論点とします。
(4)付録一覧
冗長さを避けて、可読性を上げるために、以下の内容は付録に回します。
「平均が正規分布しない場合」「Rコード」
前提
①中心極限定理とは
中心極限定理とは、簡単に言えば「平均は正規分布に従う」です。詳しくは
$$母平均\mu、母分散\sigma^2(有限)の$$
$$同一の母集団分布に独立に従う$$
$$n個の確率変数Xの平均\overline{X}=\frac{1}{n}\sum_{i=1}^n X_i$$
$$の分布は、母平均μ、母分散\frac{\sigma^2}{n}の大略正規分布$$
$$N \left(\mu, \sqrt{\frac{\sigma^2}{n}} \right)に従う$$
$$ただし、nは十分に大きい$$
です。
②すごい法則の判断基準とは
すごい法則はいろんな定義が可能ですが、ここでは
・有用性:結論がためになる
・ゆるい制約条件:いろんな場面が使用可能
の二つを高い水準で満たしていると、すごい法則とみなすことにします。
方法
論点は「中心極限定理の判断基準に合致するのか」ですが、これを
・中心極限法則の分析
・シミュレーションによる検証
によって考えます。
結果
(1)法則の分析
有用性
中心極限定理は、平均についての定理です。
この平均ですが、分布を表す上で最も基本的、かつ、最も使われるパラメーターです。
そのため、中心極限定理は非常に有用な可能性を秘めています。
実際に、中心極限定理は、仮説検定、信頼区間を考える上で、つまりは、統計学を構築する上で、欠けてはならない存在です。
ゆるい制約条件
中心極限定理は「ある条件下で、確率Xの平均は正規分布に従う」というものですが、
・確率変数Xの母集団分布はなんでもよい
のです。これは非常にゆるい条件です。
まとめ
つまり、中心極限定理はすごい法則です。
(2)シミュレーションによる検証
「シミュレーションして、母集団分布が正規分布、カイ二乗分布、二峰分布、三峰分布であっても、平均は正規分布に従うか」を検証します。
もし平均が正規分布に従う場合は、中心極限定理はすごいでしょう。
シミュレーションの手順は、次のとおりです。
第一に、母集団サイズ10万個の母集団を生成します。母平均と母分散が確定します。
第二に、サンプル・サイズ5000の標本を無作為抽出します。
第三に、標本から標本平均を計算します。
第四に、第二と第三を1万回繰り返して、標本平均の分布を作ります。
第五に、標本平均の分布を正規分布と比較します。
母集団分布が正規分布の場合
まず最初に、正規分布に従う確率変数Xの平均の分布を調べます。もちろん、正規分布の平均は、正規分布だと思いますが、念の為に調べます。
母平均100、母分散100の正規分布に従うデータを10万個生成し、母集団としました。↓

母集団からサンプル・サイズ5000の標本を1万回抽出し、標本平均を1万回計算しました。
得られた標本平均の1万個の分布がピンクです。黒は、中心極限定理が予測する正規分布です。両者は重なっているといえるでしょう。↓

母集団分布がカイ二乗分布の場合
次に、カイ二乗分布に従う確率変数Xの平均の分布を調べます。カイ二乗分布は、右側の裾が広い分布です。このような場合でも、平均の分布は正規分布に従うのでしょうか?
そこで、カイ二乗分布(自由度5)に従うデータを10万個生成し、母集団としました。この母集団は正規分布と異なり、右の裾が長くなっています。↓

母集団からサンプル・サイズ5000の標本を1万回抽出し、標本平均を1万回計算しました。
得られた標本平均の1万個の分布がピンクです。黒は、中心極限定理が予測する正規分布です。両者は重なっているといえるでしょう。むむむ。↓

母集団分布が二峰型の分布の場合
第三に、二峰型の正規分布に従う確率変数Xの平均の分布を調べます。正規分布もカイ二乗分布も、峰が一つしかありません。もしかしたら、二峰型の場合、正規分布に従わないかもしれません。確かめてみましょう。
そこで、二峰型の分布に従うデータを10万個生成し、母集団としました。↓

得られた標本平均の分布が下図です。これは正規分布ですね…↓

母集団分布が三峰型の分布の場合
最後に、三峰型の正規分布に従う確率変数Xの平均の分布を調べます。
三峰型の分布に従うデータを10万個生成し、母集団としました。↓

得られた標本平均の分布が下図です。正規分布です!↓

考察
(1)結論
Xの母集団分布が
- 正規分布
- カイ二乗分布
- 二峰型分布
- 三峰型分布
でも、Xの平均は正規分布に従いました。少々論理的に飛躍しますが
- 一定の条件下で「Xの母集団分布が何であっても」Xの平均は正規分布に従う
と言ってよいでしょう。
ゆるい条件で成り立つので、中心極限定理はすごいです。
(2)妥当性評価
中心極限定理は母集団分布について仮定のない定理です。ただし、さきほどのシミュレーションでは「一定の条件」
- 母平均と母分散は有限
- 同一の母集団分布
- 独立
- nは十分に大きい
が、暗黙のうちに仮定されていました。この条件に違反した場合にどうなるかは「付録1」に載せました。
(3)意義
統計学では、正規分布を基礎にしている手法(t検定、カイ二乗検定など)が多いです。
中心極限定理があれば、Xの母集団分布が不明でも「平均は正規分布に従う」と言えますから、これらの検定が使えるわけです。
付録1:平均が正規分布しない場合
(1)有限の違反
確率変数Xが有限の母平均、母分散ではない場合、中心極限定理は使えません。
ベキ分布など、有限の母平均、母分散がない分布は存在します。
(2)同一性の違反
確率変数Xが従う分布は、同じでないといけません。同一でない場合には
・パターン1:標本抽出に偏りがある
・パターン2:標本抽出が非復元抽出
の2パターンがあります。
パターン1:標本抽出に偏り
標本抽出に偏りがあるのなら、中心極限定理は使えません。例えば
・母集団が10万人(男5万人、女5万人)
・身長の母平均165cm
のときを考えましょう。

何を間違ったのか男性からしか標本抽出できなかったとします。このとき、平均の分布(ピンク)と中心極限定理が導く正規分布には大きな差が生まれてしまいます。↓

パターン2:標本抽出が非復元抽出
標本抽出が非復元抽出の場合、つまり
・取った標本を母集団に戻さない抽出方法
のとき、母集団の同一性が保たれません。なぜなら、標本抽出する度に、母集団が変わっていってしまうからです。
例えば、母集団がA、B、C、D、Eさんだとします。ここからのランダムに選び、Aさんの身長を測ったとします。非復元抽出の場合、2人目の母集団はB、C、D、Eになり、もともとの母集団と異なります。
最初と同じように、母平均100、母分散100の正規分布に従うデータを10万個生成し、母集団としました。↓

母集団からサンプル・サイズ9万個を1万回非復元抽出し、標本平均を1万回計算しました。
その結果が下図です。中心極限定理が導く分布より、標本平均の分散が小さくなっています。

※母集団サイズが大きく、サンプル・サイズが小さいときは、非復元抽出でも実質的には問題ないです。母集団サイズが大きくても、サンプル・サイズも大きいときは、問題が生まれます。その例が上です。
(3)独立性の違反
中心極限定理は、互いの確率変数Xが独立であることも必要です。独立とは
$$P(X_iかつX_j)=P(X_i) \times P(X_j) $$
$$iとj:1〜nから得られる全ての組み合わせ ただしi≠j$$
という意味で、Xiがなんであっても、Xjが起きる確率は変わらないという意味です。
これが違反されると、中心極限定理は使えません。
(4)十分なnの違反
nが小さい場合、平均の分布は正規分布に従いません。サンプル・サイズが1から4のときでシミュレーションした結果が下です。↓

n=4になるとだいぶ正規分布に従ってしまいますけどね!笑
付録2:Rコード
①母集団サイズ10万の母集団を作成します。↓
#母集団の作成 正規分布
population_size <- 100000
x <- rep(NA, population_size)
for(i in 1:population_size){
x[i] <- rnorm(1, 100, 10)
}
data0 <- data.frame(x)
②標本を1万回生成し、標本平均を1万回計算します↓
#標本平均の分布
trial_number <- 10000
sample_size <- 5000
mean_0 <- rep(0, trial_number)
for(i in 1:trial_number){
s <- sample(data0$x, sample_size, replace = FALSE) #無作為抽出
mean_0[i] <- mean(s) #平均の計算
}
data00 <- data.frame(mean_0)
③作図します↓
#パッケージの呼び出し。
library(ggplot2)
#母集団の分布
ggplot(data0, aes( x = x )) +
geom_histogram(bins=80,colour="white", fill = "skyblue2")+
xlab("変数X") +
ylab ("度数") +
ggtitle ("変数Xのヒストグラム") +
theme_grey(base_family = "HiraKakuPro-W3")
#標本平均の分布
ggplot(data00, aes( x = mean_0)) +
geom_histogram( bins=80,aes( y = ..density.. ),colour="white", fill = "pink2")+
stat_function(fun = dnorm, args=list(mean=mean(data0$x), sd=sqrt((var(data0$x))/sample_size)))+
xlab("変数Xの平均") +
ylab ("確率密度") +
ggtitle ("平均のヒストグラムと正規分布") +
theme_grey(base_family = "HiraKakuPro-W3")
他の母集団分布はこちらを使ってください。②と③は同じコードでいけます。↓
#母集団の作成 一様分布
population_size <- 100000
x <- rep(NA, population_size)
for(i in 1:population_size){
x[i] <- runif(1,20,80)
}
data0 <- data.frame(x)
#母集団の作成 カイ二乗分布df=5
population_size <- 100000
x <- rep(NA, population_size)
for(i in 1:population_size){
x[i] <- rchisq(1, 5)
}
data0 <- data.frame(x)
#母集団の作成 二峰型
population_size <- 100000
x <- rep(NA, population_size)
for(i in 1:population_size){
x[i] <- ifelse(i < 40000,rnorm(1,40,6) , rnorm(1,60,6))
}
data0 <- data.frame(x)
#母集団の作成 三峰分布
population_size <- 100000
x <- rep(NA, population_size)
for(i in 1:population_size){
x[i] <- ifelse(i < 10000,rnorm(1,30,6) ,
ifelse(i < 50000, rnorm(1,50,3),rnorm(1,70,6)))
}
data0 <- data.frame(x)
付録1の身長シミュレーションについて↓
#身長データの作成
population_size <- 100000
x <- rep(NA, population_size)
male_d <- rep(NA, population_size)
for(i in 1:population_size){
x[i] <- ifelse(i < 50000,rnorm(1,158,5) , rnorm(1,172,6))
male_d[i] <- ifelse(i < 50000,"女", "男")
}
data0 <- data.frame(x,male_d)
#男のみデータの作成
x_male <- data0[data0$male_d=="男" ,]$x
data00 <- data.frame(x_male)
#身長のヒストグラム作成
ggplot(data0, aes( x = x ,fill=male_d)) +
geom_histogram(bins=40,position = "stack",colour="white",alpha=0.8)+
xlab("身長") +
ylab ("度数") +
ggtitle ("身長のヒストグラム") +
theme_grey(base_family = "HiraKakuPro-W3")
#標本抽出
trial_number <- 10000
sample_size <- 50
mean_0 <- rep(0, trial_number)
for(i in 1:trial_number){
s <- sample(data00$x_male, sample_size, replace = FALSE) #無作為抽出
mean_0[i] <- mean(s) #平均の計算
}
#平均の分布
data00 <- data.frame(mean_0)
ggplot(data00, aes( x = mean_0)) +
geom_histogram( bins=80,aes( y = ..density.. ),colour="white", fill = "pink2")+
stat_function(fun = dnorm, args=list(mean=mean(data0$x), sd=sqrt((var(data0$x))/sample_size)))+
scale_x_continuous(limits = c(160, 175))+
xlab("身長の平均") +
ylab ("確率密度") +
ggtitle ("標本平均と正規分布") +
theme_grey(base_family = "HiraKakuPro-W3")
コメント欄 お気軽にコメントをお寄せください!