学习 R 语言 - 我知道如何计算移动平均线,但我需要做更多 - 但我不是统计学家 - 不幸的是,所有文档似乎都是为统计学家编写的。

我经常用excel做这个,它对于分析运营事件真的很方便。

以下是每行的字段,用于生成 bollinger bands :

值(value)可以是电话数量、投诉率等

时间戳 |值(value) |移动平均线 |移动 STDEVP |下控制 |上控制

简而言之,移动 avg 和 stdevP 指向系列中的前 8 个左右的值。给定时间点的下控制 = 移动平均 - 2*移动 stdevP 和上控制 = 移动平均 + 2*移动 stdevP

这可以很容易地在单个文件的 excel 中完成,但如果我能找到一种方法让 R 工作 R 将更好地满足我的需求。希望在自动化时也能更快、更可靠。

链接或提示将不胜感激。

最佳答案

您可以使用 rollapply() 包中的 zoo 函数,为您提供一个动物园系列:

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 先前值的建议相比,这也更方便且更符合布林带的定义。

如果您不想转换为动物园,您也可以使用向量并编写自己的函数。我添加了一个基于 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])
    }
}

关于R 时间序列 - 在制作布林线时遇到问题 - 请需要简单的例子,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3672761/

10-12 21:39