auto.arima 警告在 std 错误中产生的 NaN

机器算法验证 r 回归 有马
2022-03-16 06:59:52

我的数据是就业人口 L 和时间跨度年份的时间序列。

n.auto=auto.arima(log(L),xreg=year)
summary(n.auto)
Series: log(L) 
ARIMA(2,0,2) with non-zero mean 

Coefficients:
         ar1      ar2      ma1     ma2  intercept    year
      1.9122  -0.9567  -0.3082  0.0254    -3.5904  0.0074
s.e.     NaN      NaN      NaN     NaN     1.6058  0.0008

sigma^2 estimated as 1.503e-06:  log likelihood=107.55
AIC=-201.1   AICc=-192.49   BIC=-193.79

In-sample error measures:
           ME          RMSE           MAE           MPE          MAPE 
-7.285102e-06  1.225907e-03  9.234378e-04 -6.836173e-05  8.277295e-03 
         MASE 
 1.142899e-01 
Warning message:
In sqrt(diag(x$var.coef)) : NaNs produced

为什么会这样?为什么 auto.arima 会选择这些 ar* ma* 系数不是数字的 std 错误的最佳模型?这个选择的模型到底是有效的吗?

我的目标是估计模型 L=L_0*exp(n*year) 中的参数 n。有什么更好的方法建议吗?

TIA。

数据:

L <- structure(c(64749, 65491, 66152, 66808, 67455, 68065, 68950, 
69820, 70637, 71394, 72085, 72797, 73280, 73736, 74264, 74647, 
74978, 75321, 75564, 75828, 76105), .Tsp = c(1990, 2010, 1), class = "ts")
year <- structure(1990:2010, .Tsp = c(1990, 2010, 1), class = "ts")
L
Time Series:
Start = 1990 
End = 2010 
Frequency = 1 
 [1] 64749 65491 66152 66808 67455 68065 68950 69820 70637 71394 72085 72797
[13] 73280 73736 74264 74647 74978 75321 75564 75828 76105
3个回答

AR系数之和接近1,表明参数接近平稳区域的边缘。这将导致难以计算标准误差。但是,估计并没有错,所以如果你只需要的值,你就知道了。L0

auto.arima()需要一些捷径来加快计算速度,当它给出的模型看起来很可疑时,最好关闭这些捷径,看看你会得到什么。在这种情况下:

> n.auto <- auto.arima(log(L),xreg=year,stepwise=FALSE,approx=FALSE)
> 
> n.auto
Series: log(L) 
ARIMA(2,0,0) with non-zero mean 

Coefficients:
         ar1      ar2  intercept    year
      1.8544  -0.9061    11.0776  0.0081
s.e.  0.0721   0.0714     0.0102  0.0008

sigma^2 estimated as 1.594e-06:  log likelihood=107.19
AIC=-204.38   AICc=-200.38   BIC=-199.15

这个模型稍微好一点(例如更小的 AIC)。

您的问题源于规格过高。具有 AR(1) 的简单一阶差分模型就足够了。不需要 MA 结构或功率变换。您也可以简单地将其建模为二阶差分模型,因为 ar(1) 系数接近 1.0。实际/拟合/预测图是

在此处输入图像描述

和残差图

时间段 7 的可能异常值/内部值

有方程

在此处输入图像描述

总之,估计受模型规范的约束,在这种情况下发现需要 [“mene mene tekel upharsin”]。

说真的,我建议你熟悉模型识别策略,不要试图用无根据的结构来厨房下沉你的模型。有时少即是多!简约是一个目标!

希望这可以帮助。为了进一步回答您的问题“为什么 auto.arima 会选择这些 ar* ma* 系数不是数字的标准错误的最佳模型?” 可能的答案是,状态空间解决方案并不完全是因为它尝试了假设模型。但这只是我的猜测。失败的真正原因可能是您对 log xform 的假设。

转型就像毒品——有些对你有好处,有些对你不好。功率变换只能用于将期望值与残差的标准偏差解耦。如果存在链接,则 Box-Cox 变换(包括对数)可能是合适的。从耳后拉动变换可能不是一个好主意。

这个选择的模型到底是有效的吗?当然不!

我遇到过类似的问题。请尝试使用 optim.control 和 optim.method。这些 NaN 是 Hesse 矩阵的对角元素的负值的 sqrt。ARIMA(2,0,2) 的拟合是非线性问题,并且 optim 似乎收敛到鞍点(梯度为零,但 Hesse 矩阵不是正定义的)而不是似然最大值。