R TSA 包中的干预分析编码

机器算法验证 r 时间序列 干预分析
2022-03-09 18:20:46

我正在使用 Cryer 和 Chan 的研究时间序列中的干预分析,并且正在尝试了解如何对阶跃响应干预进行编码。我遇到的一个问题是如何区分这两种模型:

在此处输入图像描述

似乎唯一的区别在于 (c) 的值δ被约束为 1。如何将这个约束添加到 arimax 函数中?我相信(b)使用编码

transfer = list(c(1,0))

有没有办法约束δ=1?

3个回答

如果您在 R 中使用 tsoutlier 包,这非常简单。这在R直到感谢@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() 以找到正确的位置。然后将固定向量添加到命令并重新运行。