我是靠谱客的博主 细腻乌龟,最近开发中收集的这篇文章主要介绍手算时间序列手算时间序列,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

手算时间序列

简单移动平均

手动实现一个计算简单移动平均的函数:

mySMA <- function (x, n) {
  sma <- c()
  sma[1:(n-1)] <- NA
  for (i in n:length(x)) {
    sma[i] <- mean(x[(i-n+1):i])
  }
  return(sma)
}
x = c(2, 3, 3, 4, 2, 3, 3, 5, 2, 3)
mySMA(x, n = 4)

在这里插入图片描述
R 语言中的 TTR 包提供的 SMA 函数也可以实现简单移动平均的计算。

library(TTR)
SMA(x, n = 4)

在这里插入图片描述
手动计算的结果和使用程序包的结果是一样的,证明简单移动平均手写函数的逻辑是正确的。

指数移动平均

设时间序列为 y 1 , y 2 , … , y t , … y_1,y_2,dots,y_t,dots y1,y2,,yt, , α alpha α为加权系数, 0 < α < 1 0<alpha<1 0<α<1,一次指数平滑公式为:
S t ( 1 ) = α y t + ( 1 − α ) S t − 1 ( 1 ) S_t^{(1)}=alpha y_t + (1-alpha)S_{t-1}^{(1)} St(1)=αyt+(1α)St1(1)

手写函数实现指数移动平均:

myEMA <- function (price,n){
  ema <- c()
  ema[1:(n-1)] <- NA
  ema[n]<- mean(price[1:n])
  beta <- 2/(n+1)
  for (i in (n+1):length(price)){
    ema[i]<-beta * price[i] + 
      (1-beta) * ema[i-1]
  }
  return(ema)
}
x = c(2, 3, 3, 4, 2, 3, 3, 5, 2, 3)
myEMA(x, n = 4)

在这里插入图片描述
再来试试 TTR 包提供的指数移动平均:

EMA(x, n=4)

在这里插入图片描述
手动计算的结果和使用程序包的结果是一样的,证明指数移动平均手写函数的逻辑是正确的。

上述手写函数,没有把加权系数 β beta β作为参数,而是在函数里缺省计算得出,可以进一步改进:

myEMA1 <- function (price,n,beta){
  ema <- c()
  ema[1:(n-1)] <- NA
  ema[n]<- mean(price[1:n])
  for (i in (n+1):length(price)){
    ema[i]<-beta * price[i] + 
      (1-beta) * ema[i-1]
  }
  return(ema)
}
myEMA1(x, n = 4,beta=0.4)

在这里插入图片描述

参考资料

Datawhale 开源文档:https://github.com/datawhalechina/team-learning-data-mining/tree/master/TimeSeries

感谢Datawhale对开源学习的贡献!

最后

以上就是细腻乌龟为你收集整理的手算时间序列手算时间序列的全部内容,希望文章能够帮你解决手算时间序列手算时间序列所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(89)

评论列表共有 0 条评论

立即
投稿
返回
顶部