サムネがコーヒーの記事は書きかけです。

確率収束シミュレーション 【Pythonで学ぶ統計】

前回行ったモンテカルロ積分で確率収束を感覚的に理解することができました。

ここで、その収束速度についてある一定の法則が成り立ちそうであったため、検証してみることにしまたした。

確率収束

確率収束とは、試行回数nが十分大きいとき、以下のような式が成り立つことを言います。

$$\lim_{n \to \infty}Pr(|X_n-c|\leq\epsilon)=1\quad \forall\epsilon>0$$

ここで、

$$\bar{X_n}=\frac{1}{N}\sum_{k=1}^{n}X_k$$

とすれば、

$$\lim_{n \to \infty}Pr(|\bar{X_n}-\mu|\leq\epsilon)=1$$

$$\iff \lim_{n \to \infty}Pr(|\bar{X_n}-\mu|>\epsilon)=0\quad(\forall\epsilon>0)$$

が成り立ちます。

積分近似の収束

今回はせっかくなのでモンテカルロ積分による近似値と真値の差の収束を見ていきます。

以下のような定積分を定義します。

$$\theta = \int_{4}^{100}sin(sin(\frac{1}{x}))dx$$

一様分布の確率密度関数を考慮して閉区間からのランダムサンプリング平均を以下のように定義すると、

$$\hat{\theta} = \frac{100-4}{N}\sum_{k=0}^{n}f(X_k)$$

確率収束の式から

$$\lim_{n \to \infty}P(|\widehat{\theta}-\theta |\leq\epsilon) = 1 \quad (\forall\epsilon >0)$$

つまり

$$\therefore\widehat{\theta}=\frac{1}{N}\sum_{k}^n f(X_k)\simeq\theta$$

実測値

初めに、sympyを使用して積分真値を求めておきます。


import matplotlib.pyplot as plt 
import numpy  as np 
import sympy as sp 

sp.init_printing(use_unicode=True)
x = sp.symbols('x')
f = sp.sin(sp.sin(1/x))
int_val= sp.integrate(f,(x,4,100)).evalf()
print(int_val)
>>>
3.20857245721918

モンテカルロ積分の実装

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です