Jessaye de simuler un processus ARMA (1,1) dont les paramètres de moyenne autorégressive et mobile sont respectivement de 0,74 et 0,47. De plus, je veux que les données simulées aient une moyenne égale à 900 et un écart type égal à 230. Pour ce faire, jai essayé
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
La moyenne de la série chronologique synthétique est acceptable.
mean(fit) #922.749
Cependant, lorsque je calcule lécart type, la différence entre la valeur calculée et celle que jai spécifiée comme écart type pour fit
est trop grande.
sd(fit) #511.3077 - almost two times higher than the value I thought I"d observe
Comment puis-je changer mon code pour massurer que la série simulée aura un écart type proche de celui que je stipule dans la fonction
arima.sim
?
Réponse
Le sd(fit)
est $ \ sqrt {Var (y_t)} $ où $ y_t $ est ARIMA (1,1), mais le sd
que vous spécifiez dans lappel arima.sim
est le sd
du bruit blanc de la série.
Considérez les procédures AR (1) $$ y_t = b y_ {t-1} + u_t $$ $$ u_t = \ sigma \ epsilon_t $$ $$ \ epsilon_t \ sim \ mathcal N (0,1) $$ ici le $ sd (y_t) = \ sqrt {Var (y_t)} $ qui peut être trouvé comme $$ Var (y_t ) = b ^ 2Var (y_ {t-1}) + \ sigma ^ 2Var (\ epsilon_t) $$ tel que
$$ Var (y_t) = \ frac {\ sigma ^ 2} {1-b ^ 2} $$
et $ \ sigma $ est lécart type de $ u_t $ .
Spécification dun modèle dans 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))
renvoie la sortie
> sd(fit) [1] 1.041033 > sqrt(s^2/(1-b^2)) [1] 1.03923
donc le sd
dans arima.sim
est $ \ sigma $ .