使用 R 代码实现移动平均线

3

我需要翻译的第一部分是关于R代码的:

编写一个R函数,完成以下操作:给定N个观测值的序列xN = (x1; x2; ...; xN),该函数返回一个移动平均向量,其中每个平均值由k个连续的观测值计算得出。将此函数命名为ma,并使其参数为向量xN和k。

到目前为止,我有:

x <-vector(length=n)

ma <- function(x,k){
x0 <- x[1:(length(x)-k)]
x1 <- x[(1+k):length(x)]
cor(x0, x1)
}

我非常肯定我犯了错误...


我想知道为什么你在作业中要求计算移动平均值,却使用相关性。 - Rich Scriven
@RichardScriven 谢谢。 - Keris
1个回答

9

有很多方法可以计算移动平均。

在基础的R语言中,可以这样实现:

filter(x, rep(1/2,2)) #this calculates moving average of 2 numbers in a sequence
filter(x, rep(1/3,3))  #this calculates moving average of 3 numbers in a sequence

连续 k 次观测

filter(x, rep(1/k,k))

e.g.

x <- c(3,5,7,3,4,2,6,4,7,2,1,9, 1, 10, 1,12)
filter(x, rep(1/2,2))
# [1] 4.0 6.0 5.0 3.5 3.0 4.0 5.0 5.5 4.5 1.5 5.0 5.0 5.5 5.5 6.5  NA

你还应该查找以下软件包:zooTTR软件包,以获取更多选项。
举个快速的例子,在TTR中,函数runMean非常简单。
runMean(x,2) #gives rolling mean of every 2 consecutive observations
runMean(x,k) #gives rolling mean of every k consecutive observations

@RichardScriven 不是的。我的意思是我想知道我犯了什么错误。我没有要求你帮我修复我的作业。 - Keris
好的。zoo:::rollmean.zoo 的源代码可能会在你的计算中有所帮助。 - Rich Scriven
@jalapic 非常感谢。顺便问一下,我需要找到对象'k',你能给我一个提示吗? - Keris
@jalapic 我需要明确地设置 'k' 值,对吗?比如说,y = ma(x,k=100)? - Keris
例如,如果你正在进行runMean(x,k)计算,其中k等于5,那么你可以写成runMean(x,5)runMean(x,k=5)。两种方式都可以。同样的逻辑也适用于你的ma函数。 - jalapic
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接