SDEのモンテカルロ分布#
この tutorial は、pyna での実用的な SDE workflow を示します。
BrownianMotion、GeometricBrownianMotion、またはItoSDEで Ito モデルを 定義する。再現可能なサンプル path を
Trajectoryとして生成する。分布推定のため、ベクトル化した Monte Carlo ensemble を実行する。
利用可能な場合は、経験平均、分散、分位点を解析式と比較する。
モデル境界と単一 path 幾何には pyna の SDE クラスを使ってください。大規模 ensemble には、 pyna が専用の ensemble 幾何クラスを持つまで、ベクトル化 NumPy 配列を使います。これにより、 数学的 object model と統計 estimator を混同せずに済みます。単一実現はサンプル trajectory であり、実現の集合は統計推定器です。
Note
下の実行可能 notebook は保存済み出力付きで commit されており、nbsphinx 実行は
無効化されています。数値パラメータを変更するときはローカルで再実行してください。
docs workflow は GitHub Pages で保存済み出力を描画します。
実行可能な notebook:
コピー&ペースト用パターン#
import numpy as np
from pyna.dynamics import GeometricBrownianMotion
gbm = GeometricBrownianMotion(mu=[0.08], sigma=[0.20])
one_path = gbm.euler_maruyama([100.0], (0.0, 1.0), dt=1/252, rng=7)
print(one_path.final) # TimeSeriesSolution is a pyna Trajectory
n_paths = 200_000
rng = np.random.default_rng(20260701)
z = rng.normal(size=n_paths)
log_terminal = (
np.log(100.0)
+ gbm.expected_log_growth()[0] * 1.0
+ gbm.sigma[0] * np.sqrt(1.0) * z
)
terminal = np.exp(log_terminal)
print(np.mean(terminal), np.quantile(terminal, [0.05, 0.5, 0.95]))
拡張メモ#
ItoSDE.diffusion_matrixは scalar、vector、matrix diffusion を受け付けます。ItoSDE.euler_maruyamaは外部から与えたdWincrement を受け付けるため、 common-random-number 実験と回帰テストを決定論的にできます。幾何的主張が意味を持つ場合にのみ、1 本のサンプル path を topology オブジェクトへ 持ち上げてください。Monte Carlo サンプルは分布を推定しますが、自動的に不変集合に なるわけではありません。