代码之家  ›  专栏  ›  技术社区  ›  RLave

在KFAS上自动使用SSMcustom以实现时间序列每日效果

  •  0
  • RLave  · 技术社区  · 6 年前

    KFAS 套餐必须提供。

    同时 不同的事件。

    以下是一些应该澄清的例子,我希望:

    library(fpp2)
    library(KFAS)
    # required libraries
    y <- hyndsight # just for the example
    plot(hyndsight)
    abline(v = c(19, 35, 47), col = "red", lwd = 2)
    

    enter image description here

    水平 功能:

    # 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 函数,如果我有一个新的时间序列,我只需要评估两个事件,或者四个或更多。

    问题是我不能一直添加 SSM自定义 对于模型,我想传递一个向量为的新时间序列 事件,并自动构建相同的模型,但要计算的事件数除外。我可以建立一个独特的 SSM自定义 所有的事件?

    initial_val 必须改变,但不那么复杂总是4+ ,与 事件数。

    我知道这个问题很具体,也许更适合交叉验证,但我不太确定。

    1 回复  |  直到 6 年前
        1
  •  1
  •   AlainD    6 年前

    引入“永久冲击”变量,冲击前等于0,冲击后等于1(每次冲击一个变量)。然后将这些变量作为解释变量(回归)添加到模型中,并查看它们是否显著。

    注意这些变量中的每一个都会降低自由度。所以你可能想用相同的冲击系数来测试模型。