【发布时间】:2019-02-19 18:18:53
【问题描述】:
我有一个带有自相关残差的时间序列。因此,我的想法是使用 R 中的预测包中的 auto.arima() 函数来找到截距和斜率。
不幸的是,auto.arima() 函数的输出导致拟合线明显不正确。斜率很可能是正确的,但截距太低了。
我正在使用的 r 代码:
require(forecast)
y <- as.numeric(readClipboard())
x <- 1:length(y)
arimareg <- auto.arima(y, xreg=x, max.p=5, max.q=10, max.order = 12, stepwise=FALSE, approximation=FALSE, seasonal=FALSE)
intercept <- unname(arimareg$coef[length(arimareg$coef)-1])
slope <- unname(arimareg$coef[length(arimareg$coef)])
结果: 截取:0.474869856067 斜率:0.00539552660742
我复制到剪贴板的时间序列如下所示:
1.0000
0.9999
0.9993
1.0299
1.0267
1.0305
1.1427
1.1339
1.1323
1.2051
1.2091
1.2087
1.3343
1.3381
1.3361
1.3848
1.3853
1.3865
1.4207
1.4378
1.4394
1.4546
1.4506
1.4518
1.4495
1.4458
1.4461
1.4468
1.4461
1.4470
1.4645
1.4621
1.4592
1.4833
1.4773
1.4738
1.5398
1.5284
1.5302
1.5562
1.5541
1.5501
1.5740
1.5703
1.5715
1.5893
1.5874
1.5867
1.6213
1.6211
1.6175
1.6206
1.6131
1.6038
1.6034
1.6041
1.6015
1.6009
1.5940
1.5865
1.5877
1.5890
1.5885
1.6111
1.6100
1.6065
1.6241
1.6263
1.6250
1.6490
1.6565
1.6560
1.6911
1.6864
1.6837
1.7143
1.7103
1.7102
1.7298
1.7253
1.7341
1.7567
1.7512
1.7455
1.7338
1.7329
1.7276
1.7022
1.6975
1.6928
1.6454
1.6361
1.6293
1.5601
1.5591
1.5508
1.4704
1.4650
1.4655
1.4439
1.4464
1.4486
1.4669
1.4810
1.4872
1.5151
1.5191
1.5223
1.5384
1.5417
1.5449
1.5650
1.5714
1.5741
我确信我在做一些愚蠢的事情,但不幸的是我不知道是什么。
任何帮助将不胜感激!
编辑:我明白现在出了什么问题。如果我的观察值少于 ~160,那么输出中将没有截距。这意味着我存储为截距的值实际上是最后一个 MA() 滞后系数。
上面的代码应该调整自:
intercept <- unname(arimareg$coef[length(arimareg$coef)-1])
收件人:
intercept <- unname(arimareg$coef['intercept'])
问题仍然存在;为什么观察的数量很少时输出中没有截距。
【问题讨论】:
-
为什么不只拟合线性回归?
-
@DmytroFedoriuk 我在许多时间序列中使用该函数,自相关残差越来越严重。所以我需要把它做好,即使在这种特殊情况下这可能有点过头了。