突然終わるかもしれないブログ

確率や統計の内容について記事を書く予定です.

library(sde) (R)

Rのパッケージ,library(sde)の紹介です.

このパッケージでは確率過程のシミュレーションが簡単にできます.

たとえばブラウン運動を発生させたければ

> BM
function (x = 0, t0 = 0, T = 1, N = 100) 

という関数を使うことで,
初期値$x$,初期時刻$t_0$,最終時刻$T$,シミュレーション刻み幅$(T-t_0)/N$
ブラウン運動のパスが生成できます.

この関数を使って

BMpath <- BM(x = 0, t0 = 0, T = 1, N = 1000) 
plot(BMpath)

とすれば,下のようなブラウン運動が生成できます.

f:id:mkprob:20140331012337j:plain

このほかにも,ブラウン橋

BBridge(x=0, y=0, t0=0, T=1, N=100)

や確率微分方程式の解

sde.sim(t0 = 0, T = 1, X0 = 1, N = 100, delta, drift, sigma, 
   drift.x, sigma.x, drift.xx, sigma.xx, drift.t, 
   method = c("euler", "milstein", "KPS", "milstein2", 
   "cdist","ozaki","shoji","EA"), 
   alpha = 0.5, eta = 0.5, pred.corr = T, rcdist = NULL, 
   theta = NULL, model = c("CIR", "VAS", "OU", "BS"),
   k1, k2, phi, max.psi = 1000, rh, A, M=1)

のシミュレーションなども簡単にでき,便利です.


最後に$B_t$を0を出発する標準ブラウン運動として
\[
\mathrm{E} \bigg[B_t\int_0^t B_s {\rm d}s \bigg],
\]
の値をモンテカルロ法で計算したいと思います.

ちなみに解析解は,まず伊藤の公式から
\[
\int_0^t B_s {\rm d}s=tB_t-\int_0^t s {\rm d}B_s,
\]
なので
\begin{eqnarray*}
\mathrm{E} \bigg[B_t\int_0^t B_s {\rm d}s \bigg]&=&t\mathrm{E}[B_t^2]-E[B_t\int_0^t s {\rm d}B_s]\\
&=&t^2-\mathrm{E}\langle B_t, \int_0^t s {\rm d}B_s\rangle\\
&=&t^2-\mathrm{E}\int_0^t s {\rm d}s\\
&=&\frac{t^2}{2}.
\end{eqnarray*}

Rのコードは下の通り.

#E[B_t \int_0^t B_s ds]の計算(モンテカルロ法)
library(sde)
time_max <- 10 #[0,time_max]までBMをシミュレーション
sim_num <- 1000 #BMの各時刻での発生回数
crossvar_mean <- rep(NaN, time_max)
crossvar <- rep(NaN, sim_num)
for(i in 1:time_max){
	for(j in 1:sim_num){
		#BMのpathを生成
		BMpath <- BM(T=i, N=100*i)

		#\int_0^t B_s ds (リーマン和)
		int_Bs_ds <- sum(BMpath[1:(100*i)]/100) 

		crossvar[j] <- BMpath[100*i+1]*int_Bs_ds
	}
	crossvar_mean[i] <- mean(crossvar)
}

plot(crossvar_mean)

結果は以下の通り.

f:id:mkprob:20140331014203j:plain

解析解と一致していることが分かります.