[R] Forecasting using ARIMAX
Rob Hyndman
Rob.Hyndman at buseco.monash.edu.au
Wed Oct 15 22:45:27 CEST 2008
Hi Siang Li. It would help if you explained what packages you are
using. auto.arima() is in the forecast package and arimax appears to
be from the TSA package.
Using auto.arima() to select the orders is inappropriate because you
are ignoring the regressors. auto.arima() does not currently handle
regressors, but you can get something that is at least consistent by
using lm() to fit a linear model with the regressors and then apply
auto.arima() to the residuals to select the order. Sometime, I'll add
regressors into auto.arima().
On your specific questions:
1. Fit the model using all the data.
2. Ask the author of the TSA package.
Rob
<siang.li.chua <at> acceval-intl.com> writes:
>
> Dear R-helpers,
>
> I would appreicate if someone can help me on the transfer parameter in ARIMAX and also see what I am doing is correct.
>
> I am using ARIMAX with 2 Exogeneous Variables and 10 years data are as follows:
>
> DepVar Period, depVar, IndepVar1 Period, indepVar1, IndepVar2 Period, indepVar2
> Jan 1998,708,Jan 1998,495,Jan 1998,245.490
> Feb 1998,670,Feb 1998,421.25,Feb 1998,288.170
> Mar 1998,642.5,Mar 1998,395,Mar 1998,254.950
> Apr 1998,610,Apr 1998,377.5,Apr 1998,230.640
> :
>
> > (nrowDepVar <- nrow(depVar))
> [1] 545
> > (nTest <- nInstance + nHorizon - 1) #number of latest points reserved for testing
> [1] 13
> > (nTrain <- nrowDepVar - nTest)
> [1] 532
>
> First I use auot.arima to find the best (p,d,q).
>
> > modArima <- auto.arima(depVar[1:nTrain,], trace=TRUE)
>
> ARIMA(2,1,2) with drift : 4402.637
> ARIMA(0,1,0) with drift : 4523.553
> ARIMA(1,1,0) with drift : 4410.036
> ARIMA(0,1,1) with drift : 4442.558
> ARIMA(1,1,2) with drift : 4401.178
> ARIMA(1,1,1) with drift : 4399.421
> ARIMA(1,1,1) : 4398.502
> ARIMA(0,1,1) : 4443.709
> ARIMA(2,1,1) : 4400.818
> ARIMA(1,1,0) : 4409.569
> ARIMA(1,1,2) : 4400.196
> ARIMA(0,1,0) : 4526.782
> ARIMA(2,1,2) : 4401.824
>
> Best model: ARIMA(1,1,1)
>
> > (bestOrder <- cbind(modArima$arma[1],modArima$arma[5],modArima$arma[2]))
> [,1] [,2] [,3]
> [1,] 1 1 1
> > (bestSessionOrder <- cbind(modArima$arma[3],modArima$arma[6],modArima$arma[4]))
> [,1] [,2] [,3]
> [1,] 0 1 0
> > modArimax <- arimax(depVar[1:nTrain,], order=bestOrder,
> xtransf=data.frame(indepVar[1:nTrain,]))
>
> After testing and validation, I think the model is robust enough go for real forecasting.
>
> Q1. Since my model is trained until Jul 2007, I shall 'update' the model to to include values up to Sep 2007,
> how can I 'update' it?
>
> Q2. Now, say I am forecasting for next month Nov 2008. But I yet to have Nov 08 data for the 2 independent
> variables In fact currently, I only have Sep 2008 values. I think the parameter transfer is the solution?
> Would appreciate someone can shed some light on how I can proceed.
>
> Many Thanks.
>
> siangli
_____________________________
Rob J Hyndman
Professor of Statistics, Monash University
Editor-in-Chief, International Journal of Forecasting
http://www.robjhyndman.com/
More information about the R-help
mailing list