使用R语言进行时间序列分析


一、时间序列的定义

时间序列是将统一统计值按照时间发生的先后顺序来进行排列,时间序列分析的主要目的是根据已有数据对未来进行预测。

一个稳定的时间序列中常常包含两个部分,那么就是:有规律的时间序列+噪声。所以,在以下的方法中,主要的目的就是去过滤噪声值,让我们的时间序列更加的有分析意义。

二、时间序列的预处理

1、平稳性检验:

拿到一个时间序列之后,我们首先要对其稳定性进行判断,只有非白噪声的稳定性时间序列才有分析的意义以及预测未来数据的价值。

所谓平稳,是指统计值在一个常数上下波动并且波动范围是有界限的。如果有明显的趋势或者周期性,那么就是不稳定的。一般判断有三种方法:

    画出时间序列的趋势图,看趋势判断
    画自相关图和偏相关图,平稳时间序列的自相关图和偏相关图,要么拖尾,要么截尾。
    (关于拖尾截尾的概念:https://blog.csdn.net/xianyuhenxian/article/details/60602828)
    检验序列中是否存在单位根,如果存在单位根,就是非平稳时间序列。
    (关于单位根检验:http://bbs.pinggu.org/thread-2412454-1-1.html)

在R语言中,DF检测是一种检测稳定性的方法,如果得出的P值小于临界值,则认为是数列是稳定的。

2、白噪声检验

白噪声序列,又称为纯随机性序列,序列的各个值之间没有任何的相关关系,序列在进行无序的随机波动,可以终止对该序列的分析,因为从白噪声序列中是提取不到任何有价值的信息的。

3、平稳时间序列的参数特点

均值和方差为常数,并且具有与时间无关的自协方差。

三、时间序列建模步骤

    拿到被分析的时间序列数据集。
    对数据绘图,观测其平稳性。若为非平稳时间序列要先进行d阶差分运算后化为平稳时间序列,此处的d即为ARIMA(p,d,q)模型中的d;若为平稳序列,则用ARMA(p,q)模型。所以ARIMA(p,d,q) 模型区别于ARMA(p,q)之处就在于前者的自回归部分的特征多项式含有d个单位根。
    对得到的平稳时间序列分别求得其自相关系数ACF 和偏自相关系数PACF,通过对自相关图和偏自相关图的分析,得到最佳的阶层 p 和阶数 q。由以上得到的d、q、p ,得到ARIMA模型。
    模型诊断。进行诊断分析,以证实所得模型确实与所观察到的数据特征相符。若不相符,重新回到第(3)步。

四、自回归综合移动平均模型ARIMA

首先我们先了解AR(自回归模型)和MA(移动平均模型)

AR(自回归模型):当存在xt = f1 xt-1 + f2 xt-2 + ..+fp xt-p+ut .时,其中ut是白噪声过程,则这个线性过程成为p阶自回归过程。

一般我们常用的即为1阶以及2阶自回归即:xt = f1 xt-1 + ut,xt = f1 xt-1 + f2 xt-2 + ut。

自回归模型平稳必要非充分条件为所有系数相加<1

MA(移动平均模型):移动平均即将时间序列中的若干项进行算术平均得到的一系列平均数,若平均的数据项数为k,则成为k期的平均移动。相应的,还有加权平均移动法,即将特定期数的值进行加权计算平均值。

ARMA(自回归移动平均模型):

自回归滑动平均模型(ARMA)
如果时间序列Yt满足:
则称时间序列为服从(p,q)阶自回归滑动平均混合模型。或者记为φ(B)
(摘自百度百科,MA的体现形式有所出入,请仔细体会)

ARIMA(自回归差分移动平均模型):

有了以上基础之后,我们便很容易理解ARIMA模型了。

前边我们提到,非稳定性模型可以通过差分的方式使之平稳化,而ARIMA即在参数中比ARMA多了一个差分过程,如果ARMA的公式为ARMA(P,Q),那么ARIMA即为ARIMA(P,D,Q)这里的d即为差分的意思,代表是几阶差分。

五、指数平滑法

  基本原理:指数平滑法是移动平均法中的一种,其特点在于给过去的观测值不一样的权重,即较近期观测值的权数比较远期观测值的权数要大。根据平滑次数不同,指数平滑法分为一次指数平滑法、二次指数平滑法和三次指数平滑法等。但它们的基本思想都是:预测值是以前观测值的加权和,且对不同的数据给予不同的权数,新数据给予较大的权数,旧数据给予较小的权数。
       方法应用:指数平滑法是生产预测中常用的一种方法。也用于中短期经济发展趋势预测,所有预测方法中,指数平滑是用得最多的一种。
指数平滑法的基本公式:St=a*yt+(1-a)*St-1 式中,
  St--时间t的平滑值;
  yt--时间t的实际值;
  St-1--时间t-1的平滑值;
  a--平滑常数,其取值范围为[0,1]

据平滑次数不同,指数平滑法分为:一次指数平滑法、二次指数平滑和三次指数平滑法等。

具体可以参考:https://blog.csdn.net/u013527419/article/details/52822622

六、R语言中实现案例

    #时间序列相关案例
     
    #ts方法构建时间序列介绍
    a<-ts(1:30,frequency = 12,start = c(2011,3))
    print(a)
    # > print(a)
    # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
    # 2011           1   2   3   4   5   6   7   8   9  10
    # 2012  11  12  13  14  15  16  17  18  19  20  21  22
    # 2013  23  24  25  26  27  28  29  30   
    str(a)
    attributes(a)
     
    #在ts函数的参数中,1:30代以1-30为基础建立30个时间序列值,frequence=7代表以周循环,=12代表以月循环,=4代表以季度循环
    #start 代表起始的日期
     
    #将时间序列拆分成趋势成分、季节成分、随机成分
    #所谓的趋势成分是指长时间间隔的大体运动方向,季节成分是指季节性的变化,随机成分是指重复但非周期的波动,最终是随机成分
    #R自带的AirPassengers中很好演示了时间序列
    plot(AirPassengers)
    install.packages("tseries")
    install.packages("forecast")
    library(tseries)
    library(forecast)
    #同样可以使用tsdisplay函数显示ACF和PACF图,用来确定arima函数的参数
    tsdisplay(AirPassengers)
    #使用decompose()函数将其拆分为不同成分
    dc<-decompose(AirPassengers)
     
    #打印出四种趋势图
    plot(dc)


    #打印出关于季节性趋势的图表
    season<-dc$figure
    plot(season,type = "b",xaxt="n",xlab = "")

    #构建arima模型,我们首先使用forcast包里的auto.arima进行参数估计,然后再使用arima
    a<-auto.arima(AirPassengers)
    print(a)
    # > print(a)
    # Series: AirPassengers
    # ARIMA(2,1,1)(0,1,0)[12]
    #
    # Coefficients:
    #   ar1     ar2      ma1
    # 0.5960  0.2143  -0.9819
    # s.e.  0.0888  0.0880   0.0292
    #
    # sigma^2 estimated as 132.3:  log likelihood=-504.92
    # AIC=1017.85   AICc=1018.17   BIC=1029.35
     
     
    fit<-arima(AirPassengers,order = c(2,1,1),seasonal = list(order=c(0,1,0),period=12))
    print(fit)
    fore=predict(fit,n.head=24)
    U<-fore$pred+2*fore$se
    L<-fore$pred-2*fore$se
    ts.plot(AirPassengers,fore$pred,U,L,col=c(1,2,4,4),lty=c(1,1,2,2))

    install.packages("urca")
    library(urca)
    ur.df(AirPassengers)
     
    # ###############################################################
    # # Augmented Dickey-Fuller Test Unit Root / Cointegration Test #
    # ###############################################################
    #
    # The value of the test statistic is: -0.3524

-0.3524小于5%的小概率时间,所以是稳定的?

本案例中最终预测曲线没有画出上下界,尚未找到原因。

另外,时间序列中存在时间序列聚类和时间序列分类的问题,尚待总结。

参考书目:

A Complete Tutorial on Time Series Modeling in R

《时间序列预测实践教程》-清华大学出版社

《时间序列分析28讲视频》-中国科技大学

 时间序列完全教程:https://blog.csdn.net/Earl211/article/details/50957029

原文链接:https://blog.csdn.net/glodon_mr_chen/java/article/details/79848827


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM