我一直在尝试计算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列。有没有更快的方法可以做到这一点/编写此功能?
谢谢
答案 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