Подтвердить что ты не робот

Модели функций передачи:: Arimax в TSA

Я пытаюсь реплицировать модель из прогнозирования с динамическими регрессионными моделями, и я не могу сопоставить вывод в R, используя функцию arimax из библиотека TSA. Я могу приблизиться к результату с помощью SAS, но я хочу использовать R и надеяться, что кто-то знает, как закодировать функцию arimax для достижения этого. Я обнаружил, что функция имеет проблемы, обычно связанные с аримой и оптимизацией, сходится должным образом, но в этом случае возвращается модель, но параметры отключаются.

Данные являются первыми 140 наблюдениями из серии продажи песка для продажи из Box и Jenkins в библиотеке astsa.

Вот фрагмент из книги, показывающий их результаты (опять же, я мог бы приблизиться к SAS) и код, используемый с R (и результатами). Одна вещь, которую я отмечаю, находится в файле справки для arimax(), существует рекомендация "котировки" передачи функции "mean-delete". Я не уверен, что это значит и не уверен, что это часть проблемы.

Из книги:

enter image description here

и вот R-код:

library(TSA)
library(Hmisc)
library(astsa)


sales_140<-window(sales,end=140)
lead_140<-window(lead,end=140)

mod<-arimax(window(sales_140,start=4),order=c(0,1,1),
       xtransf = window(Lag(lead_140,3),start=4),transfer = list(c(1,0)),
       xreg=data.frame(seq(1:137)),method="ML")
mod


#Series: window(sales_140, start = 4) 
#ARIMA(0,1,1)                    

#Coefficients:
#         ma1  seq.1.137.  T1-AR1  T1-MA0
#      0.5974      0.3322  0.0613  2.8910
#s.e.  0.0593      0.1111  0.0275  0.1541

#sigma^2 estimated as 0.6503:  log likelihood=-163.94
#AIC=335.87   AICc=336.34   BIC=350.44

Вот код SAS:

proc arima data=BL;
identify var=sales(1) crosscorr=lead(1);
estimate q=1 input=( 3 $ ( 0 ) / ( 1) lead) method=ml;
forecast out = out1 lead = 0;

run; 

и оценки:

enter image description here

4b9b3361

Ответ 1

Модели ARIMAX могут быть немного сложными для реализации/интерпретации в R. В этом случае есть несколько вещей, которые вас подтолкнули. Здесь они не имеют особого порядка:

"mean-delete" - это еще один способ сказать "удалить среднее". В этом случае это относится к ковариации lead_140. Итак, начните с

lead_140_Z <- lead_140 - mean(lead_140).

Порядок модели ARIMAX, которую вы пытаетесь установить, равен (0,1,1), что совпадает с ARMAX (0,1) на данных с первым дифференцированием. Поэтому, вместо того, чтобы работать с различием внутри модели, просто сделайте это заранее:

sales_140_D <- diff(sales_140)
lead_140_D <- diff(lead_140_Z)

В этом случае порядок передаточной функции фактически равен (1,3), но первый и второй параметры MA фиксированы в 0 (т.е. в числителе появляется только B ^ 3). Чтобы решить эту проблему, вам нужно использовать аргумент fixed в ARIMAX() и указать NA для этих параметров для оценки и 0 для тех, кто опускает.

Вам ничего не нужно для xreg, поскольку ковариация происходит при передаче.

mod <- arimax(sales_140_D,
   order=c(0,0,1),
   include.mean=TRUE,
   fixed=c(NA,NA,NA,0,0,0,NA),
   xtransf=lead_140_D,
   transfer=list(c(1,3)),
   method="ML")

mod

# Coefficients:
          ma1  intercept  T1-AR1  T1-MA0  T1-MA1  T1-MA2  T1-MA3
      -0.5791     0.0286  0.7255       0       0       0  4.7092
s.e.   0.0756     0.0090  0.0040       0       0       0  0.0551

Результаты не точны, но они довольно близки.