Jeg prøver å simulere en ARMA (1,1) prosess hvis autoregressive og glidende gjennomsnittsparametere er henholdsvis 0,74 og 0,47. Videre vil jeg at de simulerte dataene skal ha gjennomsnitt 900 og standardavvik lik 230. For å oppnå dette prøvde jeg
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
Gjennomsnittet for den syntetiske tidsserien er akseptabelt.
mean(fit) #922.749
Når jeg beregner standardavviket, er imidlertid forskjellen mellom beregnet verdi og den jeg fastslo som standardavvik for fit
er for stort.
sd(fit) #511.3077 - almost two times higher than the value I thought I"d observe
Hvordan kan jeg endre koden min for å sikre at den simulerte serien vil ha et standardavvik i nærheten av det jeg angir i
arima.sim
-funksjonen?
Svar
sd(fit)
er $ \ sqrt {Var (y_t)} $ der $ y_t $ er ARIMA (1,1), men sd
du angir i arima.sim
samtalen er sd
av den hvite støyen i serien.
Vurder AR (1) -prosessene $$ y_t = b y_ {t-1} + u_t $$ $$ u_t = \ sigma \ epsilon_t $$ $$ \ epsilon_t \ sim \ mathcal N (0,1) $$ her $ sd (y_t) = \ sqrt {Var (y_t)} $ som kan bli funnet å være $$ Var (y_t ) = b ^ 2Var (y_ {t-1}) + \ sigma ^ 2Var (\ epsilon_t) $$ slik at
$$ Var (y_t) = \ frac {\ sigma ^ 2} {1-b ^ 2} $$
og $ \ sigma $ er standardavvik på $ u_t $ .
Spesifisering av en modell i 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))
returnerer utdata
> sd(fit) [1] 1.041033 > sqrt(s^2/(1-b^2)) [1] 1.03923
slik at sd
i arima.sim
er $ \ sigma $ .