中心極限定理の問題:正規分布からPythonを使って確率を求める

データ分析
Sponsored Link

正規分布から確率を求める方法はいくつか書きましたが、今回は確率を勉強するうえで覚えておきたい言葉があります。

それは「中心極限定理」ですね。

プログラミングを勉強したい!! プログラミングに興味がある!!
そんなあなたへのおすすめ記事
無料体験あり、キャッシュバック有りプログラミングスクールおすすめはこちら

 

中心極限定理とは

確率を正規分布を使って求めるのですが、その時に知っておきたいのが「中心極限定理」です。

面倒くさそうな文字ですが、知っておくと確率の考え方を理解するのに役に立ちますので、ざっくりと覚えましょう。

簡単に言うと「母集団から取り出した標本の平均は、標本数を十分大きくしたとき正規分布に近づく(演習で身につける統計学より)」という定理です。

ではなぜ正規分布が都合がいいのかというと、以下の3点があるから(プログラミングのための確率統計)。

  • ある値  を中心として
  • その付近の値は出やすく
  • そこから外れた値ほど出にくくなる

世の中はそんな正規分布にあふれているので、使い勝手がいいんですね。

とりあえず、中心極限定理の数式を載せておきます。

1.標本平均の期待値は母平均に等しい

2. 標本平均の分散は母分散を標本数 n で割ったものに等しい。

というわけで、標本採集の回数を増やすとどうなるか見てみましょう。

標本採取の数を増やすシミュレーションを行う

下のコードは、6,7,8,9,10という数字の中から4個をランダムに取り出し、その平均を求める操作を40000回繰り返すものです。

import numpy as np
from matplotlib import pyplot as plt

t = list()
for i in range(40000):
  s = np.random.randint(6, 11, 4)
  t+= [sum(s)/len(s)]

plt.hist(t, bins=16)

この操作を行って得られた平均をグラフ化すると、以下のようなきれいな正規分布になりますね。

中心極限定理と標準化を使って確率を求める

では、実際に中心極限定理の概念と標準化を使って、確率を求めてみたいと思います。

例えば以下のような場合。

果物店の果物一個当たりの重量が平均257g で分散が63の場合、35個取り出した時の標本平均が260g以上になる確率を求めてみます。

Pythonにはこのような計算を簡単に行うためのパッケージが用意されていて、scipyもその一つになります。

以下コードになります。

from scipy.stats import norm  # scipyのstatsからnorm(正規分布)読み込む。
p = norm.cdf(x = 260, loc = 257, scale = ((63/35)**0.5))

print(1-p)
0.0126736593387341

以上より、果物が260g以上になる確率は0.0126、つまり1.26%ですね。

もう一つやってみましょう。

英語の成績が平均が67点で分散が28の場合、40人を無作為に取り出した時の平均が65点から69点の範囲にある確率を求める。

この場合、65点のまでの確率と69点までの確率を求め、69点までの確率から65点までの確率を引くと、その範囲にある確率を求めることができます。

from scipy.stats import norm
p1 = norm.cdf(x = 65, loc = 67, scale = ((28/40)**0.5))
p2 = norm.cdf(x = 69, loc = 67, scale = ((28/40)**0.5))

print(p2-p1)
0.9831725905172433

以上の計算により、確率は98%になります。

では以下のような場合は別のやり方が必要になります。

例えば、

英語の試験を受けた生徒の中から無作為に選んだ37人の平均と分散は63と36。

この時、母集団の平均が60未満になる確率を求める。

この場合、母分散  には以下の関係があります。

これを使って、中心極限定理に当てはめ標準化すると以下のようになります。

といっても、scipyを使っても計算できるので、サクッと計算してしまいましょう。

と、その前に、標本データの平均は母集団の平均と違う可能性が大きいです。

そのため、母集団の分散は標本データの分散よりも大きくなるので、補正する必要があるんですね。

それが(n – 1)の意味になり、今回の問いの場合は(37-1)というわけです。

scipyでも同じ考え方で、確率を求めます。

from scipy.stats import norm
p3 = norm.cdf(x = 60, loc = 63, scale = ((36/(37-1))**0.5))

print(p3)
0.0013498980316300933

計算してみると確率は0.0013、つまり0.13%ということになります。

プログラミングを勉強したい!! プログラミングに興味がある!!
そんなあなたへのおすすめ記事
無料体験あり、キャッシュバック有りプログラミングスクールおすすめはこちら

 

関連記事↓↓↓

統計的推定とpythonでの不偏推定量の計算
調査や測定などの結果得られた集団の特徴を推定する場合、母集団がわかっていればいいのですがそうでない場合推定しなければなりません。 母集団の平均 と母分散  がわかっている場合はいいのですが、わからない場合は得られたデータから推定して...
Pyhton を使って確率の計算をやってみる
簡単な確率の計算をPythonを使ってやってみましょう。 確率は何とも概念がつかみにくいものがあるのですが、実際に計算してみることで概念をつかんでみたいと思います。 とりあえず簡単な問題からやっていきましょう。 プログラミング...
Sponsored Link

コメント

タイトルとURLをコピーしました