これは、長畑(2009)『Rで学ぶ統計学』共立出版に基づく解説です。
学習項目です
確率の公理(コロモゴロフによる)
</UL>
# ヒント
# 一様乱数を発生させる関数はrandomモジュールのrandit関数。
# これを使って、次のようにすれば、100回のサイコロ振りをシミュレーションできる。
import numpy.random as random
trial = [random.randint(1,6) for _ in range(100)]
#この結果、変数trialには1,2,3,4,5,6のいずれかの数、合計100個の数を要素とするリストが値になる。
# そこで、1の目の出現回数を求めれば良い
答
全確率の定理: 互いに排反な事象 $E_1, E_2, \cdots, E_n$ (すなわち、$i \neq j$であるすべての$i,j$ ($1 \leq i,j \leq n$)に対し、 $E_i \cap E_j emptyset$、$E_1 \cup E_2 \cup \cdots \cup E_n = U$ )と、任意の事象$A$に対して次式が成立する:
ベイズの定理(Bayes theorem):
$\begin{array}{ll} P(E_i | A) & = \frac{P(E_i \cup A)}{P(A)}=\frac{P(A|E_i)P(E_i)}{P(A)}
=\frac{P(A|E_i)P(E_i)}{P(E_1)P(A | E_1) + P(E_2)P(A | E_2) + \cdots + P(E_n)P(A | E_n)}\\
& =\frac{P(A|E_i)P(E_i)}{\sum_{i=1}^n P(E_i)P(A |E_i)}\\
\end{array}$
ベイズの定理に関する用語:
[ヒント] 求める確率は、$P(A)$ と $P(E \mid A)$ 。全確率の定理から $P(A) = P(A \mid E)P(E) + P(A \mid \neg E)P(\neg E)$。 またベイズの定理から、 $P(E \mid A)= \frac{P(A \mid E) P(E)}{P(A)}$である。 なお、仮定から、$P(\neg A \mid E)=0.44,P(\neg A \mid\neg E)=0.96, P(\neg E)=0.965$ である。
# 計算用
# 計算用
[ヒント]
ロボットのセンサーが壊れているという事象をR, i個目の物体を提示したときに赤色のLEDが点滅する事象を$L_i$とする。 すると、問題文から、(その他に情報がない場合の確率は「事前」確率): $P(R)=0.01$
これにより、ロボットのセンサーが壊れていない(事前)確率$P(\neg R)$は$1-P(R)=0.99$となる。
ここで、$P(L_i|R)$の意味を考えると、 「ロボットのセンサーが壊れている」という状況のもとで「i番目の赤色LEDが 点滅するという(事後)確率であり、これは常に1である。また $P(L_i|\neg R)$の意味を考えると、 「ロボットのセンサーが壊れていない」という状況のもとで 「i番目の赤色LEDが点滅するという(事後)確率であり、 これは各$L_i$が独立事象なら、その値は1/3である。 これらを前提として問題を解く。
N=1 の場合: このとき赤色のLEDが点滅した(という情報がある)のだから、 $P(R|L_1)$が求めるべき(「赤色のLEDが点滅した」という情報が得られた後の確率なので、「事後」)確率である。
ベイズ則から,$ P(R|L_1)=\frac{P(L_1| R)P(R)}{P(L_1)}$、 また全確率の定理から、
$P(L_1) = P(L_1 | R)P(R) +P(L_1|\neg R)P(\neg R)$ である。よって、0.029 (有効数字2桁)となる。
N=2のときは、$L_1, L_2$という二つの事象を考えると、 求めるべきものは$P(R|L_1 \cap L_2)$ である。 ベイズ則より、 $P(R|L_1\cap L_2)=\frac{P(L_1 \cap L_2|R)P(R)}{P(L_1\cap L_2)}$
ここで、$P(L_1 \cap L_2)$の値は また全確率の定理を用いて$P(L_1 \cap L_2|R)P(R) + P(L_1 \cap L_2|\neg R)P(\neg R)$により求められる。
それ以外の Nの値の場合については、以上の考えを適用してば答えることができる。
# 計算用
参考: 連続型確率変数の実現値と確率について
『サイコロを振って出た目』を確率変数とみなすと、サイコロを振って出た目は1,2,3,4,5,6という飛び飛びの『実現値』を取る(例えば、3.5という値にはならない)ので、これは離散型確率変数と言われる。 それに対し、人の体重や身長を確率変数とみなすと、体重の場合0kgから300kgの間の値、身長なら0cmから300cmの間の値(連続した値)をとるので連続型確率変数と言って、離散型確率変数とは別の扱いになる。
ここで、離散型確率変数の場合、確率変数をX、その実現値をxiで表すと、確率関数はp(X=xi)と書ける。ところが、連続型確率変数の場合、確率変数をX、その実現値をxiで表すとしても、確率変数Xが実現値xをとる確率はp(X=xi)とは書けない。このことについて腑に落ちない人のためにここで説明する。身長を確率変数とみなそう。するとクラスには実現値170cmの者がいるだろう。50人のクラスで10人がそうだとすれば「適当にクラスから人を選んでその身長が170cmである確率は10/50 = 0.20 」と言いたくなるかもしれない。しかしこれは次のような誤解と混同がある。
まず「誰かの身長がちょうど170cm」という値をとる確率はほとんど0である、という事実を指摘しておこう。なぜなら、170cmという値はどこかで『丸め』を行って得られた値だからである。計測器がcm刻みであったか、mm(ミリメートル)刻みであったか、μm(マイクロメートル)刻みか、nn(ナノメートル)刻みか、。。。ということを考えれば、cm刻みなら170cmということはありそうだが、nn刻みの場合、170cmちょうどいう値が得られるのはほとんど可能性がない、ということは容易に理解できよう。
つまり、我々が日常的に使っている「身長が170cmちょうど」というのは実は(例えば)169.5cmから170.5cmの範囲にある」ことの言い換えになっているのである。連続的に値を取る身長に対して確率のようなものを与える関数を確率密度関数($f(x)$で表す)といい、連続型の確率変数の場合、ある値の幅の区間で定積分したもの(つまり、確率変数の実現値がある幅の値の範囲に入る可能性)が確率となるのである。ちなみに先の例でいえば、$f(x)$を区間[169.5, 170.5]の間で定積分した値が0.20 となる。
なお、身長をcm刻みで表示することにすれば、飛び飛びの値を取ることになり、この場合は「離散型確率変数」として扱われる。
分布関数と確率関数(密度関数)をグラフに書くと:
離散型:上段: 確率関数、下段:分布関数 | 連続型: 上段: 密度関数, 下段: 分布関数 |
---|---|
![]() |
![]() |
![]() |
![]() |
分布関数$F(x)$について次が成り立つ
分布関数は、$P(X < 0)、P(X \leq 0)、P(X < 1)、 P(X \leq 1), P(X < 2)、P(X \leq 2), P (X < \infty)$ を求めれば良い。
明らかに $P(X < 0) = 0, P(X \leq 0) = P(X < 1), P(X \leq 1) = P(X<2), P(X \leq 2)=P(X < \infty) = 1.0$である。
# 計算用
関数$f(x)$を、 $0 < x$ または $\pi < x$ のとき$f(x ) = 0$、 $0 \leq x \leq \pi$ のとき $f(x) = \frac{1}{2}\sin(x)$ とする。
分布関数$F(x)$は、$x < 0$ のとき$F(x)=0、 0 \leq x \leq \pi $のときは、区間 $[0, x]$ における$f(x)$の定積分と等しく、 $\pi < x$ のときは$F(x)=1$である。これを表示すれば良い。
確率関数の性質(1)とは、$0 \leq f(x)$
性質(2)は、区間$[-\infty , +\infty]$ における$f(x)$の(定)積分が 1 になることである。
どちらも示すのは容易であろう。
分布関数$F(x)$は、$0 \leq x$のとき$F(x)=0$、
$0 \leq x \leq \pi$ のときは、区間 $[0, x]$ における$f(x)$の定積分と等しく、
$\pi< x$ のときは$F(x)=1$である。これを表示すれば良い。
# 解答用
確率変数Xが分布$F(x)$に従う確率変数であることを、$X \sim F(x)$と表す
答:
分散の性質の式 「a, bを定数とすると、 $V(X) = E(X^2) - {E(X)}^2$、および$ V(aX + b) = a^2V(X)$」 が成り立つことを示せ。(ヒント: $E(X)$が定数であることを用いる)
答:
答
import numpy.random as random
print(random.randint(1,6)) # 1から6までの整数を一様乱数で生成
ところがサイクロを20回ほど振って平均を求めれば、大抵の場合3.5前後の結果になります。
trial20 = [random.randint(1,6) for _ in range(20)]
print(trial20)
# 出目のリスト
print("mean = %f" % (sum(trial20)/20.0))
ここで、それぞれの目が現れた回数を度数といい、これを棒グラフで表したものをヒストグラムと言います。 ヒストグラムはmatplotlibを用いて表すことができます。
%matplotlib inline
from matplotlib import pyplot as plt
# 出目の出現回数
plt.hist(trial20,bins=6,range=(1,7)) # 出目をx軸に、出現回数をy軸にして表示する, bins=棒の数、range=x軸の範囲
plt.xlabel('dice') # ラベルに日本語は使えないと思って良い
plt.ylabel('frequency')
さらにさいころを振る回数をふやしてみましょう。そうすると、どんどん3.5に近づくことがわかります。このようにたくさんの値をとって平均するとほぼ一定値に近づく、というこの性質は、一見ランダムな値をとるものの性質を解析する手がかりになるといえるでしょう。
for i in [200, 2000, 20000, 200000]:
trials=[random.randint(1,6) for _ in range(i)]
print("%8d times trial : %8.3f" % (i,sum(trials)/(1.0*i)))
# 最後の結果のヒストグラムを表示
plt.hist(trials,bins=6,range=(1,7)) # 出目をx軸に、出現回数をy軸にして表示する, bins=棒の数、range=x軸の範囲
plt.xlabel('dice') # ラベルに日本語は使えないと思って良い
plt.ylabel('frequency')
plt.show()
このように、確率変数$X_1, X_2, \ldots, X_n$が
つまり、個数$n$を無限に増やせば、平均$Z_n$は$\mu$に収束するということになります。これを大数の法則と呼びます。
ここで元の分布がどのようなものでも、これが成り立つということに注意しましょう。ですから、さいころのシミュレーションにおいて、一様分布に従う乱数を発生させ、さいころを振る回数をどんどん増やすと、その平均が期待値の3.5にどんどん近づいていった、というのはこの大数の法則の現れとみなせます。
# 演習問題の解答用
import numpy as np
離散型確率変数$X=0, 1, 2, \cdots, n$について、確率変数$P_k$が次式で表される確率分布を二項分布とよび、$B(n,p)$で表す: $P_k = P(X=k) = {}_nC_k p^k q^{n-k} $ ($k=0, 1, \cdots, n, 0<p<1, p+q=1$)
以下はやらなくてもよいが、ぜひチャレンジしてみよう
練習問題6-1
均等に目が出るサイコロ(六面体)を10回ふって、$k$回だけ2以下の目が出る確率を求めよ
練習問題6-2 確率変数$X$の期待値と分散が次式で表されることを$e^{\theta x}$のマクローリン展開を用いて示せ。
練習問題6-3 二項分布$B(n,p)$の期待値が$\mu=np$、分散が$\sigma^2=npq$であることを示せ。
関数$f(x)$が$x=0$の近傍で無限回微分可能で,次の右辺の級数が収束するとき $$f(x)=f(0)+\frac{f’(0)}{1!}x+\frac{f”(0)}{2!}x^2+\cdots+\frac{f^{(n−1)}(0)}{(n−1)!}x^{n−1}+\cdots$$ が成り立つ. この定理をマクローリンの定理といい,右辺の展開式をマクローリン展開という.(これは,テイラーの定理,テイラー展開を$x=0$の近傍に適用したものとなっている.)
特に$e^x$のマクローリン展開は重要
$$e^{x}=1+\frac{1}{1!}x+\frac{1}{2!}x^2+\cdots+\frac{1}{(n−1)!}x^{n−1}+\cdots$$