auto.arima()与arima()结果差异:诺丁汉气温时间序列分析
auto.arima() Didn't Pick Your Lower-AIC ARIMA(3,1,3) Model Great question! This is a common point of confusion when using automated ARIMA selection tools like auto.arima()—let’s break down the key reasons this might happen, and what you can investigate next:
1. auto.arima() uses a stepwise (not exhaustive) search by default
By default, auto.arima() doesn’t test every possible (p,d,q) combination—it relies on a stepwise search algorithm to narrow down candidates efficiently. It starts with an initial model, then makes incremental tweaks (adding/removing AR/MA terms, adjusting d) to find lower-AIC options.
Your ARIMA(3,1,3) model might fall outside the path this algorithm takes. For example, if the tool locks into exploring d=0 models first and finds a strong candidate (like your ARIMA(5,0,1)), it might not fully dig into all d=1 combinations that could have a lower AIC.
To test this, force an exhaustive search with:
auto.arima(x.t, trace=True, stepwise=False, approximation=False)
This will evaluate all possible (p,d,q) combinations within default limits, and it’s likely to pick up your ARIMA(3,1,3) model if it truly has the lowest AIC.
2. The choice of d (differencing order) might be driving the discrepancy
auto.arima() first uses statistical tests (like KPSS for stationarity, ADF for unit roots) to pick potential d values. It’s possible these tests suggested d=0 was sufficient for your temperature data, so the tool prioritized non-differenced models.
But manual differencing (d=1) might better capture subtle non-stationarity or trends the tests missed. To verify:
- Run stationarity tests on your original series (
tseries::kpss.test(x.t)) and differenced series (tseries::kpss.test(diff(x.t))). - Compare residual plots and Ljung-Box test results for both models—lower AIC is useful, but you also want residuals that behave like white noise (no lingering autocorrelation).
3. Don’t overlook seasonality!
Your data is monthly average temperatures, which almost certainly has a strong seasonal component. By default, auto.arima() runs in non-seasonal mode. A seasonal ARIMA (SARIMA) model might be a far better fit overall. Try:
auto.arima(x.t, trace=True, seasonal=True)
This will explore seasonal (P,D,Q) terms alongside non-seasonal (p,d,q) terms, potentially leading to an even stronger model than either of your current candidates.
Final checks
Even if ARIMA(3,1,3) has a lower AIC, make sure to:
- Plot residuals to check for remaining patterns or autocorrelation.
- Compare out-of-sample forecast accuracy (e.g., using
forecast::accuracy()on a held-out test set)—AIC is an in-sample metric, and real-world performance matters most.
内容的提问来源于stack exchange,提问作者Thai Phi

