手算时间序列
简单移动平均
简单移动平均道理很简单,不再赘述。
这里提及以下误差计算公式,此公式可以作为模型评估的标准。
我们先来自己实现一个计算简单移动平均的函数:
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)
导入相应的包。
例如对于数据
> 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
加权移动平均法
趋势移动平均法
简单移动平均法和加权移动平均法,在时间序列没有明显的趋势变动时,能够准确反映实际情况。但当时间序列出现直线增加或减少的变动趋势时,用简单移动平均法和加权移动平均法来预测就会出现滞后偏差。因此,需要进行修正,修正的方法是作二次移动平均,利用移动平均滞后偏差的规律来建立直线趋势的预测模型。这就是趋势移动平均法。
这里我放一个例题方便理解一下:
指数移动平均
首先我要讲一下指数移动平均的优势特点(为什么要引出指数移动平均?)
一次指数平滑法
这里提及一个小细节,关于α的取值问题
老样子,我们先来试着自己实现一下指数移动平均:
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
二次指数平滑法
三次指数平滑法
最后附上R语言进行以上时间序列分析的包和内置函数
R语言关于SMA,EMA,DEMA,WMA函数的理解 ps.SMA是简单移动平均;EMA是一次指数移动平均;DEMA是二次指数平滑;WMA是加权平均法。(其中DEMA是否可以高次指数平滑,仍需探究)