Am încercat să simulez un proces ARMA (1,1) ai căror parametri medii autoregresivi și mobili sunt, respectiv, 0,74 și 0,47. Mai mult, doresc ca datele simulate să aibă o medie egală cu 900 și abaterea standard egală cu 230. Pentru a realiza acest lucru, am încercat
set.seed(100) fit = arima.sim(list(order = c(1,0,1), ar = 0.74, ma = 0.47), n = 10000, rand.gen= rnorm, sd = 230) + 900
Media seriei de timp sintetice este acceptabilă.
mean(fit) #922.749
Cu toate acestea, atunci când calculez abaterea standard, diferența dintre valoarea calculată și cea pe care am stipulat-o ca deviație standard pentru fit
este prea mare.
sd(fit) #511.3077 - almost two times higher than the value I thought I"d observe
Cum îmi pot schimba codul pentru a mă asigura că seria simulată va avea o abatere standard apropiată de cea pe care o stipulez în funcția
arima.sim
?
Răspuns
sd(fit)
este $ \ sqrt {Var (y_t)} $ unde $ y_t $ este ARIMA (1,1), totuși sd
pe care îl specificați în apelul arima.sim
este sd
al zgomotului alb din serie.
Luați în considerare AR (1) -proces $$ y_t = b y_ {t-1} + u_t $$ $$ u_t = \ sigma \ epsilon_t $$ $$ \ epsilon_t \ sim \ mathcal N (0,1) $$ aici $ sd (y_t) = \ sqrt {Var (y_t)} $ care poate fi găsit ca fiind $$ Var (y_t ) = b ^ 2Var (y_ {t-1}) + \ sigma ^ 2Var (\ epsilon_t) $$ astfel încât
$$ Var (y_t) = \ frac {\ sigma ^ 2} {1-b ^ 2} $$
și $ \ sigma $ este deviația standard a $ u_t $ .
Specificarea unui model în 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))
returnează ieșirea
> sd(fit) [1] 1.041033 > sqrt(s^2/(1-b^2)) [1] 1.03923
deci sd
în arima.sim
este $ \ sigma $ .