医療職からデータサイエンティストへ

統計学、機械学習に関する記事をまとめています。

中心極限定理って結局何なのさ

中心極限定理とは、統計学を学び始めると必ずお目にかかる定理なのですが、安直に理解していると大変な勘違いをしてしまう定理です。しかし、いざ理解しようとしても、解説には難解なものも多くイメージしにくいのもまた現状です。今回はそんな中心極限定理について、直感的にイメージしやすくしてみます。

森のうさぎの平均体重は何キロ?

さて、数式を使っての解説は至るところにありますので、ここでは代わりにうさぎを使って解説していきます。 あなたは動物学者です。ある森の生態調査のために、その森に住むうさぎの平均体重を調べることになりました。

この森には約10万匹のうさぎが生息し、すべてを捕まえることはできないので、とりあえず5匹を捕まえて体重を測ってみました。すると 7kg,、3kg、25kg、6kg、29kg、平均14kgとなりました。

しかし、もっと精確に調査をする必要があるため、5匹を捕まえて平均体重を計算する作業をあと4回ほど行いました。その結果が以下になります。

Caputure_1 Caputure_2 Caputure_3 Caputure_4 Caputure_5
1 7 3.0 6.0 9 2.0
2 3 14.0 29.0 31 5.0
3 25 32.0 25.0 10 27.0
4 6 15.0 7.0 33 42.0
5 29 37.0 7.0 27 11.0
平均 14 20.2 14.8 22 17.4

調査のたびに結構なバラつきがありそうですね。これはさらなる調査が必要みたいです。あなたは、さらに5匹を捕まえて平均体重を記録する作業を1000回ほど行い、ヒストグラムにしてみました。すると、

中心極限定理

バラつきはありますが、どうやら17~18kgを中心とした正規分布になっているようで、この平均あたりが森のウサギの平均体重としては妥当そうです。

ここで、中心極限定理のよくある誤った解釈として、"捕まえるウサギの数を増やすほど、その体重の分布は正規分布に従う"という勘違いです。そもそも中心極限定理とは、母集団がどんな分布であっても、そこから抽出したサンプルの平均値は、真の平均値を中心とした正規分布となるというものです。ここで重要なのは、サンプルの平均値が正規分布となるのであって、サンプルが正規分布になる訳ではありません。

中心極限定理

仮に、森のうさぎ10万匹を全部をつかまえられたとして、ヒストグラムにしてみると、

中心極限定理

5kgと30kgのところで二峰性の分布になっている全く正規分布ではない分布になります。しかし、不思議なことに数匹を捕まえた平均値は、真の平均値を中心とした正規分布となるのです。(ちなみに真の平均値は約17kgです。)また、重要なこととして、中心極限定理によってできあがる正規分布は、分散が

母集団の分散/平均をとるサンプル数

となります。先ほどの結果と比べてみると、森の全うさぎの分散が134、5匹を捕まえた平均値の分散が27なので、およそあっていますね(実際にやってみたい方は下記にRのコードを置いてあります)。実はこれを使うことで、古典的な統計学の検定を行うことが出来るため、中心極限定理は統計学に出てくるのです。統計検定に関する基本的な内容は以下をご参照ください。

www.medi-08-data-06.work

大数の法則と中心極限定理

中心極限定理とよく混同されやすいものとして、大数の法則があります。これは、サンプル数が多いほど、標本平均は母平均に近づくというものです。

例えば、5匹のうさぎ の平均値は、捕まえる試行によってかなりばらつきがありました。それもそのはずで、5匹しか捕まえないので、たまたま小さいうさぎ ばかりを捕まえたり、その逆もあったりする確率が高いからです。それでは、1万匹のうさぎ を捕まえたときの平均体重はどうでしょうか?たまたま小さなうさぎ を一万匹捕まえる確率はかなり低くなりますよね。極端な話を言えば、森のうさぎを全部捕まえたときの平均体重は、森の全うさぎ の平均体重(母平均)になります。

試しに、捕まえる数を5匹、15匹、25匹...と10匹ずつ増やしながら、平均体重を測った結果が以下になります。

中心極限定理

捕まえる数が多くなるにつれて、母平均との誤差が小さくなり、1万匹あたりになると、ほとんど誤差なくサンプルの平均体重が母平均である17kgになっていますね。

まとめ

今回は、統計学の初期段階で勘違いしやすい中心極限定理と大数の法則についてまとめました。直感的なイメージを最優先にしたため、厳密性には欠けるかもしれませんが、この辺りを理解しておくと統計仮説検定の理解がグッと深まります!

※本記事は筆者が個人的に学んだことをまとめた記事なります。所属する組織の意見・見解とは無関係です。また、数学の記法や詳細な理論、用語等で誤りがあった際はご指摘頂けると幸いです。

参考

今回の記事はこちらの動画をオマージュしたものです。(英語ですがとてもわかりやすく、かわいいです)

CreatureCast - Central Limit Theorem on Vimeo

今回のRソースコード

# 二峰生の分布を作るため、対数正規分布と正規分布を混ぜ合わせた確率分布をつkる

set.seed(10)
gene <- function(n){
   prob <- (runif(n) <= 0.6)  # 確率0.6で片方の分布を採択
   rlnorm(n,2,0.5) *prob+rnorm(n,30,5)*(1-prob) 
}

#10万匹を生成
usagi_all <-  round(gene(100000))


hist(usagi_all,xlim=c(0,60),main ="森の全ウサギヒストグラム",xlab="体重(kg)",ylab="数",breaks=seq(0,10000,1))
abline(v=mean(usagi_all),col="red",lwd=2)
text(x=40 ,y=5000,labels = str_c("平均",round(mean(usagi_all)),"kg"),cex=2,col="red")

#5匹捕まえる
set.seed(10)
usagi <- sample(usagi_all,5,replace = FALSE)

#5回繰り返す。
set.seed(10)
usagi_data <- data.frame(matrix(nrow = 6,ncol = 5,data = vector()),row.names =c(seq(1,5),"平均") )
colnames(usagi_data) <- str_c("Caputure_",seq(1,5))
for(i in 1:5){
  usagi <- sample(usagi_all,5,replace = FALSE)
  usagi <- c(usagi,mean(usagi))
  usagi_data[,i] <- usagi
}

#1000回繰り返す
mean_weigth <- c()
set.seed(10)
for(i in 1:1000){
  usagi <- sample(usagi_all,5,replace = FALSE)
  mean_weigth <- c(mean_weigth,mean(usagi))
}
hist(mean_weigth,breaks = seq(0,40,1),main ="森のウサギヒストグラム",xlab="平均体重(kg)",ylab="捕まえた回数",col="green")

#大数の法則
set.seed(10)
usagi_num <- seq(5,10000,10)
mean_weight2 <- map_dbl(usagi_num,function(n) mean(sample(x=usagi_all,n,replace = FALSE)))

plot(usagi_num,mean_weight2,type="l",main ="大数の法則",ylab="平均体重(kg)",xlab="捕まえた数",col="deepskyblue")
abline(h=mean(usagi_all),col="red",lwd=2)