手算时间序列

简单移动平均

简单移动平均道理很简单,不再赘述。

这里提及以下误差计算公式,此公式可以作为模型评估的标准。

时间序列 python 移动平均 时间序列移动平均模型_系统对

我们先来自己实现一个计算简单移动平均的函数:

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)
 [1]   NA   NA   NA 3.00 3.00 3.00 3.00 3.25 3.25 3.25

R 语言中的 TTR 包提供的 SMA 函数也可以实现简单移动平均的计算。首先确保 R 语言解释器的版本在 4.2.0以上(在 RStudio 中键入 R.version 中可查看 R 解释器的版本)。进入 https://cran.r-project.org/web/packages/TTR/index.html ,下载系统对应的 xts, zoo, curl 和 TTR 包所需要的包,并在 RStudio -> Tools -> Installs Packages 中选择下载的包进行安装。随后通过 library(xts) , library(zoo), library(curl)library(TTR) 导入相应的包。

例如对于数据 时间序列 python 移动平均 时间序列移动平均模型_时间序列 python 移动平均_02

> x = c(2, 3, 3, 4, 2, 3, 3, 5, 2, 3)
> SMA(x, n = 4)
 [1]   NA   NA   NA 3.00 3.00 3.00 3.00 3.25 3.25 3.25

加权移动平均法

时间序列 python 移动平均 时间序列移动平均模型_时间序列_03

趋势移动平均法

简单移动平均法和加权移动平均法,在时间序列没有明显的趋势变动时,能够准确反映实际情况。但当时间序列出现直线增加或减少的变动趋势时,用简单移动平均法和加权移动平均法来预测就会出现滞后偏差。因此,需要进行修正,修正的方法是作二次移动平均,利用移动平均滞后偏差的规律来建立直线趋势的预测模型。这就是趋势移动平均法。

时间序列 python 移动平均 时间序列移动平均模型_时间序列 python 移动平均_04


这里我放一个例题方便理解一下:

时间序列 python 移动平均 时间序列移动平均模型_系统对_05

指数移动平均

首先我要讲一下指数移动平均的优势特点(为什么要引出指数移动平均?)

时间序列 python 移动平均 时间序列移动平均模型_r语言_06

一次指数平滑法

时间序列 python 移动平均 时间序列移动平均模型_时间序列_07


这里提及一个小细节,关于α的取值问题

时间序列 python 移动平均 时间序列移动平均模型_时间序列_08

老样子,我们先来试着自己实现一下指数移动平均:

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)
 [1]       NA       NA       NA 3.000000 2.600000
 [6] 2.760000 2.856000 3.713600 3.028160 3.016896

再来试试 TTR 包提供的指数移动平均:

> EMA(x, n=4)
 [1]       NA       NA       NA 3.000000 2.600000
 [6] 2.760000 2.856000 3.713600 3.028160 3.016896

二次指数平滑法

时间序列 python 移动平均 时间序列移动平均模型_时间序列_09


时间序列 python 移动平均 时间序列移动平均模型_时间序列_10

三次指数平滑法

时间序列 python 移动平均 时间序列移动平均模型_时间序列_11


最后附上R语言进行以上时间序列分析的包和内置函数

R语言关于SMA,EMA,DEMA,WMA函数的理解 ps.SMA是简单移动平均;EMA是一次指数移动平均;DEMA是二次指数平滑;WMA是加权平均法。(其中DEMA是否可以高次指数平滑,仍需探究)