テキスト

11
正規分布
以前に述べたが正規分布は最も重要な分布である。R に用意されている正規分布に関する関数を紹介する。
前に紹介した撃墜王の試験の結果は平均 30、標準偏差 10 の正規分布に従う。これのグラフを描いてみよう
X<-seq(0,100,by=1)
gekituiou<-function(x)
{
S<-dnorm(x,30,10)
return(S)
}
Y<-sapply(X,gekituiou)
plot(X,Y,type="l")
dnorm(x,30,10) は平均 30、標準偏差 10 の正規分布の密度関数であり、値は確率ではないことに注意せよ。意
味があるのはその積分値である。
一方、楽勝将軍の試験の結果は平均 80、標準偏差 5 の正規分布に従う。これのグラフを描いてみよう
rakusyouou<-function(x)
{
S<-dnorm(x,80,5)
return(S)
}
Y<-sapply(X,rakusyouou)
plot(X,Y,type="l")
2 つのグラフを描くと標準偏差の大きい撃墜王の試験の方が点数にバラツキがある。これは撃墜王の試験が学
力差が良くでるのに対して楽勝将軍の試験は楽勝すぎて学力差があまり出ないことを意味している。この標準
偏差のもつ意味をよく理解しておこう。
撃墜王の試験で 60 点以下である確率は
pnorm(60,30,10)
で与えられる。従って両先生のF率は
1-pnorm(60,30,10)
1-pnorm(60,80,5)
で与えられる。これをシミュレーションしたい場合 rnorm(10000,30,10) で平均 30、標準偏差 10 の正規分布に
従う乱数データを 10000 個作れる。そこで撃墜王の試験を 10000 人受けたときの合格者数のシミュレーショ
ンは
geki2<-rnorm(10000,30,10)
sum(geki2>=60)
でできる。(恐ろしい結果がでる。)
15
最近は大学もせちがらくなって、学生から撃墜王に「なんとかしろ」と文句がでた。そこで撃墜王は「面倒だ
から 7 割通す」ことにした。この場合は累積確率が 0.3 となる値が欲しいので
qnorm(0.3,30,10)
で求められる。今までの結果をまとめると
dnorm(x,30,10) – 撃墜王の試験の密度関数。確率ではない!
pnorm(60,30,10) – 撃墜王の試験の点数が 60 点以下である確率(累積確率)
qnorm(0.3,30,10) – 撃墜王の試験の累積確率が 0.3 となる点数。これで学生も納得 (?) するであろう
rnorm(10000,30,10) – 平均 30、標準偏差 10 の正規分布に従う乱数データを 10000 個つくる。つまり撃墜王の
試験を 10000 人受けたときの結果。中身は 10000 個の成分からなるベクトルなので注意すべし。
これらの関数は重要なので覚えておこう。確率変数 X が離散型として xi の確率が pi とする。このとき平均
E(X) と分散 V(X) は
∑
∑
E(X) =
xi pi , V(X) =
(xi − E(X))2 pi
∫
ちなみに連続型で P(X ≤ x) =
∫
E(X) =
∞
−∞
x
−∞
f (x)dx の場合
∫
x f (x)dx, V(X) =
∞
−∞
(x − E(X))2 f (x)dx
確率変数の和については次の定理が成立する。
中心極限定理
独立な n 個の確率変数 Xi (i = 1, 2, · · · , n) の期待値はすべて m で、標準偏差は σ とする。
√
すると X1 + X2 + · · · + Xn は n を大きくしていくと平均 mn , 標準偏差 σ n の正規分布に近づいていく。
2 項分布がどんどん正規分布に近づくのは良く知られているが、実はどんな分布であってもその和が正規分布
に近づくのである。これは非常に神秘的な定理である。
これをシミュレーションで確かめよう。北斗神拳のラオウの必殺技は北斗剛掌波(ほくとごうしょうは)であ
る。掌から凄まじい闘気を放つラオウの代表的な技であり、その破壊力は雑魚キャラなら 20 人ぐらい粉々に
粉砕するほどであるが、あまりに闘気を集中させるために時々空振りをしてしまう。その攻撃力を分析すると
表 1. 北斗剛掌波の攻撃力
確率
攻撃力
0.2
0
0.6
1000
0.2
2000
この表の意味を述べるとラオウの北斗剛掌波は確率 0.2 で空振りし、確率 0.6 で 1000 のダメージを与え、確率
0.2 で 2000 のダメージ (会心の一撃) を与え、雑魚キャラ(HP 100 ぐらい)なら 20 人ぐらい粉砕してしまう。
そこでラオウが北斗剛掌波を 10 回放った時に相手に与えるダメージの分布をシミュレーションしてみよう。
16
gousyouha<-function(n)
{
tmp<-runif(n)
y<-ifelse(tmp<0.2,2000,ifelse(tmp<0.8,1000,0))
z=sum(y)
return(z)
}
gousyouha(10)
これで北斗剛掌波を 10 回放ったときの攻撃力の総計を出力する関数が完成した。なおベクトルの要素ごとに
条件の判定を行う場合には ifelse が使われる。詳細はテキストの p49 から p51 を読むこと.
あとはこれを 10000 回繰り返した時の分布を調べれば良い。
T1<-rep(10,10000)
Result<-sapply(T1,gousyouha)
hist(Result)
mean(Result)
sd(Result)
出てきた平均と標準偏差が中心極限定理より出てくる理論値、平均 10000 と標準偏差 2000 (この計算は各自
すること。簡単な演習問題)に近いことを確認し、グラフが正規分布に近いことを確認せよ。
17