我正在尝试从forecasting with dynamic regression models复制模型,并且我无法使用TSA库中的arimax函数匹配R中的输出。我能够使用SAS非常接近结果,但我想使用R并希望有人知道如何编写arimax函数来实现这一目标。我发现函数有问题(通常根据arima和optim)正确收敛,但在这种情况下会返回一个模型,但参数是关闭的。
该数据是来自astsa
图书馆Box和Jenkins的销售沙子系列的前140个观察结果。
以下是本书中的片段,显示了他们的结果(再次,我可以与SAS接近)以及与R一起使用的代码(以及结果)。我注意到的一件事是在arimax()的帮助文件中有建议" mean-delete"传递函数协变量。我不确定这意味着什么,也不确定这是否是问题的一部分。
从书中可以看出:
这是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;
和估计:
答案 0 :(得分:8)
AR中的ARIMAX模型可能有点难以实现/解释。在这种情况下,有一些事情会让你失望。这里没有特别的顺序:
&#34;平均-删除&#34;是另一种说法&#34;删除平均值&#34;。在这种情况下,它指的是协变量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参数(MA0,MA1和MA2)固定为0(即,只有B ^ 3出现在分子)。要解决此问题,您需要使用fixed
中的ARIMAX()
参数,并为要估算的参数指定NA
,并为省略的0
指定。{/ p>
您在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
结果并不准确,但它们非常接近。