Ich versuche, einen ARMA (1,1) -Prozess zu simulieren deren autoregressive und gleitende Durchschnittsparameter 0,74 bzw. 0,47 sind. Außerdem möchte ich, dass die simulierten Daten einen Mittelwert von 900 und eine Standardabweichung von 230 haben. Um dies zu erreichen, habe ich versucht,
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
Der Mittelwert der synthetischen Zeitreihe ist akzeptabel.
mean(fit) #922.749
Wenn ich jedoch die Standardabweichung berechne, ist die Differenz zwischen der Der berechnete Wert und der Wert, den ich als Standardabweichung für fit
angegeben habe, sind zu groß.
sd(fit) #511.3077 - almost two times higher than the value I thought I"d observe
Wie kann ich meinen Code ändern, um sicherzustellen, dass die simulierte Serie eine Standardabweichung aufweist, die der in der Funktion
arima.sim
festgelegten Standardabweichung nahe kommt?
Antwort
Die sd(fit)
ist $ \ sqrt {Var (y_t)} $ wobei $ y_t $ ist ARIMA (1,1), jedoch ist die sd
, die Sie im Aufruf arima.sim
angeben, die sd
des weißen Rauschens in der Serie.
Betrachten Sie die AR (1) -Prozesse $$ y_t = b y_ {t-1} + u_t $$ $$ u_t = \ sigma \ epsilon_t $$ $$ \ epsilon_t \ sim \ mathcal N (0,1) $$ hier die $ sd (y_t) = \ sqrt {Var (y_t)} $ ist $$ Var (y_t) ) = b ^ 2Var (y_ {t-1}) + \ sigma ^ 2Var (\ epsilon_t) $$ , so dass
$$ Var (y_t) = \ frac {\ sigma ^ 2} {1-b ^ 2} $$
und $ \ sigma $ ist die Standardabweichung von $ u_t $ .
Angeben eines Modells in 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))
gibt die Ausgabe zurück
> sd(fit) [1] 1.041033 > sqrt(s^2/(1-b^2)) [1] 1.03923
, sodass die sd
in arima.sim
ist $ \ sigma $ .