11
11

More than 5 years have passed since last update.

SciPy で正規分布を生成する

Last updated at Posted at 2014-04-30

確率分布の重要性については以前に強調してきた通りですが、その中でも特に正規分布は最も重要な分布と考えられます。

正規分布とは

観測する点の分布を増やしていくと期待値と分散が以下の値に近づくとき、正規曲線が描かれます。

E(X) → \mu \\
V(X) → \sigma^2

この正規曲線を密度関数とするような分布を 正規分布 (Normal distribution) と言います。

いままでよく出てきた N(μ, σ^2) という正規分布の表現は、期待値が μ 、分散が σ^2 (標準偏差の二乗) に一致することを指します。

正規分布の重要性

前述した通り、正規分布はそれを仮定する場面が最も多いと言える分布です。

まず自然現象や社会現象には正規分布に従うと考えられるものがきわめて多数存在します。

また、漸近理論でも説明しましたが、大きな数を扱うときはその分布は正規分布に限りなく近似していきます。忘れた方はもう一度、中心極限定理を思い出しましょう。

母集団が正規分布に従うときは、標本の関数はよく知られたメジャーな分布になります。

標準正規分布表とは

これも以前に紹介しましたが、平均 0 分散 1 の正規分布 N(0,1) を標準正規分布と言い、その数表を正規分布表と言います。正規分布表は検索すればいくらでも出てきますが、筆者は以下の表をいつも参照しています。

標準正規分布表
http://www.koka.ac.jp/morigiwa/sjs/standard_normal_distribution.htm

標準正規分布表
https://staff.aist.go.jp/t.ihara/normsdist.html

正規曲線の方程式 (= 正規分布の確率密度関数) は以下のように記述できます。

y = \frac {1} {\sqrt{2\pi}\sigma}e^{-\frac {(x-\mu)^2} {2\sigma^2} }

この式から N(0,1) に従う Z を導くことを標準化と言います。

X は N(μ, σ^2) に従い、 Z は N(0,1) に従うというわけです。

SciPy で正規分布を発生させる

これも今まで登場してきましたがあらためて紹介します。

from scipy.stats import norm

print( norm.mean(), norm.std(), norm.var() )
#=> (0.0, 1.0, 1.0)
# 正規分布の平均は 0 、標準偏差と分散は 1 となる

# 正規分布に従う 10 個の変数を乱数生成する
r = norm.rvs(size=10)
print( r )
# => [-0.14257586  1.4193167  -1.74553227 -0.1446086  -0.84588791  0.6521945  0.38792576  1.12649729 -1.04827952  1.26594555]

# ランダムなので 平均 0 分散 1 に近似した値が観測される
print( r.mean(), r.std(), r.var() )
# => (0.092499564763084963, 1.0138488700256538, 1.0278895312522951)

参考

Statistics (scipy.stats)
http://docs.scipy.org/doc/scipy/reference/tutorial/stats.html

11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11