【问题标题】:Moving average in negative direction (ma in R forecast) [duplicate]负方向移动平均线(R预测中的ma)[重复]
【发布时间】:2020-06-29 21:28:46
【问题描述】:

对于一个系列

X=(x_1,x_2,...x_t-2, x_t-1, x_t)

我想针对前 k 个时间步计算每个点的移动平均值。比如k=2,我想返回:

X =(NA, (x_1+x_2)/2 ... (x_t-2 + x_t-3)/2, (x_t-2 + x_t-1)/2, (x_t + x_t-1)/2)

如果我使用移动平均函数 ma,例如

ma(X, order = 2, centre = TRUE)

我得到每个点及其邻居在正负方向上的平均值,而设置 center=FALSE 计算相对于正方向的移动平均值。有没有一种简单的方法可以将点 t 作为 (t-k+1...t) 的运行平均值?

【问题讨论】:

  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。
  • 对于 x1=c(1,2,3,4,5,6),我想计算一个点和它之前的 k 个点的移动平均值。如果 k = 1,则输出将为 (NA, 1.5, 2.5, 3.5, 4.5, 5.5)。对于 k=2,(NA, NA, 2, 3, 4, 5)。我看不到在预测库中使用 ma 对任意 k 执行此操作的方法。

标签: r forecast


【解决方案1】:

假设测试输入 X 如图所示,这取当前值和先前值的平均值。注意 rollmeanr 末尾的 r,它告诉它使用右对齐版本而不是中心对齐版本。

library(zoo)

X <- 1:10 # test input

rollmeanr(X, 2, fill = NA)
## [1]  NA 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5

这样做(没有包):

n <- length(X)
c(NA, (X[-1] + X[-n])/2)
## [1]  NA 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5

还有这个更通用的基本 R 方法(也没有包):

k <- 2
c(rep(NA, k-1), rowMeans(embed(X, k)))
## [1]  NA 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5

【讨论】:

  • 这不是我想要的。如果我使用 rollmean(X, 3, fill=NA),我得到 NA 2 3 4 5 6 7 8 9 NA
  • 再次阅读答案。你忘记了 rollmeanr 末尾的 r。
猜你喜欢
  • 1970-01-01
  • 2021-10-08
  • 2020-07-24
  • 2018-10-21
  • 2016-05-16
  • 2023-03-12
  • 1970-01-01
  • 2020-10-26
  • 2017-09-01
相关资源
最近更新 更多