2項分布,過分散,過少分散

硬貨を投げる実験を考える。表(おもて)の出る確率を $p$ とする。このような実験をベルヌーイ試行と呼ぶ。

例えば $p=0.5$ のとき,ベルヌーイ試行を10回やってみよう。Rでシミュレーションする。

> rbinom(10, 1, 0.5)
 [1] 1 0 0 1 0 1 0 1 0 0

1 が表,0 が裏である。上の場合,10回中4回が表であった。

独立なベルヌーイ試行を $n$ 回行ったとき,表が出る回数は 0 以上 $n$ 以下の整数である。この整数の分布を,2項分布という。ベルヌーイ試行の結果は,$n=1$ の2項分布である。そのため,上でも2項分布の乱数を生成する関数 rbinom() を流用した。

rbinom(10, 1, 0.5) は,$n=1$,$p=0.5$ の2項分布の乱数を10個生成する関数である。ここで,$p$ にスカラーでなくベクトルを与えると,そのベクトルの成分を順に $p$ として使ってくれる。例えば

> rbinom(10, 1, c(0,0,0,0,0,1,1,1,1,1))

と打ち込めば,最初の5回は表が出る確率 $p=0$ の硬貨を投げ,残りの5回は表が出る確率 $p=1$ の硬貨を投げたことになる。したがって,結果は必ず

 [1] 0 0 0 0 0 1 1 1 1 1

である。だんだん表が出やすくなる硬貨をシミュレートするには,例えば

> rbinom(10, 1, (0:9)/9)

とすればよい。

さて,2項分布は,硬貨を $n$ 枚投げたときの表の枚数の分布である。どの硬貨も表が出る確率は $p$ であるとする。このとき,表の枚数の期待値(平均値)は $np$,表の枚数の分散は $np(1-p)$ であることが知られている。例えば $n=10$,$p=0.5$ なら,期待値は 5,分散は 2.5 である。これをシミュレーションで確かめよう。

> x = rbinom(1000000, 10, 0.5)
> mean(x)
[1] 4.99853
> var(x)
[1] 2.495434

このように,だいたい 5 と 2.5 になる。

これは,10枚の硬貨のどれも,表が出る確率は 0.5 とした。しかし,もし表の出る確率 $p$ がその都度変わるとしたらどうであろうか。例えば $p$ が 0 から 1 までの一様分布をする乱数だったらどうなるか。そのような一様乱数を10個作る関数は runif(10) である:

> rbinom(10, 1, runif(10))
 [1] 0 1 0 1 0 1 0 0 1 1

これの合計 sum(rbinom(10, 1, runif(10))) は,確率が等しい場合の sum(rbinom(10, 1, 0.5)) つまり rbinom(1, 10, 0.5) と同じであろうか。

まず sum(rbinom(10, 1, 0.5)) を100万回繰り返してみる:

> x = replicate(1000000, sum(rbinom(10, 1, 0.5)))
> mean(x)
[1] 5.000048
> var(x)
[1] 2.491968

これは通常の2項分布と同じである。次に sum(rbinom(10, 1, runif(10))) を100万回繰り返してみる:

> x = replicate(1000000, sum(rbinom(10, 1, runif(10))))
> mean(x)
[1] 5.000361
> var(x)
[1] 2.500273

あれ,違う結果を予想していたが,同じになってしまった。

別の想定でやってみよう。10枚の硬貨のうち5枚は表が出やすく,5枚は裏が出やすい:

> x = replicate(1000000, sum(rbinom(10, 1, c(0.2,0.2,0.2,0.2,0.2,0.8,0.8,0.8,0.8,0.8))))
> mean(x)
[1] 5.001244
> var(x)
[1] 1.602334

平均は同じであるが,分散はかなり小さくなった。これは通常の2項分布とは違うようである。このような場合を過少分散(underdispersion)という。

$p$ がランダムに変わる場合とどう違うかというと,例えば男子と女子で回答の傾向に違いがあるような質問をする場合,男女の割合を半々に固定して聞いた場合は underdispersion になるが,男女を気にせずランダムに聞いた場合は通常の2項分布になるのだ。

さらに別の想定でやってみよう。今度は,硬貨1枚ごとに確率が違うのではなく,10枚の確率は等しいが,10枚投げるごとに確率が変わるとしよう:

> x = replicate(1000000, sum(rbinom(10, 1, runif(1))))
> mean(x)
[1] 5.004064
> var(x)
[1] 10.00908

今度は分散が通常より大きくなった。このような場合を過分散(overdispersion)という。これは,例えば10人の子供を持つ家庭をたくさん集めて男子の数の分布を調べる場合,ある家庭では男子が生まれやすく,別の家庭では女子が生まれやすいといった傾向差がある場合に生じる。