一、时序分析知识点
参考Youtube视频。
时间序列的大纲
时间序列的应用以及滞后
滞后的意思是后面的y值总是依赖于前面的y值,也就是比如存钱加上利息的收入总是与你前一段时间的存额有关,所以要分析y和时间的关系就要把滞后lag也考虑进去,否则会把滞后的影响也当成了自变量对因变量造成的影响。
white noise
样本点围绕着均值有一个方差恒定的均值波动,AR自回归和MA移动平均回归模型是为了违反white noise进行修正的,消除两种偏差。
什么是ARIMA模型?
ARIMA全称是Auto Regression Integrated Moving Average,是为了能够在时间序列分析当中更好地理解数据,以及使得数据更好的能够被我们的模型所拟合,这样我们就可以在未来某个节点预测因变量(GDP,Price等等),它由三部分含义构成,各自有各自的作用。
ARIMA由自回归模型和移动平均值模型构成,接下来分别介绍它们的作用。
自回归模型是用来根据以往的数据来回归拟合变量,移动平均值模型对误差项进行建模,认为误差项是同期的误差项和以往不同时间的误差项的线性组合,这里的integrated意思是数据被替换成了原数据的后一个与前一个的差分。
我们看一下ARIMA的表示方法,以下是维基百科的内容。
对于ARIMA,表示方法是[图片上传失败...(image-d246ad-1520994262000)]),p,d,q都是非零参数,它们都是方程的阶数。其中p是时间滞后的数目,d是几次差分,q是移动平均模型的阶数。
前面一项是在考虑变量值,后面一项是考虑误差项,总的来说就是这个模型认为当前的变量值和误差都是跟前面的变量值和误差有关的,都是前面的变量值和误差项的线性组合,我们可以自己定要多少个滞后(也就是要考虑前面多少个值的组合)。
不变性
什么是不变性,不变性就是均值和方差不会随着时间的推移而发生改变,整个过程没有上升或者下降的趋势,如果有趋势的话,那么均值肯定是要改变的。
在这里要保证stationary的话就要保证[图片上传失败...(image-b16711-1520994262000)](这里有点不明白)
Dicky-Fuller检测不变性
(这里有两个输入错误,如果[图片上传失败...(image-781f3f-1520994262000)]应该是不变性过程,跟上面的是对应的;另外一处是如果检测是显著的话,应该是说明是不变性的(stationary))
解释Dicky-Fuller检测不变性是基于一阶自回归模型,也就是只考虑一阶自回归方程的系数,看它是否等于1,如果系数[图片上传失败...(image-5c2182-1520994262000)]的话,那么就会有[图片上传失败...(image-3463e9-1520994262000)],也就是说明这个过程是一个random walk,说明不具有不变性。接着往下推导的话,指定[图片上传失败...(image-7d4997-1520994262000)],也就是当[图片上传失败...(image-fff1aa-1520994262000)]的时候(实际上是判断为0的显著性如何),一阶差分是一个random walk的过程。如果不为不变性过程的话,就应该继续进行二阶差分直到gamma具有显著意义上的小于0,这样才是stationary。
自问自答
为什么叫自回归+移动平均?
回归我们都知道是怎么一回事,[图片上传失败...(image-7b3aa0-1520994262000)],这就是一个关于用自变量x来预测因变量y的值的回归方程,这里有两个变量,所以不是单个变量自己内部有关系,是两个变量之间有关系(类比与国内关系和国外关系)。而自回归,那就是只有一个变量了,就是数据点yt(当前时间节点为t的值),这里的时间t其实严格意义来说不是自变量,你可以认为只是1,2,3……这样的索引符号而已。我们看一下上面ARMA模型的自回归项,我们就更加清晰了。
[图片上传失败...(image-5e675c-1520994262000)]
在这里u是常数,后面那项是时间节点t前面的p个时间节点的数据值的加权组合,所以在这里可以看到由始至终都实际上都是只有一个变量--数据点yi,是这个变量内部之间有关系,这个关系可以通过线性组合的方式来回归预测出来,所以叫做自回归。
移动平均更好理解一些,移动平均实际上是在预测ARMA的后面一项。
[图片上传失败...(image-7cad47-1520994262000)]这一项是对均值以及上下波动的误差进行拟合的模型,跟自回归模型没有关系,只是ARMA模型将两者统一起来了。这个模型的思想是,如果没有误差,那么某个时间节点t的值应该是,但真实情况是有误差,真实值是随着平均值上下波动的,并且这个模型认为残差的大小是当前残差与前面的时间节点的残差是存在回归关系的(对,这里也是认为残差这货也是有滞后的,也就是自相关的)
什么是random walk
去除趋势的影响
去除趋势的影响,可以通过变量值对时间t拟合回归,那么残差就是真实值和回归值之间的差。
差分
通过差分的方式可以把非静态的过程转化为静态的过程。途中是一阶差分,二阶差分是指在一阶差分基础上再进行多一次一阶差分。
自问自答
问题:为什么差分的方式可以把非静态的过程转化为静态的过程?
上图中第一列假设是原始数据点的值,这些数据点并不是stationary的,原因是数据点有上升的趋势。说到这里,可能有不太理解的地方,为什么一定要处理静态的数据呢?得出静态数据拟合后的模型,以后我们要预测的时候是怎么办的呢?
自相关
自相关是衡量在特定的一个时间点上的数据值
与其他滞后时间点的数据值的相关性强弱,通俗地讲,就是比如我当前这个数据点是不是跟前面时间的数据点是有关的,相关性有多强?(越弱说明我们忽略掉这种相关性之后造成的影响就会越弱,你可以想象亲戚越远房那种是不是越不相关,忽略他们是不是越没有影响?而如果是越亲近,比如你父母,对你的影响就会越大)相关性强弱可以从-1到+1不等,我们可以画出横坐标为滞后时间的个数(相当于某个具体节点最远可以对之后的第几个节点起作用,你可以认为是多米洛骨牌,我推倒一块,最远是第几块被影响推倒,后面就不受影响)
我们看一下欧洲股票交易率的自相关系数与滞后的时间节点数p的关系,红线是置信水平,这里是0.025。我们可以认为如果图中对应柱状图如果高于了红线,就说明对应的lag值下自相关效应是显著的(也就是当前lag值下对应的这个自相关系数值这种情况比较不太可能出现,那么如果一种不太可能出现的情况出现了,说明这种效应应该是显著的,我们只有0.025的可能性会犯错)。
Ljung-Box q (LBQ) 统计量检验自相关性
Ljung-Box q (LBQ) 统计量用于检验在一段时间内观测的变量值是否是独立的随机变量,也就是变量之间是否有自相关。自相关会降低预测模型的准确性,原因是我们认为的是预测模型与时间有关,但实际上跟前面的时间变量有关,预测结果就会差很多。比如季节性的影响,我们想要预测商场月销售额,但每逢年过节销售额都会猛涨,所以在时间上可能存在着一个滞后为12的影响。Ljung-Box q (LBQ) 统计测试则是假设k个滞后值内不存在自相关(原假设),假如说求出来的统计量p-value在显著性水平以下的话,那么就会认为统计量不显著为0,也就是有显著差别,那么就可以判定是存在着自相关性的。Ljung-Box q (LBQ) 统计量会用在拟合模型后面检验残差是否有相关性。
二、R语言实现金融数据的时间序列分析和建模
加载数据
首先是加载相应的数据包zoo, xts, TTR
library(zoo)
library(xts)
library(TTR)
加载数据,选用的是42位英国国王去世的年龄,用scan函数来加载数据。
kings<-scan('http://robjhyndman.com/tsdldata/misc/kings.dat', skip=3)#skip=3表示忽略掉前3行的数据
head(kings)
输出结果
可以看到前几行都是数字,代表着去世国王的年龄。接下来要转换成时序数据,用ts函数。
kingstimeseries<-ts(kings)
#绘制时序图看看
plot.ts(kingstimeseries)
数据差分
接下来是数据差分,先取一阶
kingsdifferences<-diff(kingstimeseries, diff=1)
plot.ts(kingsdifferences)
可以看到,确实波动性减小了。如果不平稳的话就要继续差分,所以我们用ARIMA(p, 1, q)这个模型。
寻找ARIMA(p, 1, q)这个模型里面合适的p和q
什么是自相关和偏相关
自相关的计算公式展开来是以下的形式:
也就是从h+1号的值开始,求出t时间与前面的t-h时间的协方差占t时间方差的比例。
关于自相关的公式,实际上是y
t和它前面k个时间节点前的y_{t-k}的协方差占yt方差的比例,偏相关可以认为是yt和y_{t-k}的关系,但是yt也会受到其他滞后项的影响,所以减去这一部分滞后项的影响。(实际上这里没有真正搞懂,准备回头再仔细研读一下资料)
绘制自相关图acf和偏相关图pacf以确定存在自相关和偏相关的滞后时间个数。
自相关
acf<-acf(kingsdifferences, lag.max=20)
acf<-acf(kingsdifferences, lag,max=20, plot=False)
从图中可以看出1-20个滞后不存在着显著的自相关性,因此p定义为1。
偏相关
pacf(kingsdifferences, lag.max=20)
pacf(kingsdifferences, lag.max=20, plot=FALSE)
从图中可以看出,在滞后项3-20就没有显著的偏相关性,取q=3。
因此最终模型定为ARIMA(1, 1, 3)。
建立ARIMA模型
先拟合ARIMA(1, 1, 3)模型
kings.arima<-arima(kingstimeseries, order=c(1, 1, 3))
summary(kings.arima)
kingsarimaforecast<-forecast(kings.arima, h=5)
#画出未来五位国王的年龄
在这里蓝线是预测值,蓝色区域是80%的置信区间,灰色部分是95%的置信区间。
模型误差检验
我们检查下预测值残差的相关性,绘制自相关图。
acf(kingsarimaforecast$residuals, lag.max=20)
可以看到残差之间已经没有明显的相关性了。
用Ljung-Box q (LBQ) 统计测试方法检查下自相关的显著性。
Box.test(kingsarimaforecast$residuals, lag=20, type='Ljung-Box')
Ljung-Box q (LBQ) 统计显示p值为0.9515,说明在95%的置信水平内,没有充分证据表明残差滞后值之间存在着非零相关性,因此应该接受零假设(残差之间没有相关性)。
建立自动化ARIMA模型
如果我们直接把时序数据传入到自动化的ARIMA模型的话,就可以得出自动拟合后的p, d, q值。
kings.arima1<-auto.arima(kingstimeseries)
summary(kings.arima1)
最后得出的结果是ARIMA(0, 1, 1),接下来我们尝试根据这个自动模型去预测未来五位国王的情况。
kingsarimaforecast1<-forecast(kings.arima1, h=5)
kingsarimaforecast1
plot(kingsarimaforecast1)
误差检验
acf(kingsarimaforecast1$residuals, lag.max=20)
box.test(kingsarimaforecast1$residuals, lag=20, , type='Ljung-Box')
最后结果表明,1-20的滞后的残差都不存在非零相关性。
自问自答
为什么最后要检验残差的相关性?
这个问题待回答。
- Introduction To Stationary And Non-Stationary Processes(关于静态过程和非静态过程的入门解释)
- Random walk model(杜克大学比较详细的参考资料)
- Youtube TimeSeries ARIMA Model(上面有完整的解释的视频)
- Quora关于ARIMA模型的一个很好解释
- 维基百科关于stationary process
- 维基百科关于Autoregressive integrated moving average
- 什么是 Ljung-Box q (LBQ) 统计量
- 关于为什么不能分析非静止的数据
- 关于自相关和偏相关的解释