離散一様分布$U\{1,\ldots,N\}$の確率質量関数は $f(x)=\frac{1}{N} ( x=1,\ldots,N )$で与えられます。
離散一様分布$U\{1,\ldots,N\}$に従う確率変数$X$の期待値と分散は、和の公式$\sum_{x=1}^{N}x = \frac{N(N+1)}{2}$ , $\sum_{x=1}^{N}x^2 = \frac{N(N+1)(2N+1)}{6}$ により、 $$ E(X)=\frac{N+1}{2}, \ \ \ \ \ V(X)=\frac{N^2 - 1}{12}$$ となります。
答:
# 計算用
二項分布は$B(n, p)$ で表され、$n$回のベルヌーイ試行を行った時に試行が$x$回成功する確率の分布です。コインの例で言えば、
表が出る確率が$p$のコインを$n$ 枚投げ、そのうち$x$枚が表になる確率に対応します。
$n$回の試行のうち、ちょうど$x$回成功する確率は$p^x$であり、ちょうど$n-x$回失敗する確率は$q^{n-x}$であり、また$n$回の試行中に$x$回の成功と$n-x$回の失敗の組み合わせは${}_nC_x = \frac{n!}{x!(n-x)!}$通りあるので確率質量関数は(注: $n!$は$n$の階乗で、$n!=n\times(n-1)\times\cdots\times2\times1$ ($n=0, 1, \ldots))$、
$$f(x) = {}_nC_x p^x(1-p)^{n-x} (x=0,1,…, n)$$
# 作図
%matplotlib inline
%config InlineBackend.figure_format='retina'
from matplotlib import pyplot as plt
def factorial(n):
if (n==0 or n==1):
return 1
else:
return n*factorial(n-1)
#print(factorial(5))
def Combi(n,x):
ans = 1
for i in range(x):
ans *= (n-i)
return ans/factorial(x)
# print([Combi(8,i) for i in range(8)])
def BiNom(n,p,x):
return (Combi(n,x)*p**x*(1-p)**(n-x))
x = range(11)
n=10
prob = [0.1, 0.5, 0.9]
plt.subplots_adjust(left=0.1, bottom=None, right=1.5, top=None, wspace=None, hspace=1.0)
for i in range(1,4):
plt.subplot(3,3,i)
p = prob[i-1]
y = [BiNom(n,p,u) for u in x]
plt.bar(range(11),y)
plt.axis([0.0,11.0,0.0,0.5])
plt.grid()
plt.xlabel('x')
plt.title('Bi(%d,%.1f)'%(n,p))
plt.show()
二項分布$B(n,p)$の期待値と分散はそれぞれ $$ E[x] = np, V[x]=npq $$ で与えられます。
# 解答
復元抽出の場合、袋の中には常に$N$個の玉が入っているため、毎回同じ状況で玉を取り出すことになります。したがって復元抽出はベルヌーイ試行に対応し、玉を$n$個取り出した時に赤い玉が$x$個あるとする確率変数は二項分布$B(n, M/N)$に従うことになります。
一方、非復元抽出の場合は、玉を取り出すたびに袋の中の玉の個数はどんどん減っていきます。そのため、これまでに取り出された玉の状況によって、袋に残っている玉の割合が変化します。非復元抽出で玉を$n$個取り出した時に含まれる赤い玉の個数$x$が従う確率分布を超幾何分布とよび、$HG(N,M,n)$で表します。
超幾何分布$HG(N,M,n)$の確率質量関数は次式で与えられます: $$ f(x)=\frac{ {}_MC_x \ {}_{N-M}C_{n-x} }{ {}_NC_n}, \ \ \ \ \ \ x = 0, 1, \ldots, n$$ $x$の定義域は$1,2,\ldots,n$ですが、実際に$x$が取りうる値は以下の範囲に限定されます: $$ \{ max(0, n-(N-M)\}, \ldots, min(n,M) \} $$ また超幾何分布$HG(N,M,n)$の期待値と分散は以下で与えられます: $$ E[x] = \frac{nM}{N} \ \ \ \ \ \ \ V[x]=\frac{nM(N-M)(N-n)}{N^2(N-1)} $$
超幾何分布$HG(100,80,10)$の確率質量関数の図:
%matplotlib inline
from matplotlib import pyplot as plt
#from __future__ import division
def factorial(n):
if (n==0 or n==1):
return 1
else:
return n*factorial(n-1)
#print(factorial(5))
def Combi(n,x):
ans = 1
for i in range(x):
ans *= (n-i)
return ans/factorial(x)
# print([Combi(8,i) for i in range(8)])
def HG(N,M,n,x):
return (Combi(M,x)*Combi(N-M,n-x)/Combi(N,n))
aN=100
aM=80
n=10
x = range(max([0, n-(aN-aM)]),min([n,aM]))
# print(x)
y = [HG(aN,aM,n,u) for u in x]
# print(Combi(aM,5), Combi(aN,n), Combi(aN-aM,n-5), Combi(aM,5)*Combi(aN-aM,n-5)/Combi(aN,n))
plt.bar(x,y)
plt.grid()
plt.xlabel('x')
plt.title('HG(%d,%d,%d)'%(aN,aM,n))
plt.show()
解答
あるエレベータに乗ろうとする人の1時間あたりの人数や、国道1km辺りのコンビニの数がポアソン分布と対応する確率変数です。 ポアソン分布は $Po(\lambda)$で表されます。ここで$\lambda$は平均。 「1時間あたりに来店する客の数の平均が$\lambda$人であるとき、単位時間あたりの来客数$X$が$x$である確率$(X=x)$は次式の確率質量関数で与えられ、$X$は平均$\lambda$のポアソン分布に従います($X \sim Po(\lambda)$) $$ P(X=x) =f(x)= \frac{ e^{-\lambda}\lambda^x}{x!} \ \ \ \ \ \ \ \ (x=0,1,…)$$ ポアソン分布$Po(\lambda)$の期待値と分散は $$ E[x] = \lambda, \ \ \ \ V[x] = \lambda$$ ポアソン分布の確率質量関数の図:
# 作図
%matplotlib inline
%config InlineBackend.figure_format='retina'
from matplotlib import pyplot as plt
import numpy as np
# from __future__ import division
def factorial(n):
if (n==0 or n==1):
return 1
else:
return n*factorial(n-1)
def Poisson(lam,x):
return (np.exp(-lam)*lam**x)/factorial(x)
x=range(50)
lst = [1, 10, 25]
plt.subplots_adjust(left=0.1, bottom=None, right=1.5, top=None, wspace=None, hspace=1.0)
for i in range(1,4):
plt.subplot(3,3,i)
l = lst[i-1]
y = [Poisson(l,u) for u in x]
plt.bar(x,y)
plt.axis([0.0,50,0.0,0.5])
plt.grid()
plt.xlabel('x')
plt.title('Po(%d)'%(l))
plt.show()
# 計算用
解答
%matplotlib inline
import numpy as np
def U(x, a=1.0, b=2.0): # uniform distribution
if (a < x < b):
return 1.0/(b-a)
return 0
# ベクトルxを [0.0, ..., 3.0] の区間で作成
x = np.linspace(0.0, 3.0, 10000)
# f(x)の結果を得る
y = [U(z) for z in x]
# グラフに表示
plt.plot(x,y)
plt.axis([0.0,3.0,-0.02,1.3]) # 見栄えのため描画範囲を指定する
plt.xlabel('x')
plt.ylabel('U(1,2)')
plt.grid()
plt.show()
解答
正規分布(normal distribution): 密度関数$f(x)$が以下の式で与えられる分布を、 平均$\mu$、分散$\sigma^2$の正規分布(またはガウス分布)といい、$N (\mu,\sigma^2)$で表す: $$ f(x)=\frac{1}{\sqrt{2\pi\sigma^2}} \exp(-\frac{(x-\mu)^2}{2\sigma^2}) \ \ \ \ (-\infty < x < \infty)$$ 特に$\mu=0, \sigma=1$の正規分布 $N(0, 1)$ を標準正規分布という
参考: 区間$[-\infty, \infty]$における$f(x)$の積分の値は1、 区間$[\mu - \sigma, \mu+\sigma]$における$f(x)$の積分の値は約0.683、 区間$[\mu - 2\sigma, \mu+2\sigma]$における$f(x)$の積分の値は約0.954、 区間$[\mu - 3\sigma, \mu+3\sigma]$における$f(x)$の積分の値は約0.997
正規分布の性質: $X \sim N(\mu, \sigma^2)$のとき、$E(X) = \mu, V(X) = \sigma^2$
$$ \frac{\bar{X}-E(\bar{X})}{\sqrt{V(X)}} = \frac{\bar{X}-\mu}{\sigma/\sqrt{n}} \longrightarrow N(0,1^2) \ \ \ (n\rightarrow \infty)$$
(注: 中心極限定理と大数の法則を混同しないように。大数の法則は一個の標本群を対象としている(標本サイズが大きくなるとその平均がもとの確率分布の期待値に収束する)のに対し、中心極限定理は、多数の標本群を対象とし、標本群が多ければ標本群の平均$\bar{x}$が正規分布する、ということを言っている。)
このように正規分布に従う確率変数の線形和もまた正規分布する、という性質がある(とても重要)。
参考:正規分布の密度関数の描画:
%matplotlib inline
import numpy as np
# from __future__ import division
# Gaussian : N(0,1)
def Gaussian (x):
return (np.exp(-x**2/2)) / np.sqrt(2*np.pi)
# ベクトルxを [-6.0, ..., 6.0] の区間で作成
x = np.linspace(-6.0, 6.0, 10000)
# f(x)の結果を得る
y = [Gaussian(i) for i in x]
# グラフに表示
plt.plot(x,y)
plt.axis([-6,6,-0.02,0.45]) # 描画範囲を指定する
plt.grid()
# 解答欄
import numpy as np
import numpy.random as random
print("理論的にn個の確率変数の期待値は一様乱数の期待値1/2, 分散は1/12をnで割った値になる")
for n in [100,1000, 10000, 100000, 1000000]:
t = np.array([random.random() for _ in range(n)])
print("[%d]: mean=%f, var=%f" % (n, t.mean(), t.var()))
1.0/12
解答
正規分布に基づく乱数発生の関数がrandomモジュールのnormal関数であることを用い、前問の 「原点から$2.0 \pm 0.1\sqrt{2}$ mの範囲にいる確率」をシミュレーションにより確かめてみよ。
# 解答欄
そして、次のような性質を持つ:
ここでは2つの確率変数$X, Y$に対する共分散(covariance)$Cov[X,Y]$を導入します。この式は分散と似ています。確率変数$X$と$Y$の期待値をそれぞれ$\mu, \nu$とすると、$X$と$Y$の共分散を次式で定義する: $$ Cov[X,Y] \equiv E[(X - \mu)(Y - \nu)] $$ このことから、次が成り立つ: $$ \begin{array}{l} Cov[X,Y] = Cov[Y,X] \\ Cov[X,X] = V[X] \\ Cov[X+a, Y+b] = Cov[X,Y] \ \ \ (a, bは定数)\\ Cov[aX, bY] = ab Cov[X,Y] \ \ \ (a, bは定数)\\ \end{array} $$ 共分散で分かることは分散とはちょっと異なります。
いま、$n$個の確率変数$X_1,\ldots,X_n$があるとします。それぞれの共分散を計算して下のように作成した行列を共分散行列( 分散共分散行列とも)いいます。
$$ \left( \begin{array}{cccc} Cov[X_1, X_1] & Cov[X_1, X_2] & \ldots & Cov[X_1, X_n] \\ Cov[X_2, X_1] & Cov[X_2, X_2] & \ldots & Cov[X_2, X_n] \\ \vdots & \vdots & \ddots & \vdots \\ Cov[X_n, X_1] & Cov[X_n, X_2] & \ldots & Cov[X_n, X_n] \\ \end{array} \right) $$
解答欄
ここで$n$個の確率変数$X_1,\ldots,X_n$をまとめてベクトル$\mathbf{X}$と表します。つまり、$\mathbf{X}=(X_1,X_2,\ldots,X_n)^T$です。すると、共分散行列は次のように書けます(記号が$V$に変わりました): $$ V[\mathbf{X}] = E[(\mathbf{X - \mu})(\mathbf{X}-\mu)^T] \ \ \ \ (ただし\mathbf{\mu}=E[\mathbf{X}])$$
解答欄
解答欄
指数分布とは、単位時間に平均$\lambda$回起こる事象が初めて起こるまでの時間$x$が従う確率分布です。 指数分布は $Exp(\lambda)$で表され、その確率密度関数$f(x)$は次式で与えられる: $$ f(x) = \left\{ \begin{array}{ll} \lambda e^{-\lambda x} & (0 \leq x (\lambda > 0) \\ 0 & x < 0 \end{array} \right. $$ いくつかの$\lambda$に対し$f(x)$は下図のようになる。
#
%matplotlib inline
import numpy as np
# from __future__ import division
# Exponential
def Exp (lam,x):
if (x >= 0) and (lam > 0):
return lam * np.exp(-lam*x)
return 0
# ベクトルxを [0, ..., 6.0] の区間で作成
x = np.linspace(0, 6.0, 1000)
lst = [0.5, 1, 3, 5]
for i in range(4):
l = lst[i]
# f(x)の結果を得る
y = [Exp(l,i) for i in x]
plt.plot(x,y,label='$\lambda=%.2f$'%(l))
plt.legend()
plt.axis([-0.2,6.0,-0.2,5.0])
plt.grid()
plt.xlabel('x')
plt.show()
ガンマ関数についての知識: $\Gamma(\alpha+1)=\alpha \Gamma(\alpha)$, $\Gamma(1)=1$, $\Gamma(\frac{1}{2}) = \pi$ --- $\alpha$が自然数ならば$\Gamma(\alpha)=\alpha !$(階乗)に等しい
整数$n$に対し$\alpha=n/2, \lambda=1/2$とおいたガンマ分布$Ga(\alpha,\lambda)$を 自由度$n$の$\chi^2$(カイ二乗)分布 と呼び、$\chi^2(n)$で表します。これは標準正規分布$N(0,1^2)$に従う互いに独立な$n$個の確率変数$X_1, \ldots, X_n$の二乗和 $X = \sum^n_{i=1} X_i^2$が従う確率分布で、その確率密度関数は次式で与えられます: $$ f(x) = \frac{x^{\frac{n}{2}-1}}{2^{\frac{n}{2}}\Gamma(\frac{n}{2})}e^{-\frac{x}{2}}$$
# 作図
%matplotlib inline
# from __future__ import division
from scipy import stats
import numpy as np
import matplotlib.pyplot as plt
fig,ax = plt.subplots(1,1)
x = np.linspace(0, 10, 10000)
linestyles = [':', '--', '-.', '-']
deg_of_freedom = [1, 2, 3, 6]
for df, ls in zip(deg_of_freedom, linestyles):
ax.plot(x, stats.chi2.pdf(x, df), linestyle=ls, label=r'$df=%i$' % df)
plt.xlabel('$\chi^2$')
plt.ylabel(r'$f(\chi^2)$')
plt.title(r'$\chi^2\ \mathrm{Distribution}$')
plt.axis([-0.2,10,-0.02,1.0])
plt.legend()
plt.grid()
# 作図
%matplotlib inline
# from __future__ import division
from scipy import stats
import numpy as np
import matplotlib.pyplot as plt
fig,ax = plt.subplots(1,1)
x = np.linspace(-6, 6, 10000)
linestyles = [':', '--', '-.']
deg_of_freedom = [1,3,100]
for df, ls in zip(deg_of_freedom, linestyles):
ax.plot(x, stats.t.pdf(x, df), linestyle=ls, label=r'$df=%i$' % df)
plt.xlabel('$t$')
plt.ylabel(r'$f(t)$')
plt.title(r't-Distribution')
plt.axis([-6,6,-0.02,0.6])
plt.legend()
plt.grid()
from scipy import stats
?stats.f.pdf
# 作図
%matplotlib inline
# from __future__ import division
from scipy import stats
import numpy as np
import matplotlib.pyplot as plt
fig,ax = plt.subplots(1,1)
x = np.linspace(0.0001, 6, 10000)
linestyles = [':', '--', '-.','-']
deg_of_freedom = [(1,1),(2,2),(6,8),(10,10)]
for (m,n), ls in zip(deg_of_freedom, linestyles):
ax.plot(x, stats.f.pdf(x, m,n), linestyle=ls, label=r'$m=%i, n=%i$' % (m,n))
plt.xlabel('$x$')
plt.ylabel(r'$f(x)$')
plt.title(r'F-Distribution')
plt.axis([-0.02,6,-0.02,1.2])
plt.legend()
plt.grid()
中心極限定理
正規分布$N(\mu, \sigma^2)$
$\chi^2$分布
$t$分布
$F$分布