Snažím se simulovat proces ARMA (1,1) jejichž parametry autoregresního a klouzavého průměru jsou 0,74 resp. 0,47. Navíc chci, aby simulovaná data měla průměrnou hodnotu rovnou 900 a směrodatnou odchylku rovnou 230. Abych toho dosáhl, zkusil jsem to >
Průměr syntetické časové řady je přijatelný.
mean(fit) #922.749
Když však vypočítám směrodatnou odchylku, rozdíl mezi vypočítaná hodnota a ta, kterou jsem stanovil jako standardní odchylku pro fit
, je příliš velká.
sd(fit) #511.3077 - almost two times higher than the value I thought I"d observe
Jak mohu změnit svůj kód, aby simulovaná řada měla standardní odchylku blízkou té, kterou jsem určil uvnitř funkce
arima.sim
?
odpověď
sd(fit)
je $ \ sqrt {Var (y_t)} $ kde $ y_t $ je ARIMA (1,1), ale sd
, který určíte ve arima.sim
volání, je sd
bílého šumu v seriálu.
Zvažte AR (1) -proces $$ y_t = b y_ {t-1} + u_t $$ $$ u_t = \ sigma \ epsilon_t $$ $$ \ epsilon_t \ sim \ mathcal N (0,1) $$ zde $ sd (y_t) = \ sqrt {Var (y_t)} $ , které lze považovat za $$ Var (y_t ) = b ^ 2Var (y_ {t-1}) + \ sigma ^ 2Var (\ epsilon_t) $$ takové, že
$$ Var (y_t) = \ frac {\ sigma ^ 2} {1-b ^ 2} $$
a $ \ sigma $ je standardní odchylka $ u_t $ .
Zadání modelu v 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))
vrací výstup
> sd(fit) [1] 1.041033 > sqrt(s^2/(1-b^2)) [1] 1.03923
takže sd
v arima.sim
je $ \ sigma $ .