Rでシミュレーション(正規分布に従う確率変数の和は正規分布に従う)

「シミュレーション」なんていうと、難しそうな気がしてしまいますが、今回のは「乱数を使って試してみる」くらいのものです。

例えば、10万人の学生がいます。彼らの身長は正規分布に従っているとします。また、彼らのテストの点数も正規分布に従っているとします。

このとき、「身長+点数」という確率変数を考えると、これは正規分布に従っているでしょうか?

これを数学的に証明するのではなく、乱数を使ったシミュレーションで、「身長+点数もきっと正規分布に従うんじゃないか」ということを確認しようというわけです。

まずは↓こんな感じでデータを生成しておきます。

# 身長
#   平均    :170cm
#   標準偏差:  5cm
heights <- rnorm(100000, 170,  5)
 
# 点数
#   平均    : 50
#   標準偏差: 10
scores  <- rnorm(100000,  50, 10)


↓身長と点数のそれぞれでヒストグラムを描いてみましょう。

brk <- seq(0,300,1) # ヒストグラムの刻み
hist(heights, breaks=brk, ylim=c(0, 10000))

正規分布に従う「身長」のヒストグラム

hist(scores,  breaks=brk, ylim=c(0, 10000))

正規分布に従う「点数」のヒストグラム

↓両者を足してヒストグラムを描いてみると、

hist(heights + scores,  breaks=brk, ylim=c(0, 10000))

「身長+点数」は正規分布に従うか?

どうやら正規分布になっているっぽいです。

では、どんな正規分布(平均、分散)になっているのでしょうか。

> mean(heights)
[1] 169.9721

> mean(scores)
[1] 50.04487

> mean(heights + scores)
[1] 220.017

「身長の平均」と「点数の平均」を足したものが、「身長+体重の平均」になっているようです。(これは当たり前の感じがしますが)

> var(heights)
[1] 24.88623

> var(scores)
[1] 99.94487

> var(heights + scores)
[1] 124.4847

分散も同様に、「身長の分散」と「点数の分散」を足したものが、「身長+体重の分散」になっているように見えます。

証明したことにはなりませんが、確率統計の教科書に出てくる

 E[X+Y] = E[X] + E[Y]
 V[X+Y] = V[X] + V[Y]

を、体感できた、というところでしょうか。

では、Rのコード例として、3つのヒストグラムをまとめて描画するものをあげておきます。

hist(heights         , breaks=brk, ylim=c(0, 10000), border="red",
     main="点数、 身長、 点数+身長 のヒストグラム", xlab="")
hist(scores          , breaks=brk, ylim=c(0, 10000), border="blue"  , add=T)
hist(heights + scores, breaks=brk, ylim=c(0, 10000), border="purple", add=T)

青(点数)と赤(身長)を足した変数のヒストグラムが紫となる

青と赤を足すと、紫になるという具合です。

ヒストグラムを見るのに慣れていないと、「青と赤を足したのに、紫はどうして両者よりも低くなっているんだ?」なんて思ってしまうかもしれません。

私も最初は混乱しましたが、ヒストグラム(=度数)を足し合わせるというのと、変数を足した上でヒストグラムを描く(度数を求める)というのは、違いますからね。

分散は足されて大きくなる
→ばらつきが大きくなる
→最頻値の階級への集中度は小さくなる
→山は小さくなる

みたいに考えると納得できるのではないでしょうか。

また、それぞれの総度数(10万人)は同じなので、赤と青と紫の面積はすべて等しいということになります。

コメント

このブログの人気の投稿

Rのグラフで軸の目盛りの刻み幅を変更する方法

Rで繰り返しを含む数列の生成(rep関数、seq関数)

reorderを使ってggplotの棒グラフの並び順を降順にする方法