计算R

时间:2019-10-06 14:52:01

标签: r statistics moving-average

我一直在尝试计算R中向量的移动平均值。理想情况下,我想编写一个函数,该函数可计算任意数量的滞后上的MA。我必须编写的数学步骤是: 1.为每列创建一个滞后为1:k的数据集。 2.总结行 3.除以2k + 1

我现在停留在第2步。我可以估算2个滞后的总和,但是创建多个滞后的公式非常麻烦。

这是我现在的位置。

我已经利用代码来计算滞后时间

lagpad <- function(x, k) {
  if (k>0) {
    return (c(rep(NA, k), x)[1 : length(x)] );
  }
  else {
    return (c(x[(-k+1) : length(x)], rep(NA, -k)));
  }
}

假设我通过以下向量计算MA:

i<-1:50
rowSums(cbind(lagpad(i,1)[1:length(i)], lagpad(i,2)[1:length(i)]))

这对于2正常工作。但是,如果我想计算20个滞后的MA,则必须绑定20列。有没有更快的方法可以做到这一点/编写此功能?

谢谢

1 个答案:

答案 0 :(得分:2)

这是一个使用累计和的差的简单函数...

x <- 1:10

mav <- function(x, k){
  y <- c(0, cumsum(x))    #cumulative sums of x
  z <- y[-c(1:k)]         #discard first k values
  length(y) <- length(z)  #discard last k values of y
  return((z - y) / k)
}

mav(x,2)
[1] 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5

mav(x,1)
[1]  1  2  3  4  5  6  7  8  9 10

mav(x,4)
[1] 2.5 3.5 4.5 5.5 6.5 7.5 8.5