R Временные ряды - возникают проблемы при создании линий Боллинджера - нужен простой пример, пожалуйста - PullRequest
4 голосов
/ 09 сентября 2010

Изучение языка R - я знаю, как сделать скользящее среднее, но мне нужно делать больше - но я не статистик - к сожалению, все документы написаны для статистиков.

Я делаю это вПревосходно, это очень удобно для анализа операционной деятельности.

Вот поля в каждом ряду, чтобы сделать полосы Боллинджера :

Значение может быть # вызовов,соотношение жалоб, что угодно

TimeStamp |Значение |Скользящая средняя |Переезд STDEVP |Нижний контроль |Верхний элемент управления

Вкратце, перемещение avg и stdevP указывают на предыдущие 8 или около того значений в серии.Нижний элемент управления в данный момент времени равен = скользящее среднее - 2 * скользящее значение stdevP, а верхний элемент управления = скользящее среднее значение + 2 * скользящее значение stdevP

Это можно легко сделать в Excel для одного файла, но если я смогунайти способ заставить R работать R будет лучше для моих нужд.Надеемся, быстрее и надежнее, когда автоматизированы, также.

ссылки или советы будут оценены.

Ответы [ 2 ]

3 голосов
/ 30 марта 2011

Вы можете использовать функцию 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")

чтобы получить:

enter image description here

Коды функций:

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])
    }
}
1 голос
/ 04 апреля 2011

В галерее графиков R есть иллюстрация (65) , в которой указан код как для расчета полос, так и для построения цены акций.

Код 2005 года, похоже, все еще работает шесть лет спустя и даст текущую цену акций IBM и возврат на несколько месяцев

IBM Bollinger Bands

Наиболее очевидная ошибка - это ширина полосы пропускания и нижние графики громкости, которые были сужены; может быть другое количество дней.

...