Symulacja serii ARIMA (1,1,0)

11

Dopasowałem modele ARIMA do oryginalnej serii czasowej, a najlepszym modelem jest ARIMA (1,1,0). Teraz chcę zasymulować serię z tego modelu. Napisałem prosty model AR (1), ale nie mogłem zrozumieć, jak dostosować różnicę w modelu ARI (1,1,0). Następujący kod R dla serii AR (1) to:

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

Jak dołączyć termin różnicowy ARI (1,1) do powyższego kodu. Każdy mi pomoże w tym względzie.

Wazir
źródło

Odpowiedzi:

21

Jeśli chcesz symulować ARIMA, możesz użyć arima.sim w R, nie musisz tego robić ręcznie. Spowoduje to wygenerowanie żądanej serii.

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)

Możesz spojrzeć na kod, jak to osiągnąć, wpisując arima.simw wierszu polecenia R. Alternatywnie, jeśli zrobisz to sam, prawdopodobnie szukasz funkcjidiffinv . Oblicza odwrotność opóźnionych różnic.

Dla sekwencji rekurencyjnych Rma niezłą funkcjęfilter . Zamiast używać pętli

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

Możesz pisać

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

To da identyczny wynik jak w arima.simpowyższym przykładzie:

diffinv(filter(c(4.1,2.1+e),filter=-0.7048,method="recursive")[-1])
mpiktas
źródło