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

一、时间序列的定义

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

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

二、时间序列的预处理

1、平稳性检验:

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

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

在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))

在这里插入图片描述

参考书目:

A Complete Tutorial on Time Series Modeling in R

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

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

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

  • 11
    点赞
  • 138
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值