Feil i standardavviket ved simulering av en ARMA (1,1) ved hjelp av arima.sim

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 $ .

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *