学习R语言-我知道如何做移动平均,但我需要做更多-但我不是一个统计学家-不幸的是,所有的文档似乎都是为统计学家写的。
我在excel中做了很多这方面的工作,它对于分析运营活动非常方便。
下面是每行上要生成bollinger bands的字段
值可以是呼叫数、投诉率等任何值
TimeStamp | Value |移动平均值|移动标准差|下部控件|上部控件
简而言之,移动的avg和stdevP指向序列中的前8个左右的值。给定时间点的下部控件=移动平均-2*移动stdevP,上部控件=移动平均+2*移动stdevP
这可以很容易地在excel中完成单个文件,但如果我能找到一种方法使R工作,R将更好地满足我的需要。希望自动化时也能更快、更可靠。
链接或提示将不胜感激。
发布于 2011-03-30 22:29:54
您可以使用zoo包中的函数rollapply(),前提是您使用的是一个动物园系列:
TimeSeries <- cumsum(rnorm(1000))
ZooSeries <- as.zoo(TimeSeries)
BollLines <- rollapply(ZooSeries,9,function(x){
M <- mean(x)
SD <- sd(x)
c(M,M+SD*2,M-SD*2)
})现在您必须记住,rollapply使用居中框架,这意味着它将值放在当天的左侧和右侧。与您建议的取x先验值相比,这对于Bollinger带的定义也更方便、更真实。
如果您不想转换为zoo,也可以使用向量并编写自己的函数。我添加了一个基于S3的绘图函数,它允许您轻松地绘制计算。使用这些函数,您可以执行以下操作:
TimeSeries <- cumsum(rnorm(1000))
X <- BollingerBands(TimeSeries,80)
plot(X,TimeSeries,type="l",main="An Example")要获得以下信息:

功能代码:
BollingerBands <- function(x,width){
Start <- width +1
Stop <- length(x)
Trail <- rep(NA,ceiling(width/2))
Tail <- rep(NA,floor(width/2))
Lines <- sapply(Start:Stop,function(i){
M <- mean(x[(i-width):i])
SD <- sd(x[(i-width):i])
c(M,M+2*SD,M-2*SD)
})
Lines <- apply(Lines,1,function(i)c(Trail,i,Tail))
Out <- data.frame(Lines)
names(Out) <- c("Mean","Upper","Lower")
class(Out) <- c("BollingerBands",class(Out))
Out
}
plot.BollingerBands <- function(x,data,lcol=c("red","blue","blue"),...){
plot(data,...)
for(i in 1:3){
lines(x[,i],col=lcol[i])
}
}发布于 2011-04-04 07:51:10
在R Graph Gallery (65)中有一个插图,给出了计算波段和绘制股票价格的代码。
2005年的代码似乎在六年后仍然有效,并将给出IBM当前的股价和几个月前的股价

最明显的bug是带宽和容量下部图表的宽度,这两个图表已经缩小;覆盖的天数可能还有另一个。
https://stackoverflow.com/questions/3672761
复制相似问题