使用R中的移动平均线

时间:2013-06-26 09:44:47

标签: r average

我需要一些帮助来平滑R中的一些数据。所以基本上,我只有一个'时间'列和一个'速度'列。速度基本上代表某些蝌蚪的运动。只是我的数据有很多噪音,我认为使用“移动平均线”可能会帮助我平滑我的图形并显示某些模式。我如何在R中执行此操作?或者我可以使用哪种更好的平滑技术对于像我这样的新手R用户来说可能更容易理解?

谢谢你们

我的数据基本上看起来像这样......但它持续了9000s

Time    Velocity
1.36    2.4
1.81    1.2
2.19    2.4
2.51    2.1
2.98    1.8
3.51    3.0
4.88    2.1
5.38    2.0
6.52    2.4
6.71    1.2
7.29    2.4
7.67    2.1
8.27    1.8
9.13    3.0
9.95    2.1
10.69   2.0
11.29   2.54
12.82   1.64
13.32   2.70
13.89   2.19
14.33   2.44
14.93   2.93
15.75   2.77
17.63   3.21
18.18   2.4
18.82   1.2
20.02   2.4
20.86   2.1
21.44   1.8
22.24   3.0
23.07   2.1
23.67   2.0

3 个答案:

答案 0 :(得分:5)

查看R rollmean包中的zoo函数。这应该符合您的需求!

更新:

现在我已经有了更多时间,这里有一些示例代码。如果您想在时间序列的开头和结尾填写值,则必须使用rollapply,否则只需rollmean。看看控制台输出,我会明白我的意思。

# Packages
library(zoo)

# Start RNG
set.seed(10)

# Sample data
tmp <- data.frame(time = 1:30, 
                  velocity = round(runif(30, 1, 3), digits = 2))

# Moving average (window size = 5) using rollmean
rollmean(tmp[, 2], k = 5, fill = NA)
 [1]    NA    NA 1.806 1.694 1.682 1.620 1.588 1.726 1.896 2.014 1.952 1.944 1.916 1.828 1.620 1.680 1.602 1.792 1.966 2.192 2.396 2.378 2.206 2.142
[25] 2.232 2.018 2.184 2.164    NA    NA

# Moving average (window size = 5) using rollapply
rollapply(tmp[, 2], width = 5, function(...) {round(mean(...), digits = 3)}, partial = TRUE)
 [1] 1.823 1.965 1.806 1.694 1.682 1.620 1.588 1.726 1.896 2.014 1.952
[12] 1.944 1.916 1.828 1.620 1.680 1.602 1.792 1.966 2.192 2.396 2.378
[23] 2.206 2.142 2.232 2.018 2.184 2.164 2.103 1.910

答案 1 :(得分:2)

R中的移动平均值很简单:

MoveAve <- function(x, width) {
    as.vector(filter(x, rep(1/width, width), sides=2));
}

x是您的数据,width是您的平均窗口的长度。

使用sides函数的filter参数,您可以控制窗口的位置,请参阅文档:

  

如果sides = 1,则滤波器系数仅用于过去的值;如果   sides = 2它们以滞后0为中心。在这种情况下,长度为   滤波器应该是奇数,但如果是偶数,则滤波器的数量应该更多   向前推进而不是落后。

答案 2 :(得分:2)

如果您加载“TTR”包(技术交易规则),您可以从MA“系列”中选择一个MA。

?SMA

SMA(x,n = 10,...)

EMA(x,n = 10,wilder = FALSE,ratio = NULL,...)

DEMA(x,n = 10,v = 1,wilder = FALSE,ratio = NULL)

WMA(x,n = 10,wts = 1:n,...)

EVWMA(价格,数量,n = 10,......)

ZLEMA(x,n = 10,比率= NULL,......)

VWAP(价格,数量,n = 10,......)

VMA(x,w,比率= 1,......)