見出し画像

【第16回】正規分布

前回まで、仮説検定の考え方を「情報I」の授業で扱う試みについて記事を書いてきました。
統計学について、もう少し本格的なことを扱っていこうと思うと、本日のテーマである「正規分布」は必須の知識です。ただこちらは統計学の基礎ではあるのですが、数学的な説明がなかなか難しいのがちょっと厄介です。
そのためか、数学Iの「データの分析」や情報Iの「情報通信ネットワークとデータの活用」の分野の中で扱われている教科書はほとんどありません。数学Bの「統計的な推測」で初めて学ぶ内容と考えるのが一般的です。

そのことは承知しつつも、本シリーズ記事ではもう少しだけ情報Iの授業の中で推測統計学の内容について踏み込み、具体例を通して直観的に捉えながらデータの分析方法を学んでいくことを試みてみたいと思います。
これは決して、「情報Iの授業の中でここまでの内容を扱うべきである」という主張ではありません。表計算ソフト利用やプログラミングなど、コンピュータを活用すること通して、数学的に難しい内容を直観的に捉えられるような工夫をどれだけできるのかという単純な興味とちょっとした挑戦です。
従いまして、数学Bの授業の中でコンピュータ活用しながら学ぶことや、数学Bを学んだ後に情報IIの授業で学びを深めることも想定しながら気楽に書いていこうと思います。

正規分布とは

正規分布は自然現象や社会現象でみられる確率分布(値と確率の対応関係)で、その分布を表した曲線は平均値をピークとした左右対称の山型になることが知られています。

図1: 正規分布

もう少し詳しく見ていきましょう。

数学Bの教科書での記述

まず、数学的な説明をとりあえず見てみます。いかに数学Iや情報Iで真っ向勝負で正規分布を扱うことが難しいかをここで確認をしておきたいという趣旨です。

定義(正規分布)
$${ m }$$を実数、$${ \sigma }$$を正の実数とする。確率変数$${ X }$$の確率密度関数が、

$$
f(x) =\frac{1}{\sqrt{2\pi}\sigma} e^{ -\frac{(x-m)^2}{2\sigma^2}}
$$

で与えられるとき、$${ X }$$は平均$${ m }$$,標準偏差$${ \sigma }$$の正規分布に従うという。

連続型確率分布と確率密度関数(数学B)、自然対数の底(数学III)、定積分(数学II、実際の計算は大学初年度)など、本当にきちんと理解しようと思えば、前提としたい知識が多くあります。

二項分布と正規分布

ここで、「100個のサイコロを同時に投げて1の目が出た個数を調べる」という試行を考えてみましょう。

試行回数を増やす

この試行を1000回、100000回行ったときのヒストグラムがそれぞれ、下の1番左と中央です。ただし、縦軸は「1の目が出た個数がその個数だった回数」そのものではなく、「回数の全回数に対する割合」(相対度数)をとっています。

図2: 試行回数を増やしたときのヒストグラム

1000回のときは、実行するたびにかなり異なった形状のヒストグラムが出力されますが、100000回まで調べるとおおよそ16~17個をピークにした左右対称に近い山型の分布に近づいていきます。
そしてこの試行を行う回数を限りなく大きくしたときの極限の状態が最も右であり、このときの縦軸は数学的確率を表します。つまり、1回の試行において1の目の出たサイコロの個数を$${ X }$$としたとき、

$$
P(X=r)  =  _{100}C_r \left(\frac{1}{6} \right) ^r\left(\frac{5}{6} \right) ^{100-r} \quad (r=0,1,2, \ \cdots \ , 100) 
$$

が横軸の階級「$${r}$$以上$${r+1}$$未満」に対する縦軸の値になります。
これにより、ヒストグラムの柱の左上の点は、平均値をピークとする左右対称の山型の曲線上に並んできます。

サイコロの個数を増やす

次に1回の試行で投げるサイコロの個数を増やしてみます。「100個のサイコロを同時に投げて1の目が出た個数を調べる」の「100個」の部分を「1000個」に変えてみます。試行回数は限りなく大きい場合を考えます。
100個の場合が下図の左、1000個の場合が下図の右です。

図3: 同時に投げるサイコロの個数を増やしたときのヒストグラム

さらに両者を比較しやすくするために、横軸の数値に「1の目がサイコロの個数の投げたサイコロすべての個数に対する割合」に添えました。
そうしますと、両者の違いは、度数分布表の階級幅の違いであることが見えてきます。1の目が出た個数の割合で階級を考えると、100個の場合(左)は階級幅が0.01、1000個の場合(右)は0.001で10倍細かくなっています。

このように階級幅を限りなく小さくしていくと、ヒストグラムの柱の左上の点の集合は滑らかな曲線に近づいていきます。

ここまでの内容の整理

ここまでのことを整理してみましょう。今回、モデル化したものを標本調査に合わせて言い換えると次のようになります。

◆複数個のサイコロを同時に投げる試行の回数を増やす
  → 「母集団から抽出する標本のサイズを大きくする」
◆同時に投げるサイコロの個数を多くする
  → 「度数分布表の階級幅を小さくする」

以上を踏まえまして、次のようにまとめます。

二項分布に従う母集団から無作為に抽出する標本のサイズを限りなく大きく、階級幅を限りなく小さくしたときの(縦軸を相対度数にした)ヒストグラムは平均値をピークとした左右対称の山型の曲線に近づく。この曲線に従うような連続する値と確率の対応関係を正規分布という。

確率と面積

この山型の曲線についてもう少し意味をおさえておきましょう。次のような問題を考えてみたいと思います。


例題
100個のサイコロを同時に投げたときに、1の目の出る個数が10個以上20個以下である確率を求めよ。


二項分布

まずはこの問題の答えを出しておきましょう。次の計算で求められます。

$$
_{100}C_{10}\left(\frac{1}{6} \right)^{10}\left(\frac{5}{6} \right)^{90}+_{100}C_{11}\left(\frac{1}{6} \right)^{11}\left(\frac{5}{6} \right)^{89}+ \cdots +_{100}C_{20} \left(\frac{1}{6} \right)^{20}\left(\frac{5}{6} \right)^{80}
$$

Pythonを使って値を求めます。scipy.statsモジュールのbinom.cdfメソッドを使います。cdfは累次分布関数(cumulative distribution function)の略です。
stats.binom.cdf(k, n, p)の形で用い、これは1回の試行で確率pで起こる事象をn回繰り返した時に、k回以下起こる確率を意味しています。「20回以下の確率」から「9回以下の確率」を引くことで、「10回以上20回以下の確率」を求めていることに注意してください。

from scipy import stats
p_20 = stats.binom.cdf(20,100,1/6) # 20回以下
p_10 = stats.binom.cdf( 9,100,1/6) #  9回以下
print(p_20-p_10)

これを実行すると、0.8268197405906472が出力されます。およそ82.7%です。この確率を「1回の試行における1の目が出るサイコロの個数とその確率の対応関係を表したグラフで見てみましょう。

図4: ヒストグラムの面積と確率

上のヒストグラムにおいて、それぞれの「柱」である長方形の面積が確率に等しいことに注意しますと、求めたい確率は10以上20以下の11本の柱の面積の和になるということです。

正規分布

それでは、その二項分布の極限の状態である正規分布について同様の考察をしましょう。山型の曲線において、横軸の値が10以上20以下の範囲におけるグラフと横軸の間の面積を求めてみたいと思います。

図5: 正規分布の確率密度関数のグラフの下の面積と確率

こちらもPythonを使って値を求めます。scipy.statsモジュールのnorm.cdfメソッドを使います。normは正規分布(normal distribution)の略です。
norm(x, loc = 平均, scale = 標準偏差)の形で用い、x以下である確率を意味しています。平均と標準偏差はもとの二項分布からmeanメソッドstdメソッドを用いて求めることにします。

m = stats.binom.mean(100,1/6)   # 平均
s = stats.binom.std(100,1/6)    # 標準偏差
p_20 = stats.norm.cdf(20,loc=m,scale=s)
p_10 = stats.norm.cdf(10,loc=m,scale=s)
print(p_20-p_10)

これを実行しますと0.7776341801784997が出力されます。上で求めた真の値と比較すると、それなりにずれていることが分かります。
これはヒストグラムにおける長方形の面積の和を山型の曲線のグラフの下の面積で近似をしていることによる誤差です。この補正のためによく用いられる手法が半目の補正と呼ばれるもので、下のように区間を上下に0.5ずつ広げて考えることをいいます。

10 以上 20 以下 →(半目の補正)→ 9.5 以上 20.5 以下

それではこちらの補正のもと、改めて確率を求めてみましょう。

m = stats.binom.mean(100,1/6)   # 平均
s = stats.binom.std(100,1/6)    # 標準偏差
p_20 = stats.norm.cdf(20.5,loc=m,scale=s)
p_10 = stats.norm.cdf( 9.5,loc=m,scale=s)
print(p_20-p_10)

今度は、0.8209252431781604が出力され、かなり近い値が求められていることが分かります。

まとめ

今回の記事では、正規分布を二項分布で試行回数を限りなく大きくしたときの確率分布として導入しました。細かいコードは割愛しましたが、プログラムを使って、シミュレーションを行ったり、ヒストグラムを描いたりしながら、二項分布が正規分布に近似していくイメージがつかめれば良いと思います。あまり深追いしないように気を付けたのですが、自身が解析学を専攻していたこともあり、正規分布の確率密度関数を見ていたらつい気持ちが熱くなってしまい、やや踏み込み過ぎた気もしています(反省)。

次回は、中心極限定理について自分の備忘録を書いてみたいと思っています。いわゆる自分の「趣味」の回です。高等学校教育と直接的には少し離れるかもしれませんが、今回の記事の背景をまとめにしていきたいと思いますので、ご興味がある方はぜひ読んでください。
最後までお読みいただき、ありがとうございました。