Solved – Initialize ARIMA simulations with different time-series

arimaecologyforecastingsimulationtime series

I have a fairly long time-series of annual abundances ($N_t$) of a wildlife species (73 years of abundances). To forecast the population’s trajectory, I have used ARIMA modeling. Examination of the ACF and PACF of the first-order differenced time-series suggested a 10-year cycle exists. So I used a span 10 seasonal difference to account for this periodic pattern. Therefore, the response variable was:
$$
Y_t=(\sqrt{N_t}-\sqrt{N_{t-1}})-(\sqrt{N_{t-10}}-\sqrt{N_{t-11}})
$$
Typically, I would have used a logarithmic transformation but it resulted in heteroscedastic residuals. Examination of the ACF and PACF of $Y_t$ indicated a multiplicative seasonal structure so I fit the model:
$$
ARIMA(0,1,1)(0,1,1)_{10}
$$
using the Forecast Package in R….library(forecast).

Example code for fitting the model:

m1=Arima(y,order=c(0,1,1),seasonal=list(order=c(0,1,1),period=10),include.mean=FALSE)

The residuals of this model were normally distributed, not autocorrelated, and homoscedastic.

I have been using the fitted model from above for some additional simulation work using the simulate.Arima function. However, I would like to initialize the simulation with a different time-series. The arima.sim function allows this but the arima.sim function doesn't seem to handle seasonal ARIMA models. With the simulate.Arima function one can use the future=TRUE option to simulate values that are "future to and conditional on the data" in the model m1. Can the data in the model object m1 simply be replaced to create a simulation that is conditional on different data?

For example:

# Create a new model object for simulation.
m.sim=m1
# Replace the data in the model object with the new data.
m.sim$x=new
# Simulation conditional on the new data.
sim.forecasts=replicate(1000,simulate.Arima(m.sim,future=TRUE,bootstrap=TRUE))

Best Answer

You can "fit" the model to different data and then simulate:

m2 <- Arima(z,model=m1)
simulate.Arima(m2,future=TRUE,bootstrap=TRUE)

m2 will have the same parameters as m1 (they are not re-estimated), but the residuals, etc., are computed on the new data.

However, I am concerned with your model. Seasonal models are for when the seasonality is fixed and known. With animal population data, you almost certainly have aperiodic population cycling. This is a well-known phenomenon and can easily be handled with non-seasonal ARIMA models. Look at the literature on the Canadian lynx data for discussion.

By all means, use the square root, but then I would use a non-seasonal ARIMA model. Provided the AR order is greater than 1, it is possible to have cycles. See

You can do all this in one step:

m1 <- auto.arima(y, lambda=0.5)

Then proceed with your simulations as above.

Related Question