Модели функций передачи:: 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]()
Ответы
Ответ 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
Результаты не точны, но они довольно близки.