R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大。

R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长。现在已不仅仅是统计领域,教育,银行,电商,互联网….都在使用R语言。

要成为有理想的极客,我们不能停留在语法上,要掌握牢固的数学,概率,统计知识,同时还要有创新精神,把R语言发挥到各个领域。让我们一起动起来吧,开始R的极客理想。

关于作者:

  • 张丹(Conan), 程序员R,Nodejs,Java
  • weibo:@Conan_Z
  • blog: http://blog.fens.me
  • email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/r-ar

前言

时间序列是金融分析中常用到的一种数据格式,自回归模型是分析时间序列数据的一种基本的方法。通过建立自回归模型,找到数据自身周期性的规律,从而帮助我们理解金融市场的发展变化。

在时间序列分析中,有一个常用的模型包括AR,MA,ARMA,ARIMA,ARCH,GARCH,他们的主要区别是适用条件不同,且是层层递进的,后面的一个模型解决了前一个模型的某个固有问题。本文以AR模型做为开始,将对时间序列分析体系,进行完整的介绍,并用R语言进行模型实现。

由于本文为非统计的专业文章,所以当出现与教课书不符的描述,请以教课书为准。本文力求用简化的语言,来介绍自回归模型的知识,同时配合R语言的实现。

目录

  1. 自回归模型介绍
  2. 用R语言构建自回归模型
  3. 模型识别ACF/PACF
  4. 模型预测

1. 自回归模型(AR)

自回归模型(Autoregressive model),简称AR模型,是统计上一种处理时间序列的方法,用来描述当前值与历史值之间的关系,用变量自身的历史时间数据对自身进行预测,自回归模型必须满足平稳性的要求。比如,时间序列数据集X 的历史各期数据从X1至Xt-1,假设它们为线性关系,可以对当期Xt的表现进行预测。X的当期值等于一个或数个落后期的线性组合,加常数项,加随机误差。

p阶自回归过程的公式定义:

字段解释:

  • Xt是当期的X的表现
  • c是常数项
  • p是阶数,i为从1到p的值
  • φi是自相关系数
  • t为时间周期
  • εt是均值为0,标准差为δ 的随机误差,同时δ是独立于t的

对于一阶自回模型,用AR(1)来表示,简化后的公式为:

自回归是从线性回归分析中发展而来,只是把自变量x对因变量y的分析,变成自变量x对自身的分析。如果你需要了解线性回归的知识,请参考文章R语言解读一元线性回归模型。

自回归模型的限制

自回归模型是用自身的数据来进行预测,但是这种方法受到一定的限制:

  • 必须具有平稳性,平稳性要求随机过程的随机特征不随时间变化。
  • 必须具有自相关性,如果自相关系数(φi)小于0.5,则不宜采用,否则预测结果极不准确。
  • 自回归只适用于预测与自身前期相关的现象,即受自身历史因素影响较大的现象。对于受其他因素影响的现象,不宜采用自回归,可以改用向量自回归模型。

平稳性时间序列的特点

平稳性要求产生时间序列Y的随机过程的随机特征不随时间变化,则称过程是平稳的;假如该随机过程的随机特征随时间变化,则称过程是非平稳的。

平稳性是由样本时间序列所得到的拟合曲线,在未来的一段期间内能顺着现有的形态能一直地延续下去;如果数据非平稳,则说明样本拟合曲线的形态不具有延续的特点,也就是说拟合出来的曲线将不符合当前曲线的形态。

  • 随机变量Yt的均值和方差均与时间t无关
  • 随机变量Yt和Ys的协方差只与时间差(步长)t-s有关
  • 对于平稳时间序列在数学上有比较丰富的处理手段,非平稳的时间序列通过差分等手段转化为平稳时间序列处理

2. 用R语言构建自回归模型

了解了自回归模型的定义,我们就可以用R语言来模拟一下自回归模型的构建和计算过程。

生成一个随机游走的数据集,满足平稳性的要求。


# 随机游走的数据集
> set.seed(0)
> x for(t in 2:1000) x[t] tsx head(tsx,15)[1] 1.2629543 0.9367209 2.2665202 3.5389495 3.9535909 2.4136409[7] 1.4850739 1.1903534 1.1845862 3.5892396 4.3528331 3.5538238
[13] 2.4061668 2.1167053 1.8174901> plot(tsx)            # 生成可视化图形
> a

数据的如图展示:

自相关系数为0.9879 ,这是一个非常强的自相关性,所以上述的数列符合自相关的特性。

R语言中ar()函数提供了多种自相关系数的估计,包括"yule-walker", "burg", "ols", "mle", "yw",默认是用yule-walker方法,常用的方法还有最小二乘法(ols),极大似然法(mle)。

我们用最小二乘法,来进行参数估计。


> b

用最小二乘法的计算结果,则自相关系统数为0.9911,截距为-0.017。只有使用最小二乘法进行参数估计的时候,才会有截距。

我们用极大似然法,来进行参数估计。


> d

用极大似然法计算结果,则自相关系统数为0.9904。对于上面3种估计方法,自相关系数的值都是很接近的。

3. 模型识别ACF/PACF

在上面的例子中,我们默认是用一阶的自回归模型AR(1),进行程序实现的。在实际应用中,自回归模型AR时间序列的阶数P是未知的,必须根据实际数据来决定,就要对AR模型定阶数。常的方法就是利用自相关函数(ACF)和偏自相关函数(PACF)来确定自回归模型的阶数。在ACF/PACF不能确定的情况下,还需要用AIC(Aikaike info Criterion)、BIC(Bayesian information criterion)的信息准则函数来确定阶数。

自回归模型的确立过程,是通过确定阶数,参数估计,再次确定阶数的方法进行判断。自相关函数ACF,用来确定采用自回归模型是否合适。如果自相关函数具有拖尾性,则AR模型为合适模型。偏自相关函数PACF用来确定模型的阶数,如果从某个阶数之后,偏自相关函数的值都很接近0,则取相应的阶数作为模型阶数,偏自相关函数通过截尾性确定阶数。

1. 自相关函数ACF(autocorrelation function)

将一个有序的随机变量序列与其自身相比较,这就是自相关函数在统计学中的定义。每个不存在相位差的序列,都与其自身相似,即在此情况下,自相关函数值最大。如果序列中的组成部分相互之间存在相关性(不再是随机的),则由以下相关值方程所计算的值不再为零,这样的组成部分为自相关。

自相关函数反映了同一序列在不同时序的取值之间的相关程序。

ACF的公式为:

字段解释

  • Pk,为ACF的标准误差
  • t,为数据集的长度
  • k,为滞后,取值从1到t-1,表示相距 k个时间间隔的序列值之间的相关性
  • Yt,为样本在t时期的值
  • Yt-k,为样本在t-k时期的值
  • μ,为样本的均值

所得的自相关值Pk的取值范围为[-1,1],1为最大正相关值,-1则为最大负相关值,0为不相关。

根据上面公式,我们可以手动计算出tsx数据集的ACF值


> u v # 1阶滞后
> p1 # 2阶滞后
> p2 # 3阶滞后
> p3

同时,我们可以用R语言中的acf()函数来计算,会打印前30个滞后的ACF值。


> acf(tsx)$acf
, , 1[,1][1,] 1.0000000[2,] 0.9878619[3,] 0.9760271[4,] 0.9635961[5,] 0.9503371[6,] 0.9384022[7,] 0.9263075[8,] 0.9142540[9,] 0.9024862
[10,] 0.8914740
[11,] 0.8809663
[12,] 0.8711005
[13,] 0.8628609
[14,] 0.8544984
[15,] 0.8462270
[16,] 0.8384758
[17,] 0.8301834
[18,] 0.8229206
[19,] 0.8161523
[20,] 0.8081941
[21,] 0.8009467
[22,] 0.7942255
[23,] 0.7886249
[24,] 0.7838154
[25,] 0.7789733
[26,] 0.7749697
[27,] 0.7709313
[28,] 0.7662547
[29,] 0.7623381
[30,] 0.7604101
[31,] 0.7577333

比较前3个值的计算结果,与我们自己的计算结果是一样的,同时可以用R语言进行可视化输出。


> acf(tsx)

从上图中看出,数据的ACF为拖尾,存在很严重的自相关性。接下来,这时候我们用偏自相关函数确定一下AR的阶数。

2. 偏自相关函数(PACF)(partial autocorrelation function)

偏自相关函数是有自相关函数推到而来。对于一个平稳AR(p)模型,求出滞后k自相关系数p(k)时,实际上得到并不是x(t)与x(t-k)之间单纯的相关关系。因为x(t)同时还会受到中间k-1个随机变量x(t-1)、x(t-2)、……、x(t-k+1)的影响,而这k-1个随机变量又都和x(t-k)具有相关关系,所以自相关系数p(k)里实际掺杂了其他变量对x(t)与x(t-k)的影响。

为了能单纯测度x(t-k)对x(t)的影响,引进偏自相关系数的概念。对于平稳时间序列{x(t)},所谓滞后k偏自相关系数指在给定中间k-1个随机变量x(t-1)、x(t-2)、……、x(t-k+1)的条件下,或者说,在剔除了中间k-1个随机变量x(t-1)、x(t-2)、……、x(t-k+1)的干扰之后,x(t-k)对x(t)影响的相关程度。

简单来说,就是自相关系数ACF还包含了其他变量的影响,而偏自相关系数PACF是严格这两个变量之间的相关性。在ACF中存在着线性关系和非线性关系,偏自相关函数就是把线性关系从自动关系性中消除。当PACF近似于0,表明两个时间点之间的关系性是完全由线性关系所造成的。

通过R语言的pacf()函数来进行偏自相关函数计算。


> pacf(tsx)$acf
, , 1[,1][1,]  0.987861891[2,]  0.006463542[3,] -0.030541593[4,] -0.041290415[5,]  0.047921168[6,] -0.009774246[7,] -0.006267004[8,]  0.002146693[9,]  0.028782423
[10,]  0.014785187
[11,]  0.019307564
[12,]  0.060879259
[13,] -0.007254278
[14,] -0.004139848
[15,]  0.015707900
[16,] -0.018615370
[17,]  0.037067452
[18,]  0.019322565
[19,] -0.048471479
[20,]  0.023388065
[21,]  0.027640953
[22,]  0.051177900
[23,]  0.028063875
[24,] -0.003957142
[25,]  0.034030631
[26,]  0.004270416
[27,] -0.029613088
[28,]  0.033715973
[29,]  0.092337583
[30,] -0.031264028# 可视化输出
> pacf(tsx)

从上面的这个结果分析,当滞后为1时AR模型显著,滞后为其他值是PACF的值接近于0不显著。所以,对于数据集tsx来说,数据满足AR(1)的自回归模型。对于上文中参数估计出的1阶自相关系数值是可以用的。

4. 模型预测

通过模型识别,我们已经确定了数据集tsx是符合AR(1)的建模条件的,同时我们也创建了AR(1)模型。接下来,就可以利用这个自回测的模型的进行预测,通过规律发现价值。在R语言中,我们可以用predict()函数,实现预测的计算。

使用AR(1)模型进行预测,并保留前5个预测点。


> predict(a,10,n.ahead=5L)
$pred
Time Series:
Start = 2
End = 6
Frequency = 1
[1] 9.839680 9.681307 9.524855 9.370303 9.217627$se
Time Series:
Start = 2
End = 6
Frequency = 1
[1] 1.080826 1.519271 1.849506 2.122810 2.359189

上面结果中,变量$pred表示预测值,变量$se为误差。

我可以生成可视化的图,更直观的看到预测的结果。


# 生成50个预测值
> tsp plot(tsx)# 把预测值和误差画出来
> lines(tsp$pred,col='red')
> lines(tsp$pred+tsp$se,col='blue')
> lines(tsp$pred-tsp$se,col='blue')

图中,黑色线为原始数据的,红色线为预测值,蓝色线为预测值的范围。这样我们就利用AR(1)模型,实现了对规律的预测计算。

上面关于预测和可视化的过程,我们是通过原生的predict()函数和plot()函数完成的。在R语言中,可以用forecast包来简化上面的操作过程,让代码更少,操作更便捷。


# 加载forecast包
> library('forecast')# 生成模型AR(1)
> a2  tsp2 plot(tsp2)

查看forecast()计算后的预测结果。


> tsp2Point Forecast     Lo 80      Hi 80     Lo 95       Hi 95
1001      -15.71590 -16.99118 -14.440628 -17.66627 -13.7655369
1002      -15.60332 -17.39825 -13.808389 -18.34843 -12.8582092
1003      -15.49181 -17.67972 -13.303904 -18.83792 -12.1456966
1004      -15.38136 -17.89579 -12.866932 -19.22685 -11.5358726
1005      -15.27197 -18.06994 -12.474000 -19.55110 -10.9928432
1006      -15.16362 -18.21425 -12.112996 -19.82915 -10.4980922
1007      -15.05631 -18.33593 -11.776682 -20.07206 -10.0405541
1008      -14.95001 -18.43972 -11.460312 -20.28705  -9.6129750
1009      -14.84474 -18.52891 -11.160567 -20.47919  -9.2102846
1010      -14.74046 -18.60591 -10.875013 -20.65216  -8.8287673
1011      -14.63718 -18.67257 -10.601802 -20.80877  -8.4655994
1012      -14.53489 -18.73030 -10.339486 -20.95121  -8.1185723
1013      -14.43357 -18.78024 -10.086905 -21.08123  -7.7859174
1014      -14.33322 -18.82333  -9.843112 -21.20026  -7.4661903
1015      -14.23383 -18.86034  -9.607319 -21.30947  -7.1581923
1016      -14.13538 -18.89190  -9.378864 -21.40985  -6.8609139

通过forecast()函数,直接生成了Forecast值,80%概率的预测值范围,和95%概率的预测值范围。

在明白了整个自回归模型的设计思路、建模过程、检验条件、预测计算、可视化展示的完整操作后,我们就可以真正地把自回归模型用到实际的业务中。发现规律,发现价值!!

自回归模型只是开始,下一篇继续介绍移动平均模型(MA)的建模和使用过程。

转载请注明出处:
http://blog.fens.me/r-ar

This entry was posted in R语言实践, 数据挖掘

R语言解读自回归模型相关推荐

  1. R语言-向量自回归模型VAR的实现

    向量自回归模型VAR是计量经济学中的一个概念,用于多元时间序列相关关系的分析.详细概念我就不赘述了,具体的定义和技术流程可以看计量经济学的相应书籍.人大经济论坛的视频或者是公众号"财经节析& ...

  2. R语言解读资本资产定价模型CAPM

    用IT技术玩金融系列文章,将介绍如何使用IT技术,处理金融大数据.在互联网混迹多年,已经熟练掌握一些IT技术.单纯地在互联网做开发,总觉得使劲的方式不对.要想靠技术养活自己,就要把技术变现.通过&qu ...

  3. R语言解读一元线性回归模型

    R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到大数据的爆发,R语言变成了一门炙手可 ...

  4. 用R语言解读凯利公式

    张丹,R语言中文社区专栏特邀作者,<R的极客理想>系列图书作者,民生银行大数据中心数据分析师,前况客创始人兼CTO. 个人博客 http://fens.me, Alexa全球排名70k. ...

  5. 数据分析-R语言资料整理

    独家分享--48页PPT解密数据可视化! Excel图表快捷操作小技巧 基于随机森林的分类与回归 R语言制作网页 ggplot2:可视化设计师的神器,了解一下 [译]R包介绍:Online Rando ...

  6. R语言中文社区2018年终文章整理(作者篇)

    欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答.求职一站式搞定! 对商业智能BI.大数据分析挖掘.机器学习,python,R等数据领域感兴趣的同学 ...

  7. 精心整理 | R语言中文社区历史文章整理(类型篇)

    2018年过去一半了~又到了盘点的时间~感谢长时间来各位好友的关注,我们的成长与你们的爱护是分不开的.更感谢各位老师的投稿,支撑起了我们的这个社区,让更多R语言的爱好者和从业者获得最棒的知识!本文选取 ...

  8. 用R语言把数据玩出花样

    用R语言把数据玩出花样 数据处理 R 去重 数据可视化 阅读759  R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器.随着越来越多的工程 ...

  9. 多元线性回归分析c语言,多元线性回归公式推导及R语言实现

    多元线性回归 多元线性回归模型 实际中有很多问题是一个因变量与多个自变量成线性相关,我们可以用一个多元线性回归方程来表示. 为了方便计算,我们将上式写成矩阵形式: Y = XW 假设自变量维度为N W ...

最新文章

  1. 周周有好文2007-10-28 2007-11-3
  2. python中的_doc_是什么
  3. top.location.href和localtion.href代码剖析
  4. flowable实战(十一)flowable 删除数据库表先后顺序
  5. 【转】Tomcat中部署java web应用程序
  6. Web前端入门学习之JS基础知识梳理汇总
  7. g++: internal compiler error: Killed (program cc1plus)Please submit a full bug report,内存不足问题解决
  8. 网页鼠标点击特效案例收集
  9. linux比windows丑,告别 Windows 难看难用,教你打造体验不输 macOS 和 Linux 的终端
  10. vue省市区三级联动-封装集成
  11. Python数据处理Tips数据重复值处理常用方法
  12. 园区网络的IP地址资源规划 使用VLSM(变长子网掩码)主机数量、子网段数量、主机总数如何计算
  13. 企业资源计划(ERP)原理与实践第一章
  14. linux没法上网,LINUX没法上网?
  15. 记一次千人大项目的感受
  16. php htmlpurifier,php – HtmlPurifier – 允许数据属性
  17. 启动管理-启动流程-启动过程(有流程图)
  18. Sybil_attack (女巫攻击)
  19. 接口中默认方法的重要作用
  20. html输入密码访问指定页面,三种方法使HTML单页面输入密码才能访问

热门文章

  1. 【Tools/macOS系列】iPad作为扩展显示屏的几种解决方案
  2. Certificate doesn't match any of the subject alternative names问题的解决
  3. vite报错 Cannot access ambient const enums when the ‘--isolatedModules‘ f lag is provided. 26 rea
  4. Delphi TStringGrid 类(1)
  5. Win9x在Intel和AMD新处理器虚拟机抽风的原因及补丁
  6. Hadoop 深入浅出 ---- 入门 (1)
  7. 使用unity开发答题系统
  8. 名师为你划重点 再不“入坑”体育圈就OUT啦!
  9. 三层交换机实现多网段(VLAN)互通和某些网段限制通信
  10. 安保巡更室内外定位系统解决方案