Am adaptat modelele ARIMA la seria de timp originală, iar cel mai bun model este ARIMA (1, 1,0). Acum vreau să simulez seria din acel model. Am scris modelul simplu AR (1), dar nu puteam înțelege cum să ajustez diferența în cadrul modelului ARI (1,1,0). Următorul cod R pentru seria AR (1) este:
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))
Cum includ termenul diferenței ARI (1,1) în codul de mai sus. Oricine mă ajută în acest sens.
Răspuns
Dacă doriți să simulați ARIMA, puteți utiliza arima.sim
în R, nu este necesar să o faceți manual. Aceasta va genera seria dorită.
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)
Puteți analiza codul modului în care se realizează acest lucru tastând arima.sim
în linia de comandă R. Alternativ, dacă o faceți singur, funcția pe care probabil o căutați este diffinv
. Calculează inversul diferențelor întârziate.
Pentru secvențe recursive R
are o funcție frumoasă filter
. Deci, în loc să folosiți buclă
z <- rep(NA,100) z[1] <- 4.1 for (i in 2:100) z[i]=cons+phi*z[i-1]+e[i]
poți scrie
filter(c(4.1,2.1+e),filter=-0.7048,method="recursive")
Acest lucru va da rezultatul identic cu arima.sim
exemplul de mai sus:
diffinv(filter(c(4.1,2.1+e),filter=-0.7048,method="recursive")[-1])