Это ошибка в пакете прогноза? Отсутствующие значения приводят к прогнозу. Арима дает ошибочные результаты - PullRequest
0 голосов
/ 10 апреля 2020

Я устанавливаю ARIMA (0, 1, 1) с моделями дрейфа, используя пакет прогноза в R. Некоторые из моих временных рядов имеют пропущенные значения спереди. С прогнозом версии 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 и выше дают плохие результаты без предупреждения.

1 Ответ

0 голосов
/ 15 апреля 2020

Согласно https://cran.r-project.org/src/contrib/Archive/forecast/, v8.5 был выпущен в январе 2019 года и заменен в апреле 2019 года. Текущая версия 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

Создано в 2020-04-15 пакетом представ (v0.3.0)

Теперь исправлено в версии dev с 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

Создано в 2020-04-16 пакетом Представлять (v0.3.0)

...