【问题标题】:Slight difference between data.table's frollmean() and forecast's ma() with even orderdata.table 的 frollmean() 和 forecast 的 ma() 之间略有不同,顺序是偶数
【发布时间】:2021-05-26 05:31:18
【问题描述】:

我正在对时间趋势进行去季节化处理,我意识到 data.table 的 frollmean() 和 forecast 的 ma() 产生的结果略有不同,顺序相同(例如:季度数据,n = 4)。起初,我认为 frollmean(n = 4) 和 ma(order = 4) 之间的区别只是因为 ma() 有一个四舍五入的方法。来自文档:

k=(m-1)/2 [m = 顺序]

当指定偶数顺序时,平均观察值将比过去包含更多来自未来的观察值(k 向上取整)。如果 center 为 TRUE,则对来自两个移动平均值(其中 k 分别向上和向下舍入)的值进行平均,使移动平均值居中。

但是,如下所示,即使在平均 frollmean(n = 4) 和 frollmean(n = 5) 时,dif 的差值也非零且始终高于 0(对于此任意时间序列)。这不会发生在奇数顺序(例如:n = 3)。任何想法为什么?

# toy example
set.seed(0)
dt = data.table(x = 1:100 + 10*rnorm(100))
dt[, fm4 := frollmean(x = x, n = 4, align = "center")]
dt[, fm5 := frollmean(x = x, n = 5, align = "center")]
dt[, fm4p5 := .5 * (fm4 + fm5)]
dt[, ma4 := ma(x = x, order = 4, centre = TRUE)]
dt[, dif := fm4p5 - ma4]
plot(dt[["dif"]])
mean(dt[["dif"]], na.rm = TRUE)

【问题讨论】:

    标签: r data.table forecast


    【解决方案1】:

    我认为这意味着ma 正在平均两个 4 长度的rollmeans,一个稍微提前,一个稍微滞后。即

    dt[, fm4c := (fm4+shift(fm4))/2]
    dt[, sd(fm4c-ma4, na.rm = TRUE)]
    #> [1] 5.599379e-15
    

    【讨论】:

      猜你喜欢
      • 2019-09-21
      • 2017-04-12
      • 2011-06-01
      • 2012-01-26
      • 2020-01-13
      • 1970-01-01
      • 2017-12-04
      • 2021-03-23
      • 2019-03-16
      相关资源
      最近更新 更多