Fit и предсказывать Arima в R - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь согласовать модель Arima в R с независимой переменной (ARIMAX). Данные соответствия модели содержат как положительные, так и отрицательные числа. Проблема заключается в том, что после подгонки модели функция прогнозирования выбрасывает числа, которые даже близко не соответствуют данным, которые использовались для подгонки модели.

# Sample Data
y <- c( -0.05628948,  0.01907727,  0.00000000, -0.01907727,  0.00000000, -0.01940678,
0.05724351, -0.01875946, -0.03848405,  0.05724351)
x <- c(0.000000000,-0.071700531 ,-0.023863364,  0.013701646,  0.000000000,  0.085009788,
  -0.028666940, -0.046181130, -0.027316528,  0.006895152)

#Fit the model
model <- arima(y, order=c(2,0,1),fixed = c(NA,NA,NA,NA,NA),xreg=x)

#Use the predict function with x again as the input
fore <- predict(model,newxreg = x)[1]

########################Output########################################
Model - 
Call:
arima(y, order = c(2, 0, 1), xreg = x, fixed = c(NA, NA, NA, NA, NA))

Coefficients:
         ar1      ar2      ma1  intercept       x
      -0.7935  -0.5747  -0.2986    -0.0010  0.0569
s.e.   0.4327   0.4399   0.6892     0.0026  0.1245

sigma^2 estimated as 0.0005055:  log likelihood = 22.91,  aic = -33.83

Predict - 

> fore
$`pred`
Time Series:
Start = 11 
End = 20 
Frequency = 1 
[1] -0.03206240 -0.03614031 -0.03341961 -0.03128313 -0.03206240 -0.02722754
[7] -0.03369281 -0.03468892 -0.03361601 -0.03167025

Не уверен, почему все значения из предиката являются только отрицательными (в то время как исходный y имеет как положительные, так и отрицательные значения) и поэтому не совпадают с исходными значениями y. Пожалуйста, порекомендуйте. Спасибо!

x and y

Ответы [ 2 ]

0 голосов
/ 24 июня 2019

Добавьте лямбда = 0 в auto.arima / arima для получения положительного прогноза.

0 голосов
/ 20 июня 2019

Здесь происходит несколько вещей.Во-первых, вы используете predict без аргумента n.ahead.Это предсказывает следующее значение (в момент времени 11 в этом примере), а затем просто использует аргумент x, чтобы слегка изменить это предсказание по отношению к следующим 9 значениям (n.ahead = 1 - это значение по умолчанию дляgnast.Arima).Чтобы получить реальный прогноз временного ряда, используйте forecast или predict с n.ahead = 10.

Другое дело, что вы не должны ожидать, что числа прогноза на следующие 10 периодов времени будут такими же, как предыдущие 10 наблюдений даже с теми же значениями x.Коэффициенты ar и ma отправят прогнозы в направлении.Здесь есть многое в отношении короткой памяти переменных ma и т. Д., Но главное в том, что предсказания в будущее не будут такими же, как в прошлом, даже если переменная x такая же (как в случаеэтого примера).

Я думаю, что ваши основные проблемы рассматриваются в первом абзаце.Вот предсказания с n.ahead = 10 или с использованием функции forecast.

fore <- predict(model,newxreg = x, n.ahead = 10)[1]
fore

$pred
Time Series:
Start = 11 
End = 20 
Frequency = 1 
 [1] -0.032062405 -0.013745753  0.022305060 -0.014876850 -0.003612005
 [6]  0.014262754 -0.009471801 -0.004258822  0.001812099 -0.003776596

forecast(model, xreg = x)
   Point Forecast       Lo 80       Hi 80       Lo 95      Hi 95
11   -0.032062405 -0.06087474 -0.00325007 -0.07612707 0.01200226
12   -0.013745753 -0.05641143  0.02891993 -0.07899728 0.05150577
13    0.022305060 -0.02118176  0.06579188 -0.04420229 0.08881241
14   -0.014876850 -0.05983585  0.03008215 -0.08363571 0.05388201
15   -0.003612005 -0.05066734  0.04344333 -0.07557693 0.06835292
16    0.014262754 -0.03300372  0.06152923 -0.05802508 0.08655059
17   -0.009471801 -0.05694644  0.03800283 -0.08207799 0.06313439
18   -0.004258822 -0.05212230  0.04360466 -0.07745970 0.06894205
19    0.001812099 -0.04610561  0.04972981 -0.07147172 0.07509592
20   -0.003776596 -0.05172413  0.04417094 -0.07710602 0.06955283
...