Jeg prøver at simulere en ARMA (1,1) proces hvis autoregressive og glidende gennemsnitsparametre er henholdsvis 0,74 og 0,47. Desuden vil jeg have, at de simulerede data skal have gennemsnitlig 900 og standardafvigelse lig med 230. For at opnå dette prøvede jeg >
Gennemsnittet af den syntetiske tidsserie er acceptabelt.
mean(fit) #922.749
Når jeg beregner standardafvigelsen, er forskellen mellem beregnet værdi og den, som jeg angav som standardafvigelsen for fit
, er for stor.
sd(fit) #511.3077 - almost two times higher than the value I thought I"d observe
Hvordan kan jeg ændre min kode for at sikre, at den simulerede serie har en standardafvigelse tæt på den, jeg angiver inden for
arima.sim
-funktionen?
Svar
sd(fit)
er $ \ sqrt {Var (y_t)} $ hvor $ y_t $ er ARIMA (1,1), men sd
du angiver i arima.sim
kaldet er sd
af den hvide støj i serien.
Overvej AR (1) -processerne $$ y_t = b y_ {t-1} + u_t $$ $$ u_t = \ sigma \ epsilon_t $$ $$ \ epsilon_t \ sim \ mathcal N (0,1) $$ her er $ sd (y_t) = \ sqrt {Var (y_t)} $ som kan findes at være $$ Var (y_t ) = b ^ 2Var (y_ {t-1}) + \ sigma ^ 2Var (\ epsilon_t) $$ sådan at
$$ Var (y_t) = \ frac {\ sigma ^ 2} {1-b ^ 2} $$
og $ \ sigma $ er standardafvigelse på $ u_t $ .
Angivelse af en model 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 output
> sd(fit) [1] 1.041033 > sqrt(s^2/(1-b^2)) [1] 1.03923
så sd
i arima.sim
er $ \ sigma $ .