2018年6月25日月曜日

test

確率分布と母数の話

母集団と標本(サンプル)の違い、分布については、具体的な話なので、わかっているものとします。

本に出てきた例を拡張して、ある池$A$にいる魚の数は500尾で次のような分布をしているとします。(横軸は魚の大きさ、縦軸は個体数)

In [2]:
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt

a = np.random.normal(4, np.sqrt(1.2), 500)
plt.hist(a, range=(0,15), bins=30)
plt.savefig("fig1.png")
C:\Users\conse_000\Anaconda3\lib\site-packages\matplotlib\font_manager.py:1328: UserWarning: findfont: Font family ['IPAexGothic'] not found. Falling back to DejaVu Sans
  (prop.get_family(), self.defaultFamily[fontext]))

では、この隣の池$B$には3928尾の魚がいるとします。

In [3]:
#平均10、分散2.5
b = np.random.normal(10, np.sqrt(3.5), 3928)
plt.hist(b, range=(0,15), bins=30)
plt.savefig("fig2.png")
C:\Users\conse_000\Anaconda3\lib\site-packages\matplotlib\font_manager.py:1328: UserWarning: findfont: Font family ['IPAexGothic'] not found. Falling back to DejaVu Sans
  (prop.get_family(), self.defaultFamily[fontext]))

隣町の池$C$には魚が158尾いるとします。

In [4]:
#平均4、分散.5
c = np.random.normal(4, np.sqrt(0.5), 158)
plt.hist(c, range=(0,15), bins=30)
plt.savefig("fig3.png")
C:\Users\conse_000\Anaconda3\lib\site-packages\matplotlib\font_manager.py:1328: UserWarning: findfont: Font family ['IPAexGothic'] not found. Falling back to DejaVu Sans
  (prop.get_family(), self.defaultFamily[fontext]))

ヒストグラムから読み取れること

これらのグラフはヒストグラムといいいますが、これらのグラフから共通してわかることは、それぞれ山なりに分布になっている、ということくらいでしょうか。

池$A$を基準に見ていくと、池$B$は右側にあり、山がややなだらか、池$B$は同じ位置にあるけど、山が細く尖っていることがわかります。

ただ、縦軸がそれぞれ違うので、個体数に違いがあることがわかります

一般化する

それぞれのヒストグラムを並べて表示します。

In [5]:
labels = ['A', 'B', 'C']
plt.hist([a,b,c], stacked=False, label=labels, range=(0,15), bins=30)
plt.legend()
plt.savefig("fig4.png")
C:\Users\conse_000\Anaconda3\lib\site-packages\matplotlib\font_manager.py:1328: UserWarning: findfont: Font family ['IPAexGothic'] not found. Falling back to DejaVu Sans
  (prop.get_family(), self.defaultFamily[fontext]))

重ねると個体数が違うので、それぞれどのような特徴があるのか、わかりづらくなりました。

個体数の違いに左右されずに、それぞれを比較するにはどうしたらよいのでしょうか。

ここで、確率分布がでてきます。

おしなべて考える

個体数がバラバラで比較できなかったので、個体数をそろえましょう。

たとえば、すべて個体数の合計を1として考えます。(わかりづらかったら100としてもよいです。たとえば、池$A$は本当は500尾いますが、5尾で1セットの標本と考えて、100個の標本を考える、みたいな感じです)

すると、ヒストグラムはこうなります。

In [6]:
labels = ['A', 'B', 'C']
plt.hist([a,b,c], stacked=False, label=labels, range=(0,15), bins=30, normed=True)
plt.legend()
plt.savefig("fig5.png")
C:\Users\conse_000\Anaconda3\lib\site-packages\matplotlib\axes\_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.
  warnings.warn("The 'normed' kwarg is deprecated, and has been "
C:\Users\conse_000\Anaconda3\lib\site-packages\matplotlib\font_manager.py:1328: UserWarning: findfont: Font family ['IPAexGothic'] not found. Falling back to DejaVu Sans
  (prop.get_family(), self.defaultFamily[fontext]))

いやいや、個体数の合計を1って何よ?ってところですが、これが具体的な標本の値を確率変数に考え直すためのイメージです。

つまり、合計を1(=100%)にする、ということです。(脚注;確率変数の定義)

分布を関数にする

この山なりの分布は一般的に正規分布と呼ばれています。別に山なりの分布であればすべて正規分布というわけではないですが、とりあえず正規分布として考えることが多いです。(注釈:極限定理の話)

正規分布は、以下の式で表されます。 $$y=\frac{1}{\sqrt{2\pi\sigma^2}}\exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)$$ グラフにすると

In [22]:
x = np.arange(-4, 4, 0.1)
y = norm.pdf(x, 0, 1)
plt.plot(x, y, color='r')
plt.savefig("fig6.png")
C:\Users\conse_000\Anaconda3\lib\site-packages\matplotlib\font_manager.py:1328: UserWarning: findfont: Font family ['IPAexGothic'] not found. Falling back to DejaVu Sans
  (prop.get_family(), self.defaultFamily[fontext]))

となります。

本で説明があったかわかりませんが、いきなり数式がでてくると「は?」ってなりますよね。

正規分布の関数は、魚の例で言うと、魚の大きさ(変数x)に該当する確率(合計を1としたときの個体数)を計算してくれる関数になります。

正規分布の数式を見るにあたって大事なことは、式の中に平均を表す$\mu$と分散(ばらつき)を表す$\sigma$が入っていること。

この$\mu$と$\sigma$が正規分布の母数(パラメータ)となります。

母数ですべてがわかる

では、池$A, B, C$について、ヒストグラムを正規分布にあてはめるとどうなるでしょうか。

In [8]:
s = np.arange(0, 15, 0.1)
ya = norm.pdf(s, 4, np.sqrt(1.2))
yb = norm.pdf(s, 10, np.sqrt(3.5))
yc = norm.pdf(s, 4, np.sqrt(0.5))

labels = ['A', 'B', 'C']
plt.hist([a,b,c], stacked=False, label=labels, range=(0,15), bins=30, normed=True)
plt.legend()
plt.plot(s, ya, color='blue')
plt.plot(s, yb, color='orange')
plt.plot(s, yc,color='green')
plt.savefig("fig7.png")
C:\Users\conse_000\Anaconda3\lib\site-packages\matplotlib\axes\_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.
  warnings.warn("The 'normed' kwarg is deprecated, and has been "
C:\Users\conse_000\Anaconda3\lib\site-packages\matplotlib\font_manager.py:1328: UserWarning: findfont: Font family ['IPAexGothic'] not found. Falling back to DejaVu Sans
  (prop.get_family(), self.defaultFamily[fontext]))

このように個体数をそろえれば、たとえば同じ分布を仮定して、個体数が2倍に増えても、それぞれの大きさの魚が何尾ずつ生息しているか考えることができますね。

また、池$A$は平均の母数$\mu=4$、分散の母数$\sigma^2=1.2^2$、池$B$は平均の母数$\mu=10$、分散の母数$\sigma^2=2.5$、池$A$は平均の母数$\mu=4$、分散の母数$\sigma^2=0.5$の正規分布としました。

母数がわかれば、どのような分布をしているか(どの位置にあり、山がなだらかか急かなど)がわかるようになります。(注釈:尖度)

平均$\mu$ 分散$\sigma^2$
$A$ 4 $1.2^2$
$B$ 10 2.5
$C$ 4 0.5

母数というて数値でわかれば、複数の分布を比べて、「大きさの平均が大きいのは池$B$(大型種が多いのかな?)」ですとか、「ばらつきが小さいのは池$C$(生息している種が少ないのかな?)」ですとか、一目でわかります。

まとめ

分布を比較しやすいように、関数として扱いやすいように、確率分布は考えられています。

確率分布がわかれば、調べる対象の分布の特徴がつかみやすいです。

また、その特徴は母数という数値でとらえることができ、数値であれば比較しやすく、またグラフなどの視覚化もしやすいです。

統計で扱われる分布は正規分布以外もいろいろとあります。それぞれの分布には、それぞれ母数も違います。

一様分布や二項分布などはわかりやすいですが、抽象的で「なぜその分布が必要なんだ?」と思う分布も多いでしょうが、まぁそういうものもある、という程度でひとまず理解していただければよいのではないか、と思います。

0 件のコメント:

コメントを投稿