这是预测包中的错误吗?缺少值会导致预报。有马给出错误的结果

问题描述 投票:0回答:1

我正在使用R中的预测程序包对ARIMA(0,1,1)进行漂移模型拟合。我的某些时间序列在前面缺少值。对于8.4及更高版本的预测,这不会引起问题。使用8.5及更高版本,我得到了意外的结果。这是一个错误吗?

下面是示例。我的期望是应该忽略前面缺少的值,而预测应该是

[1] 4.644542 4.700419 4.756296

这里是8.5版本的示例。

> library(forecast)
> 
> print(packageVersion("forecast"))
[1] ‘8.5’
> y.ts <- ts(c(NA, NA, NA, NA, NA, NA, NA, NA, 4.02, 4.06, 4.05, 4.01,
+            4.02, 4.04, 4.16, 4.12, 4.15, 4.44, 4.60))
> fit <- Arima(y.ts, c(0, 1, 1), include.drift = T)
> print(fit)
Series: y.ts 
ARIMA(0,1,1) with drift 

Coefficients:
         ma1   drift
      0.6464  0.0559
s.e.  0.5060  0.0447

sigma^2 estimated as 0.009785:  log likelihood=9.79
AIC=-13.58   AICc=-9.58   BIC=-12.67
> print((forecast(fit, 3)$mean))
Time Series:
Start = 20 
End = 22 
Frequency = 1 
[1] 4.197528 4.253405 4.309282

这是8.4版的结果:

> library(forecast)
> 
> print(packageVersion("forecast"))
[1] ‘8.4’
> y.ts <- ts(c(NA, NA, NA, NA, NA, NA, NA, NA, 4.02, 4.06, 4.05, 4.01,
+            4.02, 4.04, 4.16, 4.12, 4.15, 4.44, 4.60))
> fit <- Arima(y.ts, c(0, 1, 1), include.drift = T)
> print(fit)
Series: y.ts 
ARIMA(0,1,1) with drift 

Coefficients:
         ma1   drift
      0.6464  0.0559
s.e.  0.5060  0.0447

sigma^2 estimated as 0.004892:  log likelihood=9.79
AIC=-13.58   AICc=-11.87   BIC=-10.91
> print((forecast(fit, 3)$mean))
Time Series:
Start = 20 
End = 22 
Frequency = 1 
[1] 4.644542 4.700419 4.756296

鉴于两个模型具有相同的系数和残差,我相信它们应该给出相同的预测。我使用系数和残差检查了“手动”预测是什么。这表明版本8.4给出了正确的预测。不管我加载了哪个版本,下一行的输出都是相同的。

> print(y.ts[[length(y.ts)]] + fit$coef[['drift']] + fit$residuals[[length(y.ts)]]*fit$coef[['ma1']])
[1] 4.644542

我还尝试使用最新版本的预测包(撰写本文时为8.12)。结果与版本8.5匹配。

有趣的是,两个模型预测之间的差异几乎是漂移系数的精确倍数,其中乘数等于缺失值的数量:

> (4.644542 - 4.197528)/.0559
[1] 7.996673

在我看来,这可能是一个错误,因为8.4版可以很好地处理这些情况,而8.5版及更高版本会在没有警告的情况下产生不良结果。

r forecasting arima forecast
1个回答
0
投票

根据https://cran.r-project.org/src/contrib/Archive/forecast/,v8.5于2019年1月发布,并于2019年4月被取代。当前版本为v8.12,其给出以下结果。

library(forecast)
packageVersion("forecast")
#> [1] '8.12'
y.ts <- ts(c(NA, NA, NA, NA, NA, NA, NA, NA, 4.02, 4.06, 4.05, 4.01,
          4.02, 4.04, 4.16, 4.12, 4.15, 4.44, 4.60))
fit <- Arima(y.ts, c(0, 1, 1), include.drift = T)
fit
#> Series: y.ts 
#> ARIMA(0,1,1) with drift 
#> 
#> Coefficients:
#>          ma1   drift
#>       0.6464  0.0559
#> s.e.  0.5060  0.0447
#> 
#> sigma^2 estimated as 0.009785:  log likelihood=9.79
#> AIC=-13.58   AICc=-9.58   BIC=-12.67
forecast(fit, 3)$mean
#> Time Series:
#> Start = 20 
#> End = 22 
#> Frequency = 1 
#> [1] 4.197528 4.253405 4.309282

reprex package(v0.3.0)在2020-04-15创建

现在已在开发版本中用this commit修复。

library(forecast)
packageVersion("forecast")
#> [1] '8.12.0.9000'
y.ts <- ts(c(NA, NA, NA, NA, NA, NA, NA, NA, 4.02, 4.06, 4.05, 4.01,
             4.02, 4.04, 4.16, 4.12, 4.15, 4.44, 4.60))
fit <- Arima(y.ts, c(0, 1, 1), include.drift = T)
fit
#> Series: y.ts 
#> ARIMA(0,1,1) with drift 
#> 
#> Coefficients:
#>          ma1   drift
#>       0.6464  0.0559
#> s.e.  0.5060  0.0447
#> 
#> sigma^2 estimated as 0.009785:  log likelihood=9.79
#> AIC=-13.58   AICc=-9.58   BIC=-12.67
forecast(fit, 3)$mean
#> Time Series:
#> Start = 20 
#> End = 22 
#> Frequency = 1 
#> [1] 4.644542 4.700419 4.756296

reprex package(v0.3.0)在2020-04-16创建

© www.soinside.com 2019 - 2024. All rights reserved.