ARMA(1,1)プロセスをシミュレートしようとしています自己回帰と移動平均パラメーターはそれぞれ0.74と0.47です。さらに、シミュレートされたデータの平均を900に、標準偏差を230にしたいと思います。これを実現するために、
合成時系列の平均は許容範囲です。
mean(fit) #922.749
ただし、標準偏差を計算すると、計算値とfit
の標準偏差として指定した値が大きすぎます。
sd(fit) #511.3077 - almost two times higher than the value I thought I"d observe
コードを変更して、シミュレートされた系列の標準偏差が
arima.sim
関数内で指定したものに近いことを確認するにはどうすればよいですか?
回答
sd(fit)
はarima.sim
呼び出しで指定するsd
は。
AR(1)-proces $$ y_t = b y_ {t-1} + u_t $$ $$ u_t = \ sigma \ epsilon_t $$ $$ \ epsilon_t \ sim \ mathcal N(0,1)$$ ここに $ sd(y_t)= \ sqrt {Var(y_t)} $ これは
$$ Var (y_t)= \ frac {\ sigma ^ 2} {1-b ^ 2} $$
および
Rでモデルを指定する
set.seed(100) b <- 0.5 s <- 0.9 fit = arima.sim(list(order = c(1,0,0), ar = b), n = 100000, rand.gen= rnorm, sd = s) sd(fit) sqrt(s^2/(1-b^2))
出力を返します
> sd(fit) [1] 1.041033 > sqrt(s^2/(1-b^2)) [1] 1.03923
したがって、arima.sim
<のsd
/ div>は