我正在使用 Cryer 和 Chan 的书研究时间序列中的干预分析,并且正在尝试了解如何对阶跃响应干预进行编码。我遇到的一个问题是如何区分这两种模型:
似乎唯一的区别在于 (c) 的值被约束为 1。如何将这个约束添加到 arimax 函数中?我相信(b)使用编码
transfer = list(c(1,0))
有没有办法约束=1?
我正在使用 Cryer 和 Chan 的书研究时间序列中的干预分析,并且正在尝试了解如何对阶跃响应干预进行编码。我遇到的一个问题是如何区分这两种模型:
似乎唯一的区别在于 (c) 的值被约束为 1。如何将这个约束添加到 arimax 函数中?我相信(b)使用编码
transfer = list(c(1,0))
有没有办法约束=1?
如果您在 R 中使用 tsoutlier 包,这非常简单。这在直到感谢@javlacalle创建了 tsoutlier 包。请参阅我之前发布的问题。
关于合并回归量,如您发布的干预分析,您可以使用 tsoutlier 包中的 outlier.effects 在 ARIMAX 模型中创建回归量。请参阅下面的示例。这与您所问的类似。你可以改变临时变化的值以获得所需的曲线形状。在下面的示例中,我将其保留为默认值为 0.7。您可以查阅包装手册以获取更多详细信息。tsoutlier 包很棒,因为它可以与 auto.arima 一起使用并自动识别异常值并让您编写这个 arimax 模型。
在下面的示例中,我向您展示了如何合并电平转换和临时更改(这是您正在寻找的)。离群值包在 12 处确定了水平偏移,在 20 处确定了临时变化,我都使用 outliers.effects 函数将它们创建为回归量。临时变化具有衰减效应,在这个例子中很好地体现了这一点。
library(tsoutliers)
library(expsmooth)
library(fma)
## Identify Outliers
outlier.chicken <- tsoutliers::tso(chicken,types = c("AO","LS","TC"),maxit.iloop=10)
outlier.chicken
plot(outlier.chicken)
n <- length(chicken)
## Create Outliers Regressors for ARIMAX
## Two type of outliers Level Shift (LS) and Temprory Change (TC)
mo.ls <- outliers("LS", 12)
ls <- outliers.effects(mo.ls, n)
mo.tc <- outliers("TC", 20)
tc <- outliers.effects(mo.tc, n)
xreg.outliers <- cbind(ls,tc)
## Create Arimax using Outliers as regressor variables.
arima.model <- auto.arima(chicken,xreg=xreg.outliers)
arima.model
异常值检测的输出
Series: chicken
ARIMA(0,1,0)
Coefficients:
LS12 TC20
37.1400 36.3763
s.e. 11.8641 10.9382
sigma^2 estimated as 140.8: log likelihood=-264.19
AIC=534.38 AICc=534.75 BIC=541.08
Outliers:
type ind time coefhat tstat
1 LS 12 1935 37.14 3.130
2 TC 20 1943 36.38 3.326
将异常值合并为 xreg 的 auto.arima 的输出
series: chicken
ARIMA(0,1,0) with drift
Coefficients:
drift LS12 TC20
-2.7450 39.8850 36.3763
s.e. 1.3997 11.6267 10.6414
sigma^2 estimated as 133.2: log likelihood=-262.32
AIC=532.64 AICc=533.26 BIC=541.58
希望这可以帮助
@forecaster 使用我将要签出的包给出了一个很好的答案。这是我使用 arimax 函数的问题的答案。诀窍是看到(假设事件发生在 T=200):
因此,我们可以将 t < 200 的协变量创建为 0,然后创建 1,2,3....200 并使用transfer=list(c(0,0))
我们也可以通过 直接使用这个变量作为回归量xreg
。
使用固定向量来修复 delta = 1。fixed=c(NA,NA,1,NA) 您需要确定 NA 在向量中的位置。请参阅 arima 的文档。我首先估计没有固定向量的 arimax() 以找到正确的位置。然后将固定向量添加到命令并重新运行。