Fel i standardavvikelsen vid simulering av en ARMA (1,1) med arima.sim

Jag försöker simulera en ARMA (1,1) -process vars autoregressiva och glidande medelparametrar är respektive 0,74 och 0,47. Dessutom vill jag att de simulerade uppgifterna ska ha medelvärdet 900 och standardavvikelsen lika med 230. För att uppnå detta försökte jag

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 

Medlet för den syntetiska tidsserien är acceptabelt.

mean(fit) #922.749 

Men när jag beräknar standardavvikelsen är skillnaden mellan beräknat värde och det jag föreskrev som standardavvikelsen för fit är för stor.

sd(fit) #511.3077 - almost two times higher than the value I thought I"d observe 

Hur kan jag ändra min kod för att se till att den simulerade serien har en standardavvikelse nära den som jag anger i arima.sim -funktionen?

Svar

sd(fit) är $ \ sqrt {Var (y_t)} $ där $ y_t $ är ARIMA (1,1), men sd du anger i arima.sim samtalet är sd av det vita bruset i serien.

Tänk på AR (1) -processerna $$ y_t = b y_ {t-1} + u_t $$ $$ u_t = \ sigma \ epsilon_t $$ $$ \ epsilon_t \ sim \ mathcal N (0,1) $$ här $ sd (y_t) = \ sqrt {Var (y_t)} $ vilket kan konstateras vara $$ Var (y_t ) = b ^ 2Var (y_ {t-1}) + \ sigma ^ 2Var (\ epsilon_t) $$ så att

$$ Var (y_t) = \ frac {\ sigma ^ 2} {1-b ^ 2} $$

och $ \ sigma $ är standardavvikelsen för $ u_t $ .

Ange 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)) 

returnerar utdata

> sd(fit) [1] 1.041033 > sqrt(s^2/(1-b^2)) [1] 1.03923 

så att sd i arima.sim är $ \ sigma $ .

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *