我想量化时间序列分析中事件的结构效果。为此,我使用的是KFAS
软件包所提供的。
问题是,如果我想同时建模 n 个不同的日期,那么代码似乎变得有些棘手,所以 n 个不同的事件。
我希望这里有一些例子可以澄清:
library(fpp2)
library(KFAS)
# required libraries
y <- hyndsight # just for the example
plot(hyndsight)
abline(v = c(19, 35, 47), col = "red", lwd = 2)
比方说,我想检查每个“红线”事件是否是“永久性休克”(即:它改变了hyndsight系列的 level )。现在,这里是可以使用KFAS
函数执行此操作的模型:
# Z and T component for event on pos 19
aZ1 <- array(0, c(1, 1, length(y)))
aZ1[1, 1, (19 + 1):length(y)] <- 1 # 1s from pos 19(+1) forward
aT1 <- array(1, c(1, 1, length(y)))
# Z and T component for event on pos 35
aZ2 <- array(0, c(1, 1, length(y)))
aZ2[1, 1, (35 + 1):length(y)] <- 1 # 1s from pos 35(+1) forward
aT2 <- array(1, c(1, 1, length(y)))
# Z and T component for event on pos 47
aZ3 <- array(0, c(1, 1, length(y)))
aZ3[1, 1, (47 + 1):length(y)] <- 1 # 1s from pos 47(+1) forward
aT3 <- array(1, c(1, 1, length(y)))
这是实际模型:
mod <- SSModel(y~0+SSMtrend(2, list(NA, NA))+SSMseasonal(12, NA)+
SSMcustom(Z = aZ1, T = aT1,
R = matrix(0, 1, 0), Q = matrix(0, 0, 0),
a1 = 0, P = matrix(0), P1inf = matrix(1))+ # first event
SSMcustom(Z = aZ2, T = aT2,
R = matrix(0, 1, 0), Q = matrix(0, 0, 0),
a1 = 0, P = matrix(0), P1inf = matrix(1))+ # second event
SSMcustom(Z = aZ3, T = aT3,
R = matrix(0, 1, 0), Q = matrix(0, 0, 0),
a1 = 0, P = matrix(0), P1inf = matrix(1)), # third event
H = NA)
initial_val <- c(0,0,0,0,0,0,0) # the first 4 are always there
fit <- fitSSM(mod, intits = initial_val)
现在,问题是,如何根据要建模的事件数来“自动化”该过程?
如您所见,对于每个事件,我需要创建一个向量aZ
和一个向量aT
。那些需要通过SSMcustom
函数传递到模型中,如果我有一个新的时间序列,而我只需要评估两个或四个或更多事件,该怎么办。
问题是我无法继续向模型中添加SSMcustom
,我想传递带有 n 事件向量的新时间序列,并自动构建相同的模型,除了要评估的事件数。我可以为所有事件构建唯一的SSMcustom
吗?
initial_val
也必须更改,但这要复杂得多,它始终是4 + n ,而事件数是 n 。
我知道这个问题很具体,也许对于CrossValidated来说更重要,但是我不确定。
答案 0 :(得分:1)
引入“永久冲击”变量,在冲击之前等于0,在冲击之后等于1(每个冲击一个变量)。然后将这些变量添加为模型中的解释变量(回归变量),看看它们是否有意义。
请注意,这些变量中的每一个都会降低自由度。因此,您可能希望针对所有冲击使用相同的系数测试模型。