ブログ

強化学習まとめ① 〜有限マルコフ決定過程(Finite MDP)〜

強化学習(Reinforcement Learning)は数式が多く一見難しそうに見えますが、統計学の確率分布の表記に慣れていれば実はそれほど難しくありません。そこで何回かにわけて強化学習の基本トピックに関して取り扱いを行います。
第$1$回は強化学習の問題設定を理解するにあたって「有限マルコフ決定過程(Finite Markov Decision Process)」を取り扱います。Richard S. Suttonの”Reinforcement Learning, second edition: An Introduction“のChapter$3$を参考に作成を行いました。

基本的な理論の確認

MDPの概要

有限マルコフ決定過程(Finite Markov Decision Process)は逐次的意思決定(sequential decision making)のよく用いられてきた定式化である。

“Reinforcement Learning, second edition: An Introduction”のFigure3.1より作成

強化学習の図式化では上のような図がよく用いられるが、これは逐次的意思決定問題の$1$ステップを切り抜いたものであると理解すると良い。エージェント(Agent)が環境(Environment)から状態$S_t$と報酬$R_t$を観測し、行動$A_t$を行うことで次の状態$S_{t+1}$と次の報酬$R_{t+1}$を観測するというのが一連の流れである。ここで$S_{t}$に対して$A_{t}$を実行した際の報酬を$R_t$と定義するか$R_{t+1}$と定義するかは議論の余地があるように思われるが、参照した”Reinforcement Learning, second edition: An Introduction”では$R_{t+1}$を用いているので以下では$R_{t+1}$を用いる。

このように状態$S_t$、報酬$R_t$、行動$A_t$を定義し、実際に一連のプロセスを実行すると下記のような系列(trajectory)が得られる。
$$
\large
\begin{align}
S_0, A_0, R_1, S_1, A_1, R_2, S_2, A_2, …
\end{align}
$$

上記のように考える場合、行列形式で系列を保存することが難しいならば、$R_0=0$とおいて$R_0, S_0, A_0, …$とすることもできると考えられる。また、$S_t, A_t, R_t$はそれぞれ集合表記を用いて下記のように表すことができることも抑えておくと良い。
$$
\large
\begin{align}
S_{t} & \in \mathcal{S} \\
A_{t} & \in \mathcal{A} \\
R_{t} & \in \mathcal{R} \subset \mathbb{R}
\end{align}
$$

状態遷移確率と方策

強化学習を考える上で数式が難しくなりがちなのが状態遷移確率(state-transition probabilities)と方策(policy)である。どちらもエージェントの行動に基づいて状態が遷移する際に用いられる確率分布であるが、「方策」が状態に対するエージェントの行動の確率分布である一方で、「状態遷移確率」はエージェントの行動を受けて環境が状態を変化させるときの確率分布であることは抑えておく必要がある。

方策$\pi(a|s)$は確率分布を表す$P$を用いて下記のように表すことができる。
$$
\large
\begin{align}
\pi(a|s) = P(A_t=a|S_t=s)
\end{align}
$$

また、状態遷移確率$p(s’,r|s,a)$は同様に$P$を用いて下記のように表すことができる。
$$
\large
\begin{align}
p(s’,r|s,a) = P(S_{t+1}=s’,R_{t+1}=r|S_t=s,A_{t}=a)
\end{align}
$$

状態遷移確率$p(s’,r|s,a)$と方策$\pi(a|s)$は価値関数を定義する際にどちらも出てくるのでそれぞれ抑えておく必要がある。方策はエージェント、状態遷移確率は環境が持つ確率分布であると把握しておくとわかりやすいと思われる。

エピソードと報酬和(return)

強化学習の目的は一連の逐次的意思決定$S_0, A_0, R_1, S_1, A_1, R_2, S_2, A_2, …$が完了するまでの獲得報酬を最大化することにある。この一連の意思決定$1$回の単位はエピソード(episode)とされることが多い。

$1$エピソードにおける$t$以降の報酬の和$G_{t}$を下記のように定義することを考える。
$$
\large
\begin{align}
G_{t} & \equiv R_{t+1} + \gamma R_{t+2} + … \\
&= \sum_{k=0}^{\infty} \gamma^{k} R_{t+k+1} \quad (1)
\end{align}
$$

上記の$\gamma$は$0 \leq \gamma \leq 1$を定義域に取り、割引率(discount rate)と呼ばれる。割引率は即時(immediate)に得られる報酬を将来的に得られる報酬よりも重視するという考え方である。

また、$G_{t}$に関して下記のような変形を行うことができる。
$$
\large
\begin{align}
G_{t} & \equiv R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + … \\
&= R_{t+1} + \gamma (R_{t+2} + \gamma R_{t+3} + … ) \\
&= R_{t+1} + \gamma (R_{(t+1)+1} + \gamma R_{(t+1)+2} + … ) \\
&= R_{t+1} + \gamma \sum_{k=0}^{\infty} \gamma^{k} R_{(t+1)+k} \\
&= R_{t+1} + \gamma G_{t+1} \quad (2)
\end{align}
$$

上記で表した$(2)$は数列における漸化式と同様に理解すると良い。$(1)$式、$(2)$式はそれぞれ、数列${ a_{n} }$の$a_{n}$和を$S_{n}$のようにおいた際の下記の式にそれぞれ対応する。
$$
\large
\begin{align}
S_{n} &= \sum_{n}^{\infty} a_x \quad (1)’ \\
S_{n} &= \sum_{n}^{\infty} a_x = a_{n} + a_{n+1} + … \\
&= a_{n} + (a_{n+1} + a_{n}+2 + …) = a_{n} + \sum_{n+1}^{\infty} a_x \quad (2)’
\end{align}
$$

価値関数(value function)・ベルマン方程式(Bellman equation)

強化学習のほぼ全てのアルゴリズムは価値関数(value function)の推定に関係する。

価値関数は状態の価値(how good)を評価する関数だが、状態の価値は以後の報酬和の期待値(expected return)の点から定義される。

方策$\pi(a|s)$に対応する状態$s$の状態価値関数(state-value function)を$v_{\pi}(s)$とおくと、$v_{\pi}(s)$は下記のように定義される。
$$
\large
\begin{align}
v_{\pi}(s) & \equiv \mathbb{E}_{\pi} [G_{t}|S_{t}(s)] \\
&= \mathbb{E}_{\pi} \left[ \sum_{k=0}^{\infty} \gamma^{k} R_{t+k+1} \Bigr| S_{t}=(s) \right], \quad s^{\forall} \in \mathcal{S} \quad (3)
\end{align}
$$

また、状態$s$の価値と同様に状態$s$における行動$a$の価値を計算できると良い場合も多い。よって、状態$s$における行動$a$の価値を表す行動価値関数(action-value function)を$q_{\pi}(s,a)$とおき、下記のように定義される。
$$
\large
\begin{align}
q_{\pi}(s,a) & \equiv \mathbb{E}_{\pi} [G_{t}|S_{t}(s)] \\
&= \mathbb{E}_{\pi} \left[ \sum_{k=0}^{\infty} \gamma^{k} R_{t+k+1} \Bigr| S_{t}=(s),A_{t}=(a) \right]
\end{align}
$$

$(3)$式は前項で取り扱った報酬和に関する変形に基づいて下記のように変形を行うことができる。
$$
\large
\begin{align}
v_{\pi}(s) &= \mathbb{E}_{\pi} [G_{t}|S_{t}(s)] \\
&= \mathbb{E}_{\pi} [R_{t+1} + \gamma G_{t+1}|S_{t}(s)] \\
&= \sum_{a} \pi(a|s) \sum_{s’,r} p(s’,r|s,a) \left[ r + \gamma v_{\pi}(s’) \right], \quad s^{\forall} \in \mathcal{S}
\end{align}
$$

上記を$v_{\pi}$に関するベルマン方程式(Bellman equation)という。

最適方策・最適状態価値関数

強化学習の目的は推定した価値関数などを元に報酬を最大化する方策を見つけることにある。これを最適方策(optimal policy)と定義する。

ここで方策$\pi_{*}$が最適方策であるということは、全ての状態$s$に対して下記が成立することに対応する。
$$
\large
\begin{align}
v_{\pi_{*}}(s) \geq v_{\pi}(s), \quad s^{\forall} \in \mathcal{S}
\end{align}
$$

最適方策に対応する状態価値関数を最適状態価値関数(optimal state-value function)という。ここで、最適状態価値関数を$v_{*}$と定めるとき、$v_{*}(s)$は下記のように表すことができる。
$$
\large
\begin{align}
v_{*}(s) = v_{\pi_{*}}(s) = \max_{\pi} v_{\pi}(s)
\end{align}
$$

上記の数式の解釈にあたっては$\displaystyle \max_{\pi} v_{\pi}(s)$が$v_{\pi}(s)$を最大化する$\pi$に基づく$v_{\pi}(s)$の値を表すことは抑えておくと良い。

また、最適方策に対応する行動価値関数を最適行動価値関数(optimal action-value function)という。ここで、最適行動価値関数を$q_{*}$と定めるとき、$q_{*}(s,a)$は下記のように表すことができる。
$$
\large
\begin{align}
q_{*}(s,a) = q_{\pi_{*}}(s,a) = \max_{\pi} q_{\pi}(s,a)
\end{align}
$$

具体例の確認

6章「確率変数と確率分布」の練習問題解答例〜例題で学ぶ初歩からの統計学[第2版]〜

当記事は「白砂, 例題で学ぶ初歩からの統計学 第$2$版 (日本評論社)」の読解サポートにあたって$6$章「確率変数と確率分布」の練習問題を解説します。
基本的には書籍の購入者向けの解説なので、まだ入手されていない方は下記より入手をご検討ください。また、解説はあくまでサイト運営者が独自に作成したものであり、書籍の公式ページではないことにご注意ください。(そのため著者の意図とは異なる解説となる可能性はあります)

・統計学に関する書籍の解答集
https://www.hello-statisticians.com/answer_textbook

執筆:@kakusan96

演習問題解答例

6.1 確率変数と確率分布

コインの表が出る「回数」は離散確率変数である。
離散型の確率分布の期待値、分散、標準偏差は定義より、下記の通り計算できる。

①期待値は$E[X] = \sum_i p_i x_i$より

$$
\large
\begin{align}
E[X] &= \sum xp(x) \\
&= 0 \cdot \frac{1}{16} + 1 \cdot \frac{1}{4} + 2 \cdot \frac{3}{8} + 3 \cdot \frac{1}{4} + 4 \cdot \frac{1}{16} \\
&=2
\end{align}
$$

②分散は$V[X]=E[ (X-E[X])^ 2]=\sum_i (x_i-\mu)^ 2 p_i$より

$$
\begin{align}
V[X] &= \sum xp(x) \\
&= (0-2)^{2} \cdot \frac{1}{16} + (1-2)^{2} \cdot \frac{1}{4} + (2-2)^{2} \cdot \frac{3}{8} + (3-2)^{2} \cdot \frac{1}{4} + (4-2)^{2} \cdot \frac{1}{16} \\
&= 1
\end{align}
$$

③標準偏差は

$$
\large
\sqrt{1}=1
$$

6.2 二項分布

二項分布 $p(x) = \mathrm{Bin}(n, p)$ は、確率$p$で起こる($1-p$で起こらない)という事象について、n回試行した場合にx回起こる確率についての分布である。
1回の試行で事象Aが起こる確率が$p$であるとき、$n$回この試行を独立に繰り返し、事象Aが$x$回起こる二項分布の期待値(平均値)$E[X]$は$E[X] = np$、分散は$V[X] = np(1-p) $、標準偏差$S$は$S=\sqrt{V[X]} = \sqrt{np(1-p)}$で表される。

よって問のそれぞれの二項分布の期待値、分散、標準偏差は以下のように計算できる。

①$\displaystyle \mathrm{Bin} \left( 18, \frac{1}{3} \right)$

$$
\large
\begin{align}
E[X] &= 18 \cdot \frac{1}{3} = 6 \\
V[X] &= 18 \cdot \frac{1}{3} \cdot \frac{2}{3} = 4 \\
S &= \sqrt{4} = 2
\end{align}
$$

②$\displaystyle \mathrm{Bin} \left( 36, \frac{1}{2} \right)$

$$
\large
\begin{align}
E[X] = 36 \cdot \frac{1}{2} = 18 \\
V[X] = 36 \cdot \frac{1}{2} \cdot \frac{1}{2} = 9 \\
S = \sqrt{9} = 3
\end{align}
$$

③$\displaystyle \mathrm{Bin} \left( 48, \frac{1}{4} \right)$

$$
\large
\begin{align}
E[X] = 48 \cdot \frac{1}{4} = 12 \\
V[X] = 48 \cdot \frac{1}{4} \cdot \frac{3}{4} = 9 \\
S = \sqrt{9} = 3
\end{align}
$$

④$\displaystyle \mathrm{Bin} \left( 150, \frac{2}{5} \right)$

$$
\large
\begin{align}
E[X] &= 150 \cdot \frac{2}{5} = 60 \\
V[X] &= 150 \cdot \frac{2}{5} \cdot \frac{3}{5} = 36 \\
S &= \sqrt{36} = 6
\end{align}
$$

6.3 二項分布

1回の試行で事象Aの起こる確率が$p$、起こらない確率が$q=(1-q)$であるとき、$n$回この試行を独立に繰り返し、事象Aが$x$回起こる確率$P(x)$は$P(x) = Bin(n, p) = {}_n C_x p^ x(1-p)^{n-x}$の二項分布に従う。

今回は$p=1/4$、$q=1-p=3/4$、$n=5$であるため以下のように計算できる。

①$0$人

$$
\large
\begin{align}
P(0) &= _5 C_0 \left( \frac{1}{4} \right)^0 \left( 1-\frac{1}{4} \right)^{(5-0)} \\
&= \frac{243}{1024}
\end{align}
$$

②$1$人

$$
\large
\begin{align}
P(1) &= {}_5 C_1 \left( \frac{1}{4} \right)^1 \left( 1-\frac{1}{4} \right)^{(5-1)} \\
&= \frac{405}{1024}
\end{align}
$$

③$2$人

$$
\large
\begin{align}
P(2) &= {}_5 C_2 \left( \frac{1}{4} \right)^2 \left( 1-\frac{1}{4} \right)^{(5-2)} \\
&= \frac{135}{512}
\end{align}
$$

④$3$人

$$
\large
\begin{align}
P(3) &= {}_5 C_3 \left( \frac{1}{4} \right)^3 \left( 1-\frac{1}{4} \right)^{(5-3)} \\
&= \frac{45}{512}
\end{align}
$$

⑤$4$人

$$
\large
\begin{align}
P(4) &= {}_5 C_4 \left( \frac{1}{4} \right)^4 \left( 1-\frac{1}{4} \right)^{(5-4)} \\
&= \frac{15}{1024}
\end{align}
$$

⑥$5$人

$$
\large
\begin{align}
P(5) &= {}_5 C_5 \left( \frac{1}{4} \right)^5 \left( 1-\frac{1}{4} \right)^{(5-5)} \\
&= \frac{1}{1024}
\end{align}
$$

6.4 ポアソン分布

問題の分布は起こる確率$p$が非常に小さく、試行回数$n$が極めて大きいためポアソン分布に従う。ポアソン分布において$n$回の試行で、事象が$x$回おこる確率$p(x)$は

$$
P(x)=\frac{\lambda^ x e^{-\lambda}}{x!}
$$

ここで、$λ=np$→平均発生回数

また、ポアソン分布の平均値、分散、標準偏差は以下の通りである。

平均値 = $\lambda = np$

分散 = $\lambda =np$

標準偏差 = $\sqrt{np}$

まず、平均発生回数$\lambda = 5/1000 \times 300 = 1.5$である。
よって各発生回数は下記の通りである。

①$0$個

$$
\large
\begin{align}
P(0) &= \frac{1.5^ 0 e^{-1.5}}{0!} = \frac{1}{e^{1.5}} \\
&= \frac{1}{(2.71828)^{1.5}}=0.2231
\end{align}
$$

②$1$個

$$
\large
\begin{align}
P(1) &= \frac{1.5^ 1 e^{-1.5}}{1!} = \frac{1.5}{1×e^{1.5}} \\
&= \frac{1.5}{1×(2.71828)^{1.5}}=0.3347
\end{align}
$$

③$2$個

$$
\large
\begin{align}
P(2) &= \frac{1.5^ 2 e^{-1.5}}{2!} = \frac{1.5^2}{2×e^{1.5}} \\
&= \frac{1.5^2}{2×(2.71828)^{1.5}}=0.2510
\end{align}
$$

④$3$個

$$
\large
\begin{align}
P(3) &= \frac{1.5^ 3 e^{-1.5}}{3!} = \frac{1.5^3}{3×e^{1.5}} \\
&= \frac{1.5^3}{6×(2.71828)^{1.5}} = 0.1255
\end{align}
$$

⑤$4$個

$$
\large
\begin{align}
P(4) &= \frac{1.5^ 4 e^{-1.5}}{4!} = \frac{1.5^4}{4×e^{1.5}} \\
&= \frac{1.5^4}{24×(2.71828)^{1.5}} = 0.0471
\end{align}
$$

⑥$5$個

$$
\large
\begin{align}
P(5) &= \frac{1.5^ 5 e^{-1.5}}{5!} = \frac{1.5^5}{5×e^{1.5}} \\
&=\frac{1.5^5}{120×(2.71828)^{1.5}} = 0.0141
\end{align}
$$

⑦$6$個

$$
\large
\begin{align}
P(6) &= \frac{1.5^ 6 e^{-1.5}}{6!} = \frac{1.5^6}{6×e^{1.5}} \\
&= \frac{1.5^6}{720×(2.71828)^{1.5}} = 0.0035
\end{align}
$$

6.5 ポアソン分布

平均発生回数$\lambda$は$3.5$である。上記の確率$P(x)$はポアソン分布に従うので求める確率は下記の通り。

①求める確率は$P(0)$である。よって

$$
\large
\begin{align}
P(0) &= \frac{3.5^ 0 e^{-3.5}}{0!} = \frac{3.5^0}{e^{3.5}} \\
&= \frac{3.5^0}{(2.71828)^{3.5}} = 0.0302
\end{align}
$$

②求める確率は$P(1)$である。よって

$$
\large
\begin{align}
P(1) &= \frac{3.5^ 1 e^{-3.5}}{1!} = \frac{3.5^1}{e^{3.5}} \\
&= \frac{3.5^1}{1×(2.71828)^{3.5}} = 0.1057
\end{align}
$$

③$1$日に緊急入院する患者が少なくとも$1$人いる事象とは$1$日に緊急入院する患者が$1$人もいないという事象の背反事象である.よって求める確率とは

$$
\large
1 – p(0) = 0.9698
$$

④求める確率は$P(5)$である。よって

$$
\large
\begin{align}
P(5) &= \frac{3.5^ 5 e^{-3.5}}{5!} = \frac{3.5^5}{120×e^{3.5}} \\
&= \frac{3.5^5}{120×(2.71828)^{3.5}} = 0.1322
\end{align}
$$

⑤$1$日に緊急入院する患者が$5$人以上いる事象とは$1$日に緊急入院する患者が$4$人以下である確率の背反事象である。よって求める確率は

$$
\large
1 – (P(0) + P(1) + P(2) + P(3) + P(4) ) = 0.2746 (※計算省略)
$$

⑥2日間、緊急入院する患者が1人もいない確率は

$$
\large
P(0) × P(0) = 0.0009
$$

6.6 正規分布

標準正規分布とは正規分布のうち、平均が$0$、標準偏差が$1$の正規分布である。
標準正規分布表より、確率を求めることができる。

①$P(-0.97 <= z <= 0)$

$$
\large
P(-0.97 \leq z \leq 0) = P(0 \leq z \leq 0.97) = 0.3340
$$

②$P(-2.14 <= z <= 0.67)$

$$
\large
\begin{align}
&P(-2.14 \leq z \leq 0) = P(0 \leq z \leq 2.14) =0.4838 \\
&P(0 \leq z \leq 0.67) = 0.2486 \\
\end{align}
$$

であるので、

$$
\large
(-2.14 \leq z \leq 0.67) = 0.4838 + 0.2486 = 0.7324
$$

③$P(z >= 1.29)$

$$
\large
P(z \geq 0) = 0.5
$$

であるので、

$$
\large
\begin{align}
P(z \geq 1.29) &= P(z \geq 0) – P(0 \leq z \leq 1.29) \\
&= 0.5 – 0.4015 = 0.0985
\end{align}
$$

④$P(1.03 <= z <= 1.91)$

$$
\large
\begin{align}
P(1.03 \leq z \leq 1.91) &= P(0 \leq z \leq 1.91) – P(0 \leq z \leq 1.03) \\
&= 0.4719 – 0.3485 = 0.1234
\end{align}
$$

6.7 正規分布

正規分布とは連続型確率分布の代表的な分布で$N(\mu, \sigma^2)$で表され、その確率密度関数は

$$
\large
f(x)=\frac{1}{\sigma\sqrt{2\pi}}\exp \left(-\frac{(x-\mu)^ 2}{2\sigma^ 2} \right)
$$

である。ここで、$\mu$は期待値、$\sigma$は標準偏差である。

また、

$$
\large
z = \frac{x-\mu}{\sigma} 
$$

とおくと、zは平均0、標準偏差1の正規分布$N(0, 1)$に従う。
この標準化の変換を行うと求めたい確率を、標準正規分布表から知ることができる。
題意より、確率変数$x$が正規分布$N(52.0, 7.5^2)$に従うため、

$$
\large
z = \frac{x – 52.0}{7.5}
$$

と変換する。

①$P(x>=59.8)$

$$
\large
\begin{align}
P(x \geq 59.8) &= P \left( z \geq \frac{59.8-52.0}{7.5} \right) \\
&= P(z \geq1.04)
\end{align}
$$

よって標準正規分布上で$z\geq1.04$の部分の面積を求める。

$P(z \geq 0) =0.5$であるため、

$$
\large
\begin{align}
P(z \geq 1.04) &= P(z \geq 0) – P(0 \leq z \leq 1.04) \\
&= 0.5 -0.3508 = 0.1492
\end{align}
$$

②$P(61.3<=x<=70.6)$

$$
\large
\begin{align}
P(61.3 \leq x \leq 70.6) &= P \left( \frac{61.3-52.0}{7.5}\leq z \leq \frac{70.6 – 52.0}{7.5} \right) \\
&= P( 1.24\leq z \leq 2.48)\\
\end{align}
$$

よって標準正規分布上で$1.24\leq z \leq 2.48$の部分の面積を求める。

$$
\large
\begin{align}
P( 1.24\leq z \leq 2.48) &= p(0 \leq z \leq 2.48) – P(0 \leq z \leq 1.24) \\
&= 0.4934 – 0.3925 = 0.1009
\end{align}
$$

③$P(x>=36.4)$

$$
\large
\begin{align}
P(x \geq 36.4) &= P \left( z \geq \frac{36.4-52.0}{7.5} \right) \\
&= P(z \geq-2.08)
\end{align}
$$

よって標準正規分布上で$z\geq-2.08$の部分の面積を求める。

$$
\large
\begin{align}
P(z \geq -2.08) &= P(z \geq 0)  + P(0 \leq z \leq 2.08) \\
&= 0.5 + 0.4812 = 0.9812
\end{align}
$$

④$P(45.7<=x<=64.3)$

$$
\large
\begin{align}
P(45.7 \leq x \leq 64.3) &= P\left( \frac{45.7-52.0}{7.5}\leq z \leq \frac{64.3 – 52.0}{7.5} \right) \\
&= P( -0.84\leq z \leq 1.64)
\end{align}
$$

よって標準正規分布上で$-0.84\leq z \leq 1.64$の部分の面積を求める。
$P(- 0.84 \leq z \leq 0) = P(0 \leq z \leq 0.84)$より、

$$
\large
\begin{align}
P( -0.84\leq z \leq 1.64) &= P(0 \leq z \leq 0.84) + P(0 \leq z \leq 1.64) \\
&= 0.2995 + 0.4495 = 0.749
\end{align}
$$

6.8 正規分布

題意より、身長は$N(151.4, 5^2)$の正規分布に従う。

①上記の正規分布の確率密度関数を$P(x)$とおくと求める確率は$P(x \geq 160)$であり、この確率を標準化して、確率を求めると

$$
\large
\begin{align}
P \left( z \geq \frac{160-151.4}{5} \right) &= P(z \geq 1.72) \\
&= P(z \geq 0) – P(z \leq 1.72) \\
&= 0.5 – 0.4573 \\
&= 0.0427
\end{align}
$$

これが表すのは、$x$が$160$以上になる、つまり身長が$160$cm以上になる確率は$0.0427$であるということである。
よって、$200$人のうち$160$cm以上の児童は$200 × 0.0427 = 8.54$で約$9$人である。

②求める確率は$P(145 \leq x \leq 155)$であり、この確率を標準化して確率を求めると

$$
\large
\begin{align}
P \left( \frac{145-151.4}{5} \leq z \leq \frac{155-151.4}{5} \right) &= P(-1.28 \leq z \leq 0.72 ) \\
&= P(0 \leq z \leq 1.28) + P(0 \leq z \leq 0.72) \\
&= 0.3997 + 0.2642 \\
&= 0.6639
\end{align}
$$

これが表すのは、$x$が145以上、$155$以下になる、つまり身長が$145$cm以上、$155$cm以下になる確率は$0.6639$であるということである。
よって$200$人のうち、身長が$145$cm以上、$155$cm以下の児童は$200 × 0.6639 = 132.78$で約$133$人である。

③$200$人のうち、上位$5$人に入るということは$5/200 = 0.025$の確率である。
そのため、$P( z \geq a) = 0.025$となる$x$の値を求める。

$$
\large
\begin{align}
P(z \geq a) &= 0.025 \\
P(z \geq 0) – P(0 \leq z \leq a) &= 0.025 \\
0.5 -P(0 \leq z \leq a) &= 0.025 \\
P(0 \leq z \leq a) &= 0.4975
\end{align}
$$

標準正規分布より、$0.4975$に近い値$a$の値は$1.96$である。
ここで、$z \geq 1.96 $のときのxの値を求める。

$$
\large
\begin{align}
&\frac{x-151.4}{5} \geq 1.96 \\
&x \geq 161.2
\end{align}
$$

よって上位$5$人に入るためには$161.2$cm以上必要である。

6-9(正規分布)

お弁当の売り上げ数の分布における上位$5$%点の確率変数を求める。
確率$95$%で売り切れが出ないようにするためには、仕入れ数を$x$とすると、標準正規分布の範囲では、$P(0 \leq z) = 0.450$となる。

$P(0 \leq z)=0.450$の時、標準正規分布表の値から最も近い値を探すと$1.64$と$1.65$の間であるため$z$の値は$1.645$とする。よって

$$
\large
\begin{align}
&\frac{x-68}{12} = 1.645\\
&x = 87.74
\end{align}
$$

仕入れ数は整数であるため、約$88$個仕入れる必要がある。

参考

・抑えておきたい公式とその簡易的な導出に関して(期待値と分散・共分散)
https://www.hello-statisticians.com/explain-terms-cat/expectation-variance-covariance.html

ワイブル分布(Weibul distribution)の定義と期待値・分散・瞬間故障率の計算

ワイブル分布(Weibul distribution)は瞬間故障率の変化を表す際によく用いられる分布であり、瞬間故障率が一定である指数分布の拡張であると考えることもできる。当記事ではワイブル分布の定義や、期待値・分散・瞬間故障率などの導出に関して取り扱った。
「基礎統計学Ⅰ 統計学入門(東京大学出版会)」の$6.13$節の「ワイブル分布」や「統計学実践ワークブック」の$19$章の「回帰分析その他」を参考に作成を行なった。

ワイブル分布の定義とその理解

ワイブル分布の定義

パラメータ$\lambda, p$のワイブル分布(Weibul distribution)の確率密度関数を$f(t)$とおくと、定義域$t \geq 0$における$f(t)$は下記のように表される。
$$
\large
\begin{align}
f(t) = \lambda p (\lambda t)^{p-1} e^{-(\lambda t)^p}, \quad t \geq 0
\end{align}
$$

上記は「統計学実践ワークブック」の$19$章の定義であるが、「基礎統計学Ⅰ 統計学入門(東京大学出版会)」では$\displaystyle a = \frac{1}{\lambda}, b=p$と置き換えることで下記のように定義される。
$$
\large
\begin{align}
f(t) &= \lambda p (\lambda t)^{p-1} e^{-(\lambda t)^p} \\
&= \frac{b}{a} \times \frac{t^{p-1}}{a^{p-1}} \exp \left( -\frac{t^{b}}{a^{b}} \right) \\
&= \frac{b t^{p-1}}{a^{p}} \exp \left[ – \left( \frac{t^{b}}{a^{b}} \right)^{p} \right], \quad t \geq 0
\end{align}
$$

ワイブル分布と指数分布

ワイブル分布は指数分布の拡張であるので、逆に指数分布はワイブル分布の一例に相当する。このことは前項で確認した確率密度関数$f(t)$に対し、$p=1$を代入することで確認できる。
$$
\large
\begin{align}
f(t) &= \lambda p (\lambda t)^{p-1} e^{-(\lambda t)^p} \\
&= \lambda \times 1 \times (\lambda t)^{1-1} e^{-(\lambda t)^1} \\
&= \lambda e^{-\lambda t}
\end{align}
$$

上記が指数分布の確率密度関数の式に一致する。よって、指数分布はワイブル分布を考えた際に$p=1$となる確率分布であるということが確認できる。

微分方程式を用いた指数分布・ワイブル分布の確率密度関数の導出

累積分布関数$F(t)$や確率密度関数$f(t)$はハザード関数$h(t)$に関する下記の微分方程式を$F(0)=0$の条件下で解くことで導出することができる。
$$
\large
\begin{align}
\frac{d}{dx} (\log{(1-F(x))}) = -h(x)
\end{align}
$$

上記の詳しい導出は「統計学ワークブック19章のまとめ」の「ハザード関数と微分方程式」で取り扱った。

指数分布の方が取り扱いやすいので以下、「指数分布」、「ワイブル分布」の順に導出の確認を行う。

・指数分布
指数分布におけるハザード関数は$h(t)=\lambda$のように表される。このとき微分方程式$\displaystyle \frac{d}{dx} (\log{(1-F(x))}) = -h(x)$は下記のように変形できる。
$$
\large
\begin{align}
\frac{d}{dx} (\log{(1-F(x))}) &= -h(x) \\
\log{(1-F(x))} &= – \int h(x) dx \\
\log{(1-F(x))} &= – \int \lambda dx \\
\log{(1-F(x))} &= – \lambda x + C
\end{align}
$$

上記に対し$x=0, F(0)=0$を代入すると積分定数$C$に関して下記が得られる。
$$
\large
\begin{align}
\log{(1-F(x))} &= – \lambda x + C \\
\log{(1-0)} &= – \lambda \times 0 + C \\
C &= 0
\end{align}
$$

よって、$\log{(1-F(x))} = – \lambda x$のように表すことができ、この式に基づいて$F(x)$と$f(x)$は下記のように導出できる。
$$
\large
\begin{align}
\log{(1-F(x))} &= – \lambda x \\
1 – F(x) &= e^{-\lambda x} \\
F(x) &= 1 – e^{-\lambda x} \\
f(x) &= \frac{d}{dx} F(x) \\
&= \lambda e^{-\lambda x}
\end{align}
$$

上記は指数分布の累積分布関数と確率密度関数の式に一致する。

・ワイブル分布
ワイブル分布におけるハザード関数は$h(t)=\lambda p (\lambda t)^{p-1}$のように表される。このとき微分方程式$\displaystyle \frac{d}{dx} (\log{(1-F(x))}) = -h(x)$は下記のように変形できる。
$$
\large
\begin{align}
\frac{d}{dx} (\log{(1-F(x))}) &= -h(x) \\
\log{(1-F(x))} &= – \int h(x) dx \\
\log{(1-F(x))} &= – \int \lambda p (\lambda x)^{p-1} dx \\
\log{(1-F(x))} &= – \frac{1}{p} \lambda^{p} p x^{p} + C \\
&= -(\lambda x)^{p} + C
\end{align}
$$

上記に対し$x=0, F(0)=0$を代入すると積分定数$C$に関して下記が得られる。
$$
\large
\begin{align}
\log{(1-F(x))} &= -(\lambda x)^{p}+ C \\
\log{(1-0)} &= – 0 + C \\
C &= 0
\end{align}
$$

よって、$\log{(1-F(x))} = -(\lambda x)^{p}$のように表すことができ、この式に基づいて$F(x)$と$f(x)$は下記のように導出できる。
$$
\large
\begin{align}
\log{(1-F(x))} &= -(\lambda x)^{p} \\
1 – F(x) &= e^{-(\lambda x)^{p}} \\
F(x) &= 1 – e^{-(\lambda x)^{p}} \\
f(x) &= \frac{d}{dx} F(x) \\
&= – e^{-(\lambda x)^{p}} \times (-p(\lambda x)^{p-1}) \times \lambda \\
&= \lambda p (\lambda x)^{p-1} e^{-(\lambda x)^{p}}
\end{align}
$$

上記はワイブル分布の累積分布関数と確率密度関数の式に一致する。

・参考

ワイブル分布の期待値・分散・瞬間故障率の計算

ワイブル分布の期待値$E[X]$の計算

ワイブル分布の期待値$E[X]$は確率密度関数$f(x)$を用いて下記のように表すことができる。
$$
\large
\begin{align}
E[X] &= \int_{0}^{\infty} x \times f(x) dx \\
&= \int_{0}^{\infty} x \times \lambda p (\lambda x)^{p-1} e^{-(\lambda x)^p} dx \\
&= \int_{0}^{\infty} p (\lambda x)^{p} e^{-(\lambda x)^p} dx \quad (1)
\end{align}
$$

上記の積分に対し、$u = (\lambda x)^{p}$を定め変数変換を行うことを考える。$u = (\lambda x)^{p}$を$x$について解き$u$で微分を行うと下記がそれぞれ得られる。
$$
\large
\begin{align}
(\lambda x)^{p} &= u \\
\lambda x &= u^{\frac{1}{p}} \\
x &= \frac{u^{\frac{1}{p}}}{\lambda} \quad (2) \\
\frac{dx}{du} &= \frac{d}{du} \left( \frac{u^{\frac{1}{p}}}{\lambda} \right) \\
&= \frac{u^{\frac{1}{p}-1}}{p \lambda} \quad (3)
\end{align}
$$

$(2)$式、$(3)$式を元に$(1)$式は下記のように変数変換できる。
$$
\large
\begin{align}
E[X] &= \int_{0}^{\infty} p (\lambda x)^{p} e^{-(\lambda x)^p} dx \\
&= \int_{0}^{\infty} p u e^{-u} \times \frac{u^{\frac{1}{p}-1}}{p \lambda} du \\
&= \frac{1}{\lambda} \int_{0}^{\infty} u^{1+\frac{1}{p}-1} e^{-u} du = \frac{1}{\lambda} \Gamma \left( 1+\frac{1}{p} \right) \quad (4)
\end{align}
$$

上記の変形にあたっては下記のガンマ関数$\Gamma(a)$の定義を用いた。
$$
\large
\begin{align}
\Gamma(a) = \int_{0}^{\infty} x^{a-1} e^{-x} dx
\end{align}
$$

・参考
ガンマ分布
https://www.hello-statisticians.com/explain-terms-cat/gamma_distribution1.html
変数変換
https://www.hello-statisticians.com/practice/stat_practice15.html

ワイブル分布の分散$V[X]$の計算

分散$V[X]$の計算にあたっては$V[X]=E[X^2]-E[X]^2$を元に考えることで前項の$(4)$式の結果を活用することができる。以下、$E[X^2]$の導出の確認を行う。
$$
\large
\begin{align}
E[X^2] &= \int_{0}^{\infty} x^2 \times f(x) dx \\
&= \int_{0}^{\infty} x^2 \times \lambda p (\lambda x)^{p-1} e^{-(\lambda x)^p} dx \\
&= \int_{0}^{\infty} p (\lambda x)^{p} x e^{-(\lambda x)^p} dx \quad (5)
\end{align}
$$

上記の積分に対し、前項と同様に$u = (\lambda x)^{p}$を定め変数変換を行うことを考える。前項で導出を行なった$(2)$式、$(3)$式を元に$(5)$式は下記のように変数変換できる。
$$
\large
\begin{align}
E[X] &= \int_{0}^{\infty} p (\lambda x)^{p} x e^{-(\lambda x)^p} dx \\
&= \int_{0}^{\infty} p u \frac{u^{\frac{1}{p}}}{\lambda} e^{-u} \times \frac{u^{\frac{1}{p}-1}}{p \lambda} du \\
&= \frac{1}{\lambda^2} \int_{0}^{\infty} u^{1+\frac{2}{p}-1} e^{-u} du = \frac{1}{\lambda^2} \Gamma \left( 1+\frac{2}{p} \right)
\end{align}
$$

$(4)$式、$(6)$式に基づいて$V[X]$は下記のように表すことができる。
$$
\large
\begin{align}
V[X] &= E[X^2] – E[X]^2 \\
&= \frac{1}{\lambda^2} \Gamma \left( 1+\frac{2}{p} \right) – \left( \frac{1}{\lambda} \Gamma \left( 1+\frac{1}{p} \right) \right)^2 \\
&= \frac{1}{\lambda^2} \left[ \Gamma \left( 1+\frac{2}{p} \right) – \Gamma \left( 1+\frac{1}{p} \right)^2 \right]
\end{align}
$$

・参考
期待値、分散の公式
https://www.hello-statisticians.com/explain-terms-cat/expectation-variance-covariance.html
ガンマ分布
https://www.hello-statisticians.com/explain-terms-cat/gamma_distribution1.html
変数変換
https://www.hello-statisticians.com/practice/stat_practice15.html

ワイブル分布の瞬間故障率$h(t)$の計算

$$
\large
\begin{align}
f(t) = \lambda p (\lambda t)^{p-1} e^{-(\lambda t)^p}, \quad t \geq 0
\end{align}
$$
上記で表したワイブル分布の確率密度関数$f(t)$を元に、累積分布関数$F(t)$、生存関数$S(t)$、ハザード関数$h(t)$を導出する。なお、ハザード関数は瞬間故障率と呼ばれることもある。

・累積分布関数$F(t)$
$$
\large
\begin{align}
F(t) &= \int_{0}^{t} f(x) dx \\
&= \int_{0}^{t} \lambda p (\lambda x)^{p-1} e^{-(\lambda x)^p} dx \\
&= \int_{0}^{t} \frac{d}{dx} \left( – e^{-(\lambda x)^p} \right) dx \\
&= \left[ – e^{-(\lambda x)^p} \right]_{0}^{t} \\
&= 1 – e^{-(\lambda t)^p}
\end{align}
$$

・生存関数$S(t)$
$$
\large
\begin{align}
S(t) &= 1 – F(t) \\
&= 1 – (1 – e^{-(\lambda t)^p}) \\
&= e^{-(\lambda t)^p}
\end{align}
$$

・ハザード関数、瞬間故障率$h(t)$
$$
\large
\begin{align}
h(t) &= \frac{f(t)}{S(t)} \\
&= \frac{\lambda p (\lambda t)^{p-1} e^{-(\lambda t)^p}}{e^{-(\lambda t)^p}} \\
&= \lambda p (\lambda t)^{p-1}
\end{align}
$$

ハザード関数$h(t)$の解釈にあたっては、まず$p=1$のとき$h(t)=\lambda$となり、指数関数のハザード関数と一致することは抑えておくと良い。また、ハザード関数が$t$の増加に伴い増大するか減少するかを確認することで機械の劣化による故障率の増加を表すことができる。

ここで$h(t) = \lambda p (\lambda t)^{p-1}$の関数は、$p>1$であれば$t$の増加に伴い$h(t)$が増大し、$p<1$であれば$t$の増加に伴い$h(t)$が減少することが関数を確認することでわかる。

「$t$の増加に伴い$h(t)$が増大すること」をIFR(Increasing Failure Rate)、「$t$の増加に伴い$h(t)$が減少すること」をDFR(Decreasing Failure Rate)ということも合わせて抑えておくと良い。

参考

・統計学実践ワークブック19章: 回帰分析その他
・赤本 章末課題6.6: 指数分布の瞬間故障率
・統計検定 1級 理工学 出題問題

Pythonを用いたMCMCのプログラミング 〜メトロポリス法、HMC法、NUTS etc〜

数式だけの解説ではわかりにくい場合もあると思われるので、統計学の手法や関連する概念をPythonのプログラミングで表現します。当記事ではMCMCを取扱う際に出てくるメトロポリスヘイスティングス法、HMC法、NUTSなどの手法に関して取り扱います。

・Pythonを用いた統計学のプログラミングまとめ
https://www.hello-statisticians.com/stat_program

基本的な手法

メトロポリス法

$$
\large
\begin{align}
f(x) &= 0.1 \phi(-2) + 0.7 \phi(0) + 0.1 \phi(5) \\
\phi(\mu) &= \frac{1}{\sqrt{2 \pi}} \exp \left( -\frac{(x-\mu)^2}{2} \right)
\end{align}
$$
上記の数式に基づく混合分布を目標分布と考えるとき、下記を実行することで混合分布の描画を行うことができる。

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

x = np.arange(-10.,10.01,0.01)
f_x = 0.2*stats.norm.pdf(x,-2.,1.) + 0.7*stats.norm.pdf(x,0.,1.) + 0.2*stats.norm.pdf(x,5.,1.)

plt.plot(x,0.1*stats.norm.pdf(x,-2.,1.),"b--")
plt.plot(x,0.7*stats.norm.pdf(x,0.,1.),"b--")
plt.plot(x,0.2*stats.norm.pdf(x,5.,1.),"b--")
plt.plot(x,f_x,color="green")
plt.show()

・実行結果

以下、ここまでで定義を行なった$f(x)$をメトロポリス法によるサンプリングを元に再現することを考える。下記を実行することでメトロポリス法に基づいてサンプリングや結果の描画を行うことができる。

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

np.random.seed(0)

def f(x):
    return 0.2*stats.norm.pdf(x,-2.,1.) + 0.7*stats.norm.pdf(x,0.,1.) + 0.2*stats.norm.pdf(x,5.,1.)

x = np.arange(-10.,10.01,0.01)
f_x = f(x)

burn_in = 1000
res = np.zeros(10000)
y = 0.
for i in range(burn_in+res.shape[0]):
    y_candidate = y + 0.5*stats.norm.rvs()
    r = f(y_candidate) / f(y)
    u = np.random.rand()
    if u < r:
        y = y_candidate
        if i > burn_in:
            res[i-burn_in] = y

plt.hist(res,bins=20,color="limegreen")
plt.show()

・実行結果

メトロポリスヘイスティングス法

ギブスサンプラー

発展的な手法

ハミルトニアンモンテカルロ法

下記で詳しく取り扱った。
・PyMC$3$、Pyroで学ぶ統計モデリング発展

NUTS(No U-Turn Sampler)

下記で詳しく取り扱った。
・PyMC$3$、Pyroで学ぶ統計モデリング発展


統計検定準1級 問題解説 ~2018年6月実施 問3 判別分析~

問題

過去問題は統計検定公式が問題と解答例を公開しています。こちらを参照してください。

・準1級解答
https://www.hello-statisticians.com/toukeikentei-semi1

解答

[1] 解答

$\boxed{ \ \mathsf{記述6}\ }$ :
判別を行うにあたっては$x$方向に沿って5回符号が入れ替わる必要があるので、$4$次式以上でなければならない。よって判別に必要な宰相の次数$p$は$4$であると考えることができる。

[2] 解答

$\boxed{ \ \mathsf{記述7}\ }$ :
SVMはマージン最大化を考えるので、判別曲線に近いサンプルを取り除いても結果は変わらないと考えることができる。

解説

判別分析に関しては主にフィッシャーの線形判別とSVMに関して抑えておくと良いと思います。

・フィッシャーの線形判別
https://www.hello-statisticians.com/explain-terms-cat/linear_discriminant1.html
https://www.hello-statisticians.com/practice/stat_practice10.html

モンテカルロ積分の直感的理解と必要サンプル数の導出・精度向上などまとめ

乱数を用いたモンテカルロ法はモンテカルロ積分やMCMCなど、様々な応用に用いられます。モンテカルロ積分の計算手順自体はそれほど難しくない一方で、数式上は難しそうな表記がなされることが多いので当記事では直感的な理解ができるように取り扱いを行いました。
作成にあたっては「統計学実践ワークブック」の数式表記やWikipediaの定義などを参考に取りまとめを行いました。

モンテカルロ積分の概要

モンテカルロ法とモンテカルロ積分

「統計学実践ワークブック」ではモンテカルロ法とモンテカルロ積分の使い分けがわかりにくいので、Wikipediaの内容の参照を行う。

In mathematics, Monte Carlo integration is a technique for numerical integration using random numbers. It is a particular Monte Carlo method that numerically computes a definite integral.

https://en.wikipedia.org/wiki/Monte_Carlo_integration

モンテカルロ積分(Monte Carlo integration)はモンテカルロ法(a particular Monte Carlo method)の一種とあり、「モンテカルロ法に内包される手法である」と考えると良い。

「モンテカルロ法」は「乱数を用いた計算」を指すので、「モンテカルロ積分」は「乱数を用いた積分値の計算」に対応すると理解しておくと良いと思われる。具体的な積分の式表示に関しては次項で取りまとめを行う。

$0 \leq x \leq 1$区間のモンテカルロ積分

$$
\large
\begin{align}
\theta = \int_{0}^{1} g(x) dx
\end{align}
$$

モンテカルロ積分は一様乱数を用いて上記の$\theta$の推定を行う手法である。ここでの積分の区間が$0 \leq x \leq 1$であることから、一様分布$U[0,1]$に基づいて乱数を生成し、これを用いて$\theta$を推定することを考える。

確率変数$X$が$X \sim U[0,1]$であるとき、$g(X)$の期待値$E[g(X)]$に関して下記が成立する。
$$
\large
\begin{align}
E[g(X)] &= \int_{0}^{1} g(x) f(x) dx \\
&= \int_{0}^{1} g(x) \times 1 dx = \int_{0}^{1} g(x) dx
\end{align}
$$

上記で用いた$f(x)$は一様分布$U[0,1]$の確率密度関数であるので、$0 \leq x \leq 1$の区間では$f(x)=1$であることを元に代入を行なった。ここで下記のように$g(X_1),…,g(X_m)$の標本平均$\hat{\theta}$を考える。
$$
\large
\begin{align}
\hat{\theta} = \frac{1}{m} \sum_{i=1}^{m} g(X_i)
\end{align}
$$

ここで$m \to \infty$のとき、大数の弱法則より$\displaystyle \frac{1}{m} \sum_{i=1}^{m} g(X_i) \to E[g(X)]$が成立する。これは$\displaystyle \lim_{m \to \infty} \hat{\theta} = \theta$と同義である。

ここまでは原理の確認を行なったが、実際にモンテカルロ積分を行う際は$U[0,1]$にしたがって$x_1,…,x_n$のサンプリングを行なったのちに、$g(x_1),…,g(x_n)$の標本平均を計算することで$\theta$の推定を行うと考えておくとよい。

下記にPythonを用いた$\displaystyle \theta = \int_{0}^{1} e^x dx$の推定の例を示す。

import numpy as np

np.random.seed(20)

x_100 = np.random.rand(100)
x_1000 = np.random.rand(1000)
x_10000 = np.random.rand(10000)
x_100000 = np.random.rand(100000)
y_100 = np.e**x_100
y_1000 = np.e**x_1000
y_10000 = np.e**x_10000
y_100000 = np.e**x_100000


print("Population theta: {:.5f}".format(np.e-1))
print("n=100, Estimated theta: {:.5f}".format(np.mean(y_100)))
print("n=1000, Estimated theta: {:.5f}".format(np.mean(y_1000)))
print("n=10000, Estimated theta: {:.5f}".format(np.mean(y_10000)))
print("n=100000, Estimated theta: {:.5f}".format(np.mean(y_100000)))

・実行結果

Population theta: 1.71828
n=100, Estimated theta: 1.73545
n=1000, Estimated theta: 1.70142
n=10000, Estimated theta: 1.73034
n=100000, Estimated theta: 1.71785

実行結果より$n=100,000$の精度が一番高いことが確認できる。また、$n=10000$の精度はあまり良くないが、乱数の設定によっては十分生じうると考えておくと良いと思われる。

区間が$0 \leq x \leq 1$でない場合のモンテカルロ積分

前項では$0 \leq x \leq 1$区間におけるモンテカルロ積分に関して確認を行なったが、当項では区間を変えた際のモンテカルロ積分をどのように計算するかについて確認を行う。

$$
\large
\begin{align}
\theta = \int_{0}^{3} e^{x} dx
\end{align}
$$
以下、具体的に上記のように$g(x)=e^{x}$の$0 \leq x \leq 3$の区間での積分値の推定に関して考える。

$$
\large
\begin{align}
\int_{0}^{3} e^{x} dx = \int_{0}^{1} e^{x} dx + \int_{1}^{2} e^{x} dx + \int_{2}^{3} e^{x} dx
\end{align}
$$
積分値の推定にあたっては上記のように積分の式を分解して考えることで、モンテカルロ積分を行う際に用いる確率密度関数を該当区間で$f(x)=1$となる一様分布に設定することができ、そのまま推定値を計算するだけで良いのでシンプルに考えることができる。

前項のPythonの処理に基づいて$\displaystyle \theta = \int_{0}^{3} e^x dx$の推定の例を示す。

import numpy as np

np.random.seed(20)

theta = 0
for i in range(3):
    x = np.random.rand(100000) + i
    y = np.e**x
    theta += np.mean(y)


print("Population theta: {:.5f}".format(np.e**3-1))
print("Estimated theta: {:.5f}".format(theta))

・実行結果

Population theta: 19.08554
Estimated theta: 19.09739

モンテカルロ積分の精度

推定値の分散・標準偏差の計算

$$
\large
\begin{align}
\hat{\theta} = \frac{1}{m} \sum_{i=1}^{m} g(X_i)
\end{align}
$$

モンテカルロ積分は上記の式を元にパラメータ$\hat{\theta}$の推定値を計算する手法である。これは$\theta$は$\displaystyle \lim_{m \to \infty} \hat{\theta} = \theta = E[g(X_i)] = E[g(X)]$のように考えることができることに基づくが、ここで推定量・推定値に対応する$\hat{\theta}$に対して、$\hat{\theta}$の分散$V[\hat{\theta}]$や標準偏差$SD[\hat{\theta}]$は推定値の精度に対応すると考えることができることは抑えておくと良い。

以下$g(x) = e^x$に対して$X_1,…,X_m \sim U[0,1]$を用いて$\displaystyle \theta = \int_{0}^{1} e^x dx$を推定する際の標準偏差に関して考える。先に$g(X)$の分散$V[g(X)]$の計算を行う。
$$
\large
\begin{align}
V[g(X)] &= E[(g(X)-E[g(x)])^2] \\
&= \int_{0}^{1} \left( g(x) – \int_{0}^{1} g(x) dx \right)^2 dx \\
&= \int_{0}^{1} \left( e^x – \int_{0}^{1} e^x dx \right)^2 dx \\
&= \int_{0}^{1} \left( e^x – \left[ e^x \right]_{0}^{1} \right)^2 dx \\
&= \int_{0}^{1} ( e^x – e + 1 )^2 dx \\
&= \sigma_g^2
\end{align}
$$
上記では結果を$\sigma_g^2$のようにおいたが、推定値の標準偏差を考える場合は実際には値が与えられる場合や推定を行なった値を用いると考えておくとよい。

次に$X_1,…,X_n$が$i.i.d.$のとき、分散$V[\hat{\theta}]$を上記の$\sigma_g^2$を用いて表すことを考える。
$$
\large
\begin{align}
V[\hat{\theta}] &= V \left[ \frac{1}{m} \sum_{i=1}^{m} g(X_i) \right] \\
&= \frac{1}{m^2} V \left[ \sum_{i=1}^{m} g(X_i) \right] \\
&= \frac{1}{m^2} \times m \times V[g(X_i)] \\
&= \frac{1}{m} V[g(X_i)] \\
&= \frac{\sigma_g^2}{m}
\end{align}
$$

上記より、推定量・推定値の標準偏差$SD[\hat{\theta}]$は下記のように表すことができる。
$$
\large
\begin{align}
SD[\hat{\theta}] &= \sqrt{V[\hat{\theta}]} \\
&= \frac{\sigma_g}{\sqrt{m}}
\end{align}
$$

・参考
期待値、分散の公式

精度の向上

参考

・自然科学の統計学 解答
・統計学実践ワークブック 解答

統計検定準1級 問題解説 ~2018年6月実施 論述問題 問2 質的回帰・AIC~

問題

過去問題は統計検定公式が問題と解答例を公開しています。こちらを参照してください。

解答

[1] 解答

$(1)$
確率$P(Y=1|X_1=1,X_2=1)$は下記のように計算することができる。
$$
\large
\begin{align}
P(Y=1|X_1=1,X_2=1) &= \Phi(\alpha_0 + \alpha_1 + \alpha_2) \\
&= \Phi(-0.958 – 0.265 – 0.246) = \Phi(-1.469) \\
&= 0.0709… \simeq 0.071
\end{align}
$$

・追記
SciPyを用いる場合は下記のように計算を行うことができる。

from scipy import stats

print("result: {:.5f}".format(stats.norm.cdf(-0.958 - 0.265 - 0.246)))

・実行結果

result: 0.07092

$(2)$
$\Phi(\alpha_0 + \alpha_1 X_1 + \alpha_2 X_2)$の$X_1, X_2$での偏微分は下記のように計算できる。
$$
\large
\begin{align}
\frac{\partial \Phi(\alpha_0 + \alpha_1 X_1 + \alpha_2 X_2)}{\partial X_1} &= \phi(\alpha_0 + \alpha_1 X_1 + \alpha_2 X_2) \times \frac{\partial}{\partial X_1} (\alpha_0 + \alpha_1 X_1 + \alpha_2 X_2) \\
&= \phi(\alpha_0 + \alpha_1 X_1 + \alpha_2 X_2) \alpha_1 \\
\frac{\partial \Phi(\alpha_0 + \alpha_1 X_1 + \alpha_2 X_2)}{\partial X_2} &= \phi(\alpha_0 + \alpha_1 X_1 + \alpha_2 X_2) \alpha_2
\end{align}
$$

上記を元に限界効果は下記のように計算することができる。
$$
\large
\begin{align}
\frac{\partial P(Y=1|X_1,X_2=0)}{\partial X_1} \Bigr|_{X_1=0} &= \phi(\alpha_0) \alpha_1 \\
&= 0.252 \times (-0.265) \\
&= -0.06678 \\
\frac{\partial P(Y=1|X_1=0,X_2)}{\partial X_2} \Bigr|{X_2=0} &= \phi(\alpha_0) \alpha_2 \\
&= 0.252 \times (-0.246) \\
&= -0.061992
\end{align}
$$

[2] 解答

$(1)$
省略

$(2)$
対数尤度を$l$、自由パラメータの数を$k$とおくとき、AICは下記のような数式で定義される。
$$
\large
\begin{align}
AIC = -2l + 2k
\end{align}
$$

ここでは自由パラメータの数は回帰係数と分散$\sigma^2$が対応するので、変数の数$+2$がここでの$k$の値に一致する。このことに基づいて下記のような計算を行うことでAICの計算結果を得ることができる。

import numpy as np

log_l = np.array([-168.469, -168.304, -166.565, -166.161])
k = np.array([4., 5., 5., 6.])

print(-2*log_l+2*k)

・実行結果

[ 344.938  346.608  343.13   344.322]

上記の結果より、AICが最大になる「日照時間+平均気温+最低気温」の変数の組み合わせを用いると良い。

解説

プロビット回帰を行う際の限界効果の計算などにあたって、合成関数の微分の考え方が出てくるので注意して抑えておくと良いと思います。

参考

・統計検定準1級 まとめ
https://www.hello-statisticians.com/toukeikentei-semi1

統計検定準1級 問題解説 ~2018年6月実施 論述問題 問3 分散分析とブロック因子~

問題

過去問題は統計検定公式が問題と解答例を公開しています。こちらを参照してください。

解答

[1] 解答

ブロック因子の効果を$\gamma_k$とおくと、構造式は下記のように表すことができる。
$$
\large
\begin{align}
Y_{ijk} &= \mu + \alpha_i + \beta_j + (\alpha \beta)_{ij} + \gamma_k + \epsilon_{ijk}, \quad \epsilon_{ijk} \sim N(0,\sigma^2) \\
\sum_{i=1}^{2} \alpha_i &= 0, \quad \sum_{j=1}^{3} \beta_j = 0, \\
\sum_{i=1}^{2} (\alpha \beta)_{ij} &= \sum_{j=1}^{3} (\alpha \beta)_{ij} = 0, \quad \sum_{k=1}^{3} \gamma_k = 0
\end{align}
$$

制御因子$A,B$とブロック因子の交互作用は誤差と考えることができる。

[2] 解答

ブロック因子を用いる乱塊法では、「繰り返しのある二元配置法」では検証することのできなかった日当たりによる変動を考慮することができ、誤差から日当たりによる変動を分離することができる。

[3] 解答

平方和は下記のような手順に沿って計算を行うことができる。

import numpy as np

x = np.array([[[926., 970., 1035.], [1040., 1052., 1076.], [1068., 1057., 1082.]], [[1009., 1033., 1039.], [1054., 1061., 1089.], [1071., 1073., 1093.]]])

S_A = ((np.mean(x[0,:,:])-np.mean(x))**2 + (np.mean(x[1,:,:])-np.mean(x))**2)*9.
S_B = ((np.mean(x[:,0,:])-np.mean(x))**2 + (np.mean(x[:,1,:])-np.mean(x))**2+(np.mean(x[:,2,:])-np.mean(x))**2)*6.
S_C = ((np.mean(x[:,:,0])-np.mean(x))**2 + (np.mean(x[:,:,1])-np.mean(x))**2+(np.mean(x[:,:,2])-np.mean(x))**2)*6.

S_AB = 0
for i in range(x.shape[0]):
    for j in range(x.shape[1]):
        S_AB += ((np.mean(x,axis=2)[i,j]-np.mean(x[i,:,:])-np.mean(x[:,j,:])+np.mean(x))**2)*3.

S_T = np.sum((x-np.mean(x))**2)
S_E = S_T - S_A - S_B - S_C - S_AB 

print("S_A: {:.1f}".format(S_A))
print("S_B: {:.1f}".format(S_B))
print("S_C: {:.1f}".format(S_C))
print("S_AB: {:.1f}".format(S_AB))
print("S_E: {:.1f}".format(S_E))
print("S_T: {:.1f}".format(S_T))

・実行結果

S_A: 2592.0
S_B: 17856.0
S_C: 5268.0
S_AB: 1524.0
S_E: 3218.0
S_T: 30458.0

分散分析表は上記の結果に基づいて下記のように作成することができる。
$$
\large
\begin{array}{|c|*4{c|}}\hline factor & S & \phi & V & F \\
\hline A & 2592.0 & 1 & 2592.0 & 8.0547 \\
\hline B & 17856.0 & 2 & 8928.0 & 27.7439 \\
\hline A \times B & 1524.0 & 2 & 762.0 & 2.3679 \\
\hline C & 5268.0 & 2 & 2634.0 & 8.1852 \\
\hline error & 3218.0 & 10 & 321.8 & \\
\hline Total & 30458.0 & 17 & & \\
\hline
\end{array}
$$

[4] 解答

自由度$(k,m)$の$F$分布の上側確率を$F_{\alpha}(k,m)$とおく。

このとき、$F_{\alpha=0.025}(1,10) = 6.937, F_{\alpha=0.025}(2,10) = 5.456$より、$A,B,C$の因子の主効果は有意である一方で、交互作用$A \times B$は有意ではないと考えられる。

[5] 解答

因子$A$と因子$B$に交互作用が存在しないことより、最適な水準は各因子の水準ごとの平均値より$(A_2,B_3)$が該当すると考えることができる。

解説

ブロック因子を含めると$3$因子の取り扱いであり少々複雑なので、何度か確認することで手法を抑えておくと良いと思います。

参考

・統計検定準1級 まとめ
https://www.hello-statisticians.com/toukeikentei-semi1

統計検定1級 統計応用 問題解説 ~2019年11月実施 全分野共通問題 問5~

統計検定1級の2019年11月の「統計応用、全分野共通問題」の問5の解答例と解説について取り扱いました。他の問題の解答に関しては下記よりご確認ください。
https://www.hello-statisticians.com/stat_certifi_1_app

問題

詳しくは統計検定公式よりご確認ください。

解答

$[1]$
下記のような計算を行うことで$\chi^2$適合度検定を行うことができる。

import numpy as np
from scipy import stats

observed = np.array([24., 48., 16., 12.])
expected = np.array([3., 4., 2., 1.])*10

chi2 = np.sum((observed-expected)**2/expected)

if chi2 > stats.chi2.ppf(1.-0.05,3):
    print("chi^2: {:.2f} and threshold: {:.3f}, reject H_0".format(chi2,stats.chi2.ppf(1.-0.05,3)))
else:
    print("chi^2: {:.2f} and threshold: {:.3f}, accept H_0".format(chi2,stats.chi2.ppf(1.-0.05,3)))

・実行結果

chi^2: 4.00 and threshold: 7.815, accept H_0

$[2]$
下記の計算を行うことによって最小の$k$を求めることができる。

import numpy as np
from scipy import stats

k, flag = 1., 0

while flag==0:
    observed = np.array([6., 12., 4., 3.])*k
    expected = np.array([3., 4., 2., 1.])*k*5./2.

    chi2 = np.sum((observed-expected)**2/expected)

    if chi2 > stats.chi2.ppf(1.-0.05,3):
        print("minimum k: {:.0f}, threshold: {:.3f}, chi^2:{:.2f}".format(k,stats.chi2.ppf(1.-0.05,3),chi2))
        flag = 1

    k += 1.

・実行結果

minimum k: 8, threshold: 7.815, chi^2:8.00

$[3]$
公式の解答が詳しいので省略。

$[4]$
i)
目的関数$\log{L(r,p,q)}$を$r,p,q$でそれぞれ偏微分を行うと下記が得られる。
$$
\large
\begin{align}
\frac{\partial \log{L(r,p,q)}}{\partial r} &= \frac{2f_{OO} + f_{AO} + f_{BO}}{r} – \lambda \\
\frac{\partial \log{L(r,p,q)}}{\partial p} &= \frac{2f_{AA} + f_{AO} + f_{AB}}{p} – \lambda \\
\frac{\partial \log{L(r,p,q)}}{\partial q} &= \frac{2f_{BB} + f_{BO} + f_{AB}}{q} – \lambda
\end{align}
$$

上記がそれぞれ$0$に一致すると考えると、下記のような関係式が得られる。
$$
\large
\begin{align}
2f_{OO} + f_{AO} + f_{BO} &= \lambda r \\
2f_{AA} + f_{AO} + f_{AB} &= \lambda p \\
2f_{BB} + f_{BO} + f_{AB} &= \lambda q
\end{align}
$$

またここで、$2f_{OO} + f_{AO} + f_{BO} + 2f_{AA} + f_{AO} + f_{AB} + 2f_{BB} + f_{BO} + f_{AB} = 2N$より、$\lambda (r+p+q) = \lambda = 2N$が成立する。よって各比率の推定値$\hat{r}, \hat{p}, \hat{q}$は下記のようになる。
$$
\large
\begin{align}
\hat{r} &= \frac{2f_{OO} + f_{AO} + f_{BO}}{2N} \\
\hat{p} &= \frac{2f_{AA} + f_{AO} + f_{AB}}{2N} \\
\hat{q} &= \frac{2f_{BB} + f_{BO} + f_{AB}}{2N}
\end{align}
$$

ⅱ)
パラメータの値$p, q$が与えられたとき、度数$f_{AA}, f_{AO}, f_{BO}, f_{BB}$の期待値は下記のように考えることができる。
$$
\large
\begin{align}
E[f_{AA}] &= Np^2 \\
E[f_{AO}] &= n_A-Np^2 \\
E[f_{BO}] &= Nq^2 \\
E[f_{BB}] &= n_B-Nq^2
\end{align}
$$

解説

公式の解答では$[4]$のⅱ)の解答に関連してEMアルゴリズムを用いたパラメータ推定に関して詳しくまとめられているので、抑えておくと良いと思います。

統計検定1級 統計応用 問題解説 ~2019年11月実施 理工学 問1~

統計検定1級の2019年11月の「統計応用、理工学」の問1の解答例と解説について取り扱いました。他の問題の解答に関しては下記よりご確認ください。
https://www.hello-statisticians.com/stat_certifi_1_app

問題

詳しくは統計検定公式よりご確認ください。

解答

$[1]$
累積分布関数$F(t)$、確率密度関数$f(t)=F'(t)$、生存関数$S(t)=1-F(t)$より、$f(t)$と$S(t)$に関して下記が成立する。
$$
\large
\begin{align}
f(t) &= \frac{d}{dt} F(t) = \frac{d}{dt} (1-S(t)) \\
&= – \frac{d}{dt} S(t)
\end{align}
$$

上記に基づいて$T$の期待値$\displaystyle E[T] = \int_{0}^{\infty} tf(t) dt$は下記のように変形を行うことができる。
$$
\large
\begin{align}
E[T] &= \int_{0}^{\infty} tf(t) dt \\
&= \left[ -t S(t) \right]_{0}^{\infty} + \int_{0}^{\infty} S(t) dt \\
&= \int_{0}^{\infty} S(t) dt
\end{align}
$$

これより、$\displaystyle E[T] = \int_{0}^{\infty} S(t) dt$を示すことができる。また、上記の計算にあたっては$\displaystyle \lim_{n \to \infty} tS(t)=0$を用いた。

$[2]$
・$\displaystyle m(t) = \frac{\int_{t}^{\infty} S(x) dx}{S(t)}$の導出
下記のように数式変形を行うことができる。
$$
\large
\begin{align}
\int_{t}^{\infty} S(x) dx &= \left[ xS(x) \right]_{t}^{\infty} + \int_{t}^{\infty} x f(x) dx \\
&= -t S(t) + S(t) \int_{t}^{\infty} x \frac{f(x)}{S(t)} dx \\
&= S(t) \left[ \int_{t}^{\infty} x \frac{f(x)}{S(t)} dx – t \right] \\
&= S(t) (E[T|T>t] – t) \\
&= S(t) E[T-t|T>t] = S(t) m(t)
\end{align}
$$

上記より、$\displaystyle m(t) = \frac{\int_{t}^{\infty} S(x) dx}{S(t)}$が成立することが示せる。

・$\displaystyle m(t) = \int_{0}^{\infty} \exp \left[ H(t) – H(t+x) \right] dx$の導出
$\displaystyle h(t) = – \frac{t}{dt} \log{S(t)}$より、$H(t) = – \log{S(t)}$が成立する。これより$\displaystyle \int_{0}^{\infty} \exp \left[ H(t) – H(t+x) \right] dx$は下記のように変形できる。
$$
\large
\begin{align}
\int_{0}^{\infty} \exp \left[ H(t) – H(t+x) \right] dx &= \int_{0}^{\infty} \exp \left[ – \log{S(t)} + \log{S(t+x)} \right] dx \\
&= \int_{0}^{\infty} \exp \left[ \frac{S(t+x)}{S(t)} \right] dx \\
&= \frac{1}{S(t)} \int_{0}^{\infty} \exp [ S(t+x) ] dx \\
&= \frac{1}{S(t)} \int_{t}^{\infty} \exp [ S(y) ] dy \\
&= E[T-t|T>t] = m(t)
\end{align}
$$

上記より、$\displaystyle m(t) = \int_{0}^{\infty} \exp \left[ H(t) – H(t+x) \right] dx$が成立することがわかる。

・$\displaystyle S(t) = \exp \left[ – \int_{0}^{t} \frac{1+m'(x)}{m(x)} \right]$の導出
$\displaystyle \int_{t}^{\infty} S(x) dx = m(t)S(t)$の両辺を$t$で微分し、整理すると下記のように変形を行うことができる。
$$
\large
\begin{align}
\frac{d}{dt} \left( \int_{t}^{\infty} S(x) dx \right) &= \frac{d}{dt} \left( m(t)S(t) \right) \\
-S(t) &= m'(t)S(t) + m(t)S'(t) \\
-m(t)S'(t) &= S(t) + m'(t)S(t) \\
-m(t)S'(t) &= (1 + m'(t))S(t) \\
\frac{S'(t)}{S(t)} &= -\frac{1+m'(t)}{m(t)}
\end{align}
$$

上記の両辺を$0$から$t$の区間で積分すると下記が得られる。
$$
\large
\begin{align}
\int_{0}^{t} \frac{S'(x)}{S(x)} dx &= -\int_{0}^{t} \frac{1+m'(x)}{m(x)} dx \\
\left[ \log{S(x)} \right]_{0}^{t} &= -\int_{0}^{t} \frac{1+m'(x)}{m(x)} dx \\
\log{S(t)} &= -\int_{0}^{t} \frac{1+m'(x)}{m(x)} dx
\end{align}
$$

$[3]$
$(1)$
$$
\large
\begin{align}
h(t) = \lim_{\Delta t \to 0} \frac{P(t \leq T \leq t + \Delta t | T \geq t)}{\Delta t}
\end{align}
$$
上記の数式で表されるように、ハザード関数$h(t)$は$t$まで稼働していた製品が$t$で故障する瞬間故障率を表す。

$(2)$
累積ハザード関数$H(t)$が凸関数であることは$H(t)$の$1$階微分であるハザード関数$h(t)$の微分が増加関数であることを表す。同様に$H(t)$が凹関数であることは$h(t)$が減少関数であることを表す。

$[4]$
$(1)$
$g_{\beta}(t)$の累積分布関数$G_{\beta}(t)$とおくと、$T=X^{1/\beta}$より$G_{\beta}(t)$は下記のように表すことができる。
$$
\large
\begin{align}
G_{\beta}(t) &= P(T \leq t) = P(X^{1/\beta} \leq t) \\
&= P(X \leq t^{\beta}) = F(t^{\beta}) = 1 – e^{-t^{\beta}}
\end{align}
$$

上記より、$g_{\beta}(t)$は下記のように導出できる。
$$
\large
\begin{align}
g_{\beta}(t) &= \frac{d}{dt} G_{\beta}(t) \\
&= \beta t^{\beta-1} e^{-t^{\beta}}
\end{align}
$$

次に、$S_{\beta}(t)=1-G_{\beta}(t)=e^{-t^{\beta}}$より、ハザード関数$h_{\beta}(t)$は下記のようになる。
$$
\large
\begin{align}
h_{\beta}(t) &= \frac{g_{\beta}(t)}{S_{\beta}(t)} \\
&= \frac{\beta t^{\beta-1} e^{-t^{\beta}}}{e^{-t^{\beta}}} = \beta t^{\beta-1}
\end{align}
$$

また、ここで$h_{\beta}(t)=\beta t^{\beta-1}$より、$\beta>1$で分布はIFR、$\beta<1$でDFRとなることがわかる。$\beta=1$の場合はIFRかつDFRでこれは指数分布に一致する。

・別解
$g_{\beta}(t)$は確率密度関数の変数変換の考え方を用いて導出することもできる。

$(2)$
$h_{1/2}(t), h_{2}(t)$はそれぞれ下記のように表される。
$$
\large
\begin{align}
h_{1/2}(t) &= \frac{1}{2} t^{-1/2} \\
h_{2}(t) &= 2t
\end{align}
$$

これらのグラフは下記のように描くことができる。

import numpy as np
import matplotlib.pyplot as plt

t = np.arange(0,3,0.01)
h_1_2 = t**(-0.5) / 2.
h_2 = 2*t

plt.plot(t,h_1_2)
plt.plot(t,h_2)

plt.show()

・実行結果

解説

ハザード関数はよく出題されるので、抑えておくと良いと思います。また、$[4]$の$(1)$のような変数変換では確率密度関数の変数変換を用いて導出することもできますが、累積分布関数、生存関数、ハザード関数などが出てくる際は累積分布関数から考えた方がシンプルだと思います。