「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。データ分析・語学に力点を置いています。 →現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年1月21日改訂)。

MENU

ファイナンス練習(2021年09月12日)

 業務でC#を用いることになったので、最近勉強していなくて朧気になってきた知識をReviseする意味でも、以下の書籍を読みながらC#で実装してみる。今回はP.192-202まで*1

7. Monte Carloシミュレーション

7.1 乱数の生成

 確率変数Xが一様分布U(a,b)に従う乱数を一様乱数と呼ぶ。特にa=0, b=1のとき標準一様乱数という。
 U_1, U_2,\cdots U(0,1), i.i.d.に対し、その実現値としてu_{1},u_{2},\cdotsが得られたとする。

7.1.1 離散分布に従う乱数の生成方法

 p_i, i=1,2,\cdots,nを確率分布、すなわち


\begin{aligned}
p_i\gt0, \sum_{i=1}^{n}p_i=1
\end{aligned}

とする。更にU_i\sim U(0,1), i.i.d.に対して


{\displaystyle 
\begin{eqnarray}
 X_n= \left\{
    \begin{array}{l}
       y_1, 0\leq U_k\leq p_1\\
       y_i, p_1+\cdots p_{i-1} \lt U_k \leq p_1+\cdots+p_i\\
       y_n, p_1+\cdots p_{n-1} \lt U_k \leq 1
    \end{array}
  \right.
\end{eqnarray}
}

とおくと、


\begin{aligned}
P(\{X_k=y_i\})&=P(\{p_1+\cdots p_{i-1} \lt U_k \leq p_1+\cdots+p_i\})\\
&=P(\{U_k \leq p_1+\cdots+p_i\})-P(\{U_k \leq p_1+\cdots+p_{i-1}\})
\end{aligned}

である。ここでU_k\sim U(0,1)に注意すれば


\begin{aligned}
P(\{U_k=x\})=x,\ \ \ 0\leq x\leq 1
\end{aligned}

であるから、


\begin{aligned}
P(\{X_k=y_i\})=(p_1+\cdots+p_i)-(p_1+\cdots+p_{i-1})=p_i
\end{aligned}

が成り立つ。すなわちX_k


\begin{aligned}
P(\{X_k=y_i\})=p_i
\end{aligned}

に従う離散的な確率変数となる。

7.1.2 連続分布に従う乱数の生成方法

 逆関数が定義可能な分布関数F(x)について、U\sim U(0,1)に対して


\begin{aligned}
X_n=F^{-1}(U_n)
\end{aligned}

とおくと、U\sim U(0,1)の分布関数F_U(x)=xであるから、


\begin{aligned}
P\left(\{X_n\leq x\} \right)&=P\left(\{F^{-1}(U_n)\leq x\} \right)\\
&=P\left(\{U_n\leq F(x)\} \right)\\
&=F(x)
\end{aligned}

が成り立つ。したがって一様乱数u_nに対して


\begin{aligned}
x_n=F^{-1}(u_n)
\end{aligned}

とおけば、分布Fに従う乱数列を得ることが出来る。

7.2 正規乱数

 正規分布N(\mu, \sigma^2)に従う乱数を正規乱数という。正規乱数はさまざまな方法で生成する。
 代表的なのがBox-Muller法である。一様乱数(U_1,U_2)を生成し


{\displaystyle 
\begin{eqnarray}
 \left\{
    \begin{array}{l}
       X_1&=\sqrt{-2\log{u_1}}\cos\left(2\pi u_2\right)\\
       X_2&=\sqrt{-2\log{u_1}}\sin\left(2\pi u_2\right)
    \end{array}
  \right.
\end{eqnarray}
}

にて正規乱数(X_1,X_2)を得る。
 互いに独立に標準正規分布に従う確率変数(Z_1 Z_2)があるとき


\begin{aligned}
f_{Z_1 Z_2}(z_1,z_2)=\displaystyle{\frac{1}{2\pi}}\exp\left({-\frac{{z_1}^2+{z_2}^2}{2}}\right)
\end{aligned}

は円周上で定数値を取る。したがってその偏角


\begin{aligned}
\Theta=\arctan{\frac{Z_2}{Z_1}}
\end{aligned}

(0,2\pi)上で一様分布に従う。
 また


\begin{aligned}
R^2={Z_{1}}^2+{Z_{2}}^2
\end{aligned}

は自由度2カイ二乗分布に従う。カイ二乗分布の性質から、e^{-\frac{R^2}{2}}\sim U(0,1)である。
 以上の性質から、一様乱数U_{1},U_{2}があったときに


\begin{aligned}
\Theta&=2\pi U_1\\
R^2&=2\log{U_2}
\end{aligned}

とおけば、


\begin{aligned}
Z_1&=R^2\cos{\Theta}\\
Z_2&=R^2\sin{\Theta}
\end{aligned}

はいずれも標準正規分布に従う。以上がBox-Muller法の原理である*2

 一般の正規分布には、平均を\mu、分散を\sigma^2とすればZ\sim N(0,1)に対して


\begin{aligned}
X=\mu+\sigma Z\sim N(\mu,\sigma^2)
\end{aligned}

となるから、上式で更に変換すればよい。
 (標準)正規分布の分布関数は逆関数を解析的に計算できないため、(標準)正規乱数を生成する際は、その近似式を用いるないしBox-Muller法を用いる。近似式としては、たとえばMoroの方法が知られている。
 一様乱数U\sim U(0,1)に対して、標準正規乱数X(U)


{\displaystyle 
\begin{eqnarray}
 X(U)= \left\{
    \begin{array}{l}
      (U-0.5)\displaystyle{\frac{\displaystyle{\sum_{j=0}^{3}a_j (U-0.5)^{2j}}}{1+\displaystyle{\sum_{k=1}^{4}b_k(U-0.5)^{2k}}}}\\
      \displaystyle{\sum_{j=0}^{8}c_{j}(\log\left(-\log\left(1-U\right)\right))^{j}}
    \end{array}
  \right.
\end{eqnarray}
}

ここで各変数値は以下のとおりである:

a_0
2.50662823884
a_1
-18.61500062529
a_2
41.39119773534
a_3
-25.44106049637
b_1
-8.47351093090
b_2
23.08336743743
b_3
-21.06224101826
b_4
3.13082909833

また

c_0
0.3374754822726147
c_1
0.9761690190917186
c_2
0.1607979714918209
c_3
0.0276438810333863
c_4
0.0038405729373609
c_5
0.0003951896511919
c_6
0.0000321767881768
c_7
0.0000002888167364
c_8
0.0000003960315187

*1:今回はMoroの方法を実装したものの、裾部分が不自然でうまくいっていない様子であった。恐らく実装に誤りがあるので、改善し次第アップしたい

*2:以上はhttps://www.wikiwand.com/ja/%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%EF%BC%9D%E3%83%9F%E3%83%A5%E3%83%A9%E3%83%BC%E6%B3%95による。

プライバシーポリシー お問い合わせ