【问题标题】:Build a model with parameters combinations in fast way快速构建具有参数组合的模型
【发布时间】:2015-11-02 11:42:17
【问题描述】:

我正在尝试使用一组参数在 R 中构建 ARIMA 模型。 arima函数的签名是:

arima(x,
      order=(p, d, q),
      seasonal=list(order=(P, D, Q), period=S)
)

我正在试验参数p, q, P, Q(假设dD固定为1)。

说每个参数都是一个向量:

p = c(1, 2, 3)
P = c(1, 2, 3)
q = c(2, 3, 4)
Q = c(2, 3, 4)

如何使用参数组合构建 ARIMA 模型?我知道嵌套循环是直观的方式,但我想还有更多 R 风格的方法。

【问题讨论】:

    标签: r loops apply lapply


    【解决方案1】:

    您可以将所有参数放入数据结构中

    params<-data.frame(p,P,q,Q,d=1,D=1,S=4)
    

    然后你可以在行上使用lapply,在每行的环境中使用with

    lapply(1:nrow(params),function(i) with(params[i,],
      arima(x,order=c(p, d, q),seasonal=list(order=c(P, D, Q), period=S))))
    

    如果您指的是 p,P,q,Q 的所有可能组合,则将 params 设置为 expand.grid(p=p,P=P,q=q,Q=Q)。但是,请参阅 forecast 中的 auto.arima 了解逐步方法。

    【讨论】:

      【解决方案2】:

      我强烈建议研究forecast 包,尤其是auto.arima 函数。这真的很棒。包的作者还有一本教科书,可以买一本或者read online

      另外,我应该补充一点,使用@A 会遇到麻烦。 Webb 方法 - 从编程的角度来看,这并不是说它不好,但arima 会检查以确保提出的模型在统计上是平稳的。因此,您要么必须 edit(arima) 删除该行,要么提前进行测试以确保您不建议非固定参数集,或者将整个内容包装在 tryCatch 中。这些都是我自己完成的。最简单的方法最终是利用auto.arima中的辛勤工作。

      【讨论】:

      • 谢谢。我阅读了文档。我确实尝试过auto.arima,但它似乎无法处理不规则的 ts。如果我将zoo 提供给auto.arima,它会隐式转换为tsfrequency=1,那么auto.arima 将永远不会包含季节性术语(P、D、Q)。
      • 您必须通过用 NA 填充缺失的时间步来使时间序列有规律。无论您在做什么,您都必须定义季节性频率(即,这不是您只需要为auto.arima 做的事情)。你不需要使用动物园。只需使用ts,并定义频率。我认为预测包甚至有这个功能。执行ls("package:forecast") 并查看函数......其中一个显然被命名以表明它发现或检测到季节性频率。 @泽龙
      猜你喜欢
      • 1970-01-01
      • 2020-04-06
      • 1970-01-01
      • 2011-05-17
      • 2017-04-09
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多