Solved – Auto.Arima using xreg giving xreg as insignificant

arimaforecasting

I am trying to forecast volume using ARIMA. I also have a independent variable that I can use in forecasting. When I do a normal linear Regression the Independent variable is very significant. But when I am doing an auto.arima model I got the following model:

ARIMA(3,1,3)
      Estimate Std. Error  z value Pr(>|z|)    
ar1   0.453844   0.043957  10.3248  < 2e-16 ***

ar2  -0.081913   0.046282  -1.7699  0.07675 .  

ar3  -0.510220   0.043070 -11.8463  < 2e-16 ***

ma1  -0.650601   0.033088 -19.6625  < 2e-16 ***

ma2  -0.654464   0.035819 -18.2714  < 2e-16 ***

ma3   0.664126   0.028016  23.7055  < 2e-16 ***

xreg  0.262486   0.355874   0.7376  0.46077 

As you can see the independent variable(xreg) is insignificant here. How do I interpret this?

Best Answer

Recall that auto.arima() fits a regression with ARIMA errors.

The key issue is the treatment of the intercept. lm() will always fit an intercept, but auto.arima(..., allowmean=TRUE) may do so (or remove it - there apparently is no way to force auto.arima() to include the intercept, unless you run lm() first, then call auto.arima() on the residuals).

Some playing around will give you different possible combinations (I'm truncating the output):

> set.seed(1)
> foo <- ts(rnorm(100))
> bar <- rnorm(100)
> summary(lm(foo~bar))

Coefficients:
              Estimate Std. Error t value Pr(>|t|)
(Intercept)  0.1088521  0.0903480   1.205    0.231
bar         -0.0009324  0.0947216  -0.010    0.992

> summary(auto.arima(foo,xreg=bar))

Regression with ARIMA(0,0,0) errors 

Coefficients:
         xreg
      -0.0055
s.e.   0.0944

This is your situation: lm () fits an intercept, auto.arima() doesn't, so the coefficients (and the standard errors, and p values) don't match. You can force these to match by excluding the intercept from the lm() model:

> summary(lm(foo~bar-1))

Coefficients:
     Estimate Std. Error t value Pr(>|t|)
bar -0.005456   0.094863  -0.058    0.954

Adding an offset induces auto.arima() to include the intercept:

> summary(lm(foo+1~bar))

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  1.1088521  0.0903480   12.27   <2e-16 ***
bar         -0.0009324  0.0947216   -0.01    0.992    

> summary(auto.arima(foo+1,xreg=bar))

Regression with ARIMA(0,0,0) errors 

Coefficients:
      intercept     xreg
         1.1089  -0.0009
s.e.     0.0894   0.0938

And the coefficients and (mostly) the standard errors match again.

Related Question