Simulation de la série ARIMA (1,1,0)

11

J'ai adapté les modèles ARIMA à la série chronologique d'origine, et le meilleur modèle est ARIMA (1,1,0). Maintenant, je veux simuler la série à partir de ce modèle. J'ai écrit le modèle AR (1) simple, mais je ne comprenais pas comment ajuster la différence au sein du modèle ARI (1,1,0). Le code R suivant pour la série AR (1) est:

phi= -0.7048                                 
z=rep(0,100)                                 
e=rnorm(n=100,0,0.345)                       
cons=2.1                                     
z[1]=4.1
for (i in 2:100) z[i]=cons+phi*z[i-1]+e[i]   
plot(ts(Y))                

Comment puis-je inclure le terme de différence ARI (1,1) dans le code ci-dessus. Quelqu'un m'aide à cet égard.

Wazir
la source

Réponses:

21

Si vous souhaitez simuler ARIMA que vous pouvez utiliser arima.simdans R, il n'est pas nécessaire de le faire à la main. Cela générera la série que vous souhaitez.

e <- rnorm(100,0,0.345) 
arima.sim(n=100,model=list(ar=-0.7048,order=c(1,1,0)),start.innov=4.1,n.start=1,innov=2.1+e)

Vous pouvez consulter le code de la façon dont cela est réalisé en tapant la arima.simligne de commande R. Alternativement, si vous le faites vous-même, la fonction que vous recherchez est probablement diffinv. Il calcule l'inverse des différences décalées.

Pour les séquences récursives Ra une belle fonction filter. Donc, au lieu d'utiliser la boucle

z <- rep(NA,100)
z[1] <- 4.1
for (i in 2:100) z[i]=cons+phi*z[i-1]+e[i]   

tu peux écrire

filter(c(4.1,2.1+e),filter=-0.7048,method="recursive")

Cela donnera le résultat identique à l' arima.simexemple ci-dessus:

diffinv(filter(c(4.1,2.1+e),filter=-0.7048,method="recursive")[-1])
mpiktas
la source
votre réponse est merveilleuse
Daniel James
est-il permis pour moi de vous poser une question; ou pouvez-vous me donner un privilège privé pour discuter avec vous seul?
Daniel James
s'il vous plaît aidez-moi à regarder ce stackoverflow.com/questions/60970948/…
Daniel James