时间序列完整教程(R)
- 格式:docx
- 大小:253.04 KB
- 文档页数:17
时间序列分析R语言代码时间序列分析是统计学中的一个重要分支,主要用于研究随时间变化的数据。
它可以帮助我们了解数据的趋势、周期性和季节性等特征,从而为预测和决策提供依据。
R语言是一种功能强大的统计分析工具,提供了丰富的时间序列分析函数和包,以下是一个简单的时间序列分析R语言代码示例。
首先,我们需要加载需要用到的包,如`ggplot2`和`forecast`。
```Rlibrary(ggplot2)library(forecast)```接下来,我们可以导入时间序列数据,并将其转换为时间序列对象。
假设我们有一个名为`data.csv`的数据文件,其中包含每个月份的销售额数据。
```Rdata <- read.csv("data.csv")ts_data <- ts(data$Sales, start = c(2000, 1), frequency = 12) ```通过绘制时间序列图,我们可以直观地观察数据的趋势和季节性。
```Rggplot(data, aes(x = Month, y = Sales)) +geom_line( +xlab("Month") +ylab("Sales") +theme_minimal``````R```接下来,我们可以通过绘制分解后的趋势、季节性和随机成分图来进一步研究数据的特征。
```Rtheme_minimal```我们还可以使用自回归移动平均模型(ARIMA)对时间序列数据进行建模和预测。
首先,我们需要估计ARIMA模型的参数。
```Rarima_model <- auto.arima(ts_data)```通过`auto.arima(`函数,R会自动选择最佳的ARIMA模型。
然后,我们可以使用这个模型来进行预测。
假设我们希望对未来12个月的销售额进行预测。
```Rforecast_data <- forecast(arima_model, h = 12)```最后,我们可以绘制预测结果和置信区间的图表。
#例2.1 绘制1964——1999年中国年纱产量序列时序图(数据见附录1.2)Data1.2=read.csv("C:\\Users\\Administrator\\De sktop\\附录1.2.csv",header=T)#如果有标题,用T;没有标题用Fplot(Data1.2,type='o')#例2.1续tdat1.2=Data1.2[,2]a1.2=acf(tdat1.2)#例2.2绘制1962年1月至1975年12月平均每头奶牛产奶量序列时序图(数据见附录1.3)Data1.3=read.csv("C:\\Users\\Administrator\\De sktop\\附录1.3.csv",header=F)tdat1.3=as.vector(t(as.matrix(Data1.3)))[1:168 ]#矩阵转置转向量plot(tdat1.3,type='l')#例2.2续acf(tdat1.3) #把字去掉pacf(tdat1.3)#例2.3绘制1949——1998年北京市每年最高气温序列时序图Data1.4=read.csv("C:\\Users\\Administrator\\De sktop\\附录1.4.csv",header=T)plot(Data1.4,type='o')##不会定义坐标轴#例2.3续tdat1.4=Data1.4[,2]a1.4=acf(tdat1.4)#例2.3续Box.test(tdat1.4,type="Ljung-Box",lag=6) Box.test(tdat1.4,type="Ljung-Box",lag=12)#例2.4随机产生1000个服从标准正态分布的白噪声序列观察值,并绘制时序图Data2.4=rnorm(1000,0,1)Data2.4plot(Data2.4,type='l')#例2.4续a2.4=acf(Data2.4)#例2.4续Box.test(Data2.4,type="Ljung-Box",lag=6) Box.test(Data2.4,type="Ljung-Box",lag=12) #例2.5对1950——1998年北京市城乡居民定期储蓄所占比例序列的平稳性与纯随机性进行检验Data1.5=read.csv("C:\\Users\\Administrator\\De sktop\\附录1.5.csv",header=T)plot(Data1.5,type='o',xlim=c(1950,2010),ylim=c (60,100))tdat1.5=Data1.5[,2]a1.5=acf(tdat1.5)#白噪声检验Box.test(tdat1.5,type="Ljung-Box",lag=6) Box.test(tdat1.5,type="Ljung-Box",lag=12)#例2.5续选择合适的ARMA模型拟合序列acf(tdat1.5)pacf(tdat1.5)#根据自相关系数图和偏自相关系数图可以判断为AR (1)模型#例2.5续 P81 口径的求法在文档上#P83arima(tdat1.5,order=c(1,0,0),method="ML")#极大似然估计ar1=arima(tdat1.5,order=c(1,0,0),method="ML") summary(ar1)ev=ar1$residualsacf(ev)pacf(ev)#参数的显著性检验t1=0.6914/0.0989p1=pt(t1,df=48,lower.tail=F)*2#ar1的显著性检验t2=81.5509/ 1.7453p2=pt(t2,df=48,lower.tail=F)*2#残差白噪声检验Box.test(ev,type="Ljung-Box",lag=6,fitdf=1) Box.test(ev,type="Ljung-Box",lag=12,fitdf=1) #例2.5续P94预测及置信区间predict(arima(tdat1.5,order=c(1,0,0)),n.ahead= 5)tdat1.5.fore=predict(arima(tdat1.5,order=c(1,0 ,0)),n.ahead=5)U=tdat1.5.fore$pred+1.96*tdat1.5.fore$seL=tdat1.5.fore$pred-1.96*tdat1.5.fore$seplot(c(tdat1.5,tdat1.5.fore$pred),type="l",col =1:2)lines(U,col="blue",lty="dashed")lines(L,col="blue",lty="dashed")#例3.1.1 例3.5 例3.5续#方法一plot.ts(arima.sim(n=100,list(ar=0.8))) #方法二x0=runif(1)x=rep(0,1500)x[1]=0.8*x0+rnorm(1)for(i in 2:length(x)){x[i]=0.8*x[i-1]+rnorm(1)}plot(x[1:100],type="l")acf(x)pacf(x)##拟合图没有画出来#例3.1.2x0=runif(1)x=rep(0,1500)x[1]=-1.1*x0+rnorm(1)for(i in 2:length(x)){x[i]=-1.1*x[i-1]+rnorm(1)}plot(x[1:100],type="l")acf(x)pacf(x)#例3.1.3方法一plot.ts(arima.sim(n=100,list(ar=c(1,-0.5)))) #方法二x0=runif(1)x1=runif(1)x=rep(0,1500)x[1]=x1x[2]=x1-0.5*x0+rnorm(1)for(i in 3:length(x)){x[i]=x[i-1]-0.5*x[i-2]+rnorm(1)}plot(x[1:100],type="l")acf(x)pacf(x)#例3.1.4x0=runif(1)x1=runif(1)x=rep(0,1500)x[1]=x1 x[2]=x1+0.5*x0+rnorm(1)for(i in 3:length(x)){x[i]=x[i-1]+0.5*x[i-2]+rnorm(1)}plot(x[1:100],type="l")acf(x)pacf(x)又一个式子x0=runif(1)x1=runif(1)x=rep(0,1500)x[1]=x1x[2]=-x1-0.5*x0+rnorm(1)for(i in 3:length(x)){x[i]=-x[i-1]-0.5*x[i-2]+rnorm(1)}plot(x[1:100],type="l")acf(x)pacf(x)#均值和方差smu=mean(x)svar=var(x)#例3.2求平稳AR(1)模型的方差例3.3mu=0mvar=1/(1-0.8^2) #书上51页#总体均值方差cat("population mean and var are",c(mu,mvar),"\n")#样本均值方差cat("sample mean and var are",c(mu,mvar),"\n")#例题3.4svar=(1+0.5)/((1-0.5)*(1-1-0.5)*(1+1-0.5))#例题3.6 MA模型自相关系数图截尾和偏自相关系数图拖尾#3.6.1法一:x=arima.sim(n=1000,list(ma=-2))plot.ts(x,type='l')acf(x)pacf(x)法二x=rep(0:1000)for(i in 1:1000){x[i]=rnorm[i]-2*rnorm[i-1]}plot(x,type='l')acf(x)pacf(x)#3.6.2法一:x=arima.sim(n=1000,list(ma=-0.5))plot.ts(x,type='l')acf(x)pacf(x)法二x=rep(0:1000)for(i in 1:1000){x[i]=rnorm[i]-0.5*rnorm[i-1]}plot(x,type='l')acf(x)pacf(x)##错误于rnorm[i] : 类别为'closure'的对象不可以取子集#3.6.3法一:x=arima.sim(n=1000,list(ma=c(-4/5,16/25))) plot.ts(x,type='l')acf(x)pacf(x)法二:x=rep(0:1000)for(i in 1:1000){x[i]=rnorm[i]-4/5*rnorm[i-1]+16/25*rnorm[i-2] }plot(x,type='l')acf(x)pacf(x)##错误于x[i] = rnorm[i] - 4/5 * rnorm[i - 1] + 16/25 * rnorm[i - 2] :##更换参数长度为零#例3.6续根据书上64页来判断#例 3.7拟合ARMA(1,1)模型,x(t)-0.5x(t-1)=u(t)-0.8*(u-1),并直观观察该模型自相关系数和偏自相关系数的拖尾性。
第四章:非平稳序列的确定性分析题目一:()()()()()()()12312123121231ˆ14111ˆˆ2144451.1616T T T T T T T T T T T T T T T T T T T T T xx x x x xx x x x x x x x x x x x x x x -------------=+++⎡⎤=+++=++++++⎢⎥⎣⎦=+++ 题目二:因为采用指数平滑法,所以1,t t x x +满足式子()11t t t x x x αα-=+-,下面式子()()11111t t t t t tx x x x x x αααα-++=+-⎧⎪⎨=+-⎪⎩ 成立,由上式可以推导出()()11111t t t t x x x x αααα++-=+-+-⎡⎤⎣⎦,代入数据得:2=5α. 题目三:()()()21221922212020192001ˆ1210101113=11.251ˆ 1010111311.2=11.04.5ˆˆˆ10.40.6.i i i xxxx x x x x αα-==++++=++++===+-=⋅∑(1)(2)根据程序计算可得:22ˆ11.79277.x= ()222019181716161ˆ2525xx x x x x =++++(3)可以推导出16,0.425a b ==,则425b a -=-. 题目四:因为,1,2,3,t x t t ==,根据指数平滑的关系式,我们可以得到以下公式:()()()()()()()()()()()()()()()221221 11121111 1111311. 2t t t t t tt x t t t x t t αααααααααααααααααααα----=+-------=-+---+--+++2+, ++2+用(1)式减去(2)式得:()()()()()221=11111.t t tt x t αααααααααααα-------------所以我们可以得到下面的等式:()()()()()()122111=11111=.t t t tt x t t αααααααα+-----------------()111lim lim 1.ttt ttxt tααα+→∞→∞----==题目五:1. 运行程序:最下方。
时间序列建模的完整教程用R语言时间序列建模是一种分析和预测时间序列数据的方法。
R语言提供了丰富的时间序列建模函数和包,使得时间序列建模变得更加容易和高效。
本教程将向您介绍时间序列建模的基本概念和R语言的应用,以帮助您进行时间序列分析和预测。
Ⅰ.时间序列的基本概念时间序列是按照一定时间顺序排列的一系列观测值的集合。
它具有以下几个特点:1.时间依赖性:时间序列中的观测值之间存在着时间上的关联和依赖关系。
2.趋势性:时间序列在较长时间内可能会呈现出上升或下降的趋势。
3.季节性:时间序列中可能存在其中一种周期性的波动。
4.随机性:时间序列中可能存在一定的不规则波动或异常值。
Ⅱ.时间序列的建模步骤1.数据准备使用R语言读取时间序列数据,并将其转化为时间序列对象。
可以使用`ts(`函数来创建时间序列对象,指定时间序列的起始时间、观测间隔和数据值。
```R#读取时间序列数据data <- read.csv("data.csv")#创建时间序列对象ts_data <- ts(data$value, start = c(2000, 1), frequency = 12) ```2.模型选择和参数估计选择合适的时间序列模型对数据进行建模。
R语言提供了多种时间序列模型,如自回归移动平均模型(ARMA)、季节性自回归移动平均模型(SARIMA)和指数平滑模型(ES)等。
可以使用`auto.arima(`函数自动选择ARIMA模型的参数。
```R#自动选择ARIMA模型model <- auto.arima(ts_data)```3.模型检验根据所选择的模型,使用R语言提供的函数进行模型检验,判断模型是否符合数据的特征。
可以使用`checkresiduals(`函数对模型的残差进行检验。
```R#对模型的残差进行检验checkresiduals(model)```4.预测使用所选择的模型对未来的数据进行预测。
在R语言中,可以使用不同的包来实现贝叶斯时间序列模型。
下面是一个简单的例子,展示了如何使用bsts包来实现贝叶斯结构时间序列模型(Bayesian Structural Time Series Model):
首先,确保安装了bsts包。
如果尚未安装,可以使用以下命令进行安装:
接下来,可以使用以下示例代码来实现贝叶斯结构时间序列模型:
在这个示例中,我们首先生成了一个示例的时间序列数据y。
然后,我们使用bsts 包中的函数构建了一个贝叶斯结构时间序列模型,并对其进行了拟合。
最后,我们打印了模型的摘要信息,并进行了结果的可视化。
请注意,这只是一个简单的贝叶斯时间序列模型的示例,可以根据的具体数据和需求进行调整和修改。
如果需要更复杂的模型或对模型进行更深入的调整和分析,可能需要更多的参数设置和模型定制。
⽤R做时间序列分析之ARIMA模型预测昨天刚刚把导⼊数据弄好,今天迫不及待试试怎么做预测,⽹上找的帖⼦跟着弄的。
第⼀步.对原始数据进⾏分析⼀.ARIMA预测时间序列指数平滑法对于预测来说是⾮常有帮助的,⽽且它对时间序列上⾯连续的值之间相关性没有要求。
但是,如果你想使⽤指数平滑法计算出预测区间,那么预测误差必须是不相关的,⽽且必须是服从零均值、⽅差不变的正态分布。
即使指数平滑法对时间序列连续数值之间相关性没有要求,在某种情况下,我们可以通过考虑数据之间的相关性来创建更好的预测模型。
⾃回归移动平均模型( ARIMA)包含⼀个确定(explicit)的统计模型⽤于处理时间序列的不规则部分,它也允许不规则部分可以⾃相关。
⼆.确定数据的差分ARIMA 模型为平稳时间序列定义的。
因此,如果你从⼀个⾮平稳的时间序列开始,⾸先你就需要做时间序列差分直到你得到⼀个平稳时间序列。
如果你必须对时间序列做 d 阶差分才能得到⼀个平稳序列,那么你就使⽤ARIMA(p,d,q)模型,其中 d 是差分的阶数。
我们以每年⼥⼈裙⼦边缘的直径做成的时间序列数据为例。
从 1866 年到 1911 年在平均值上是不平稳的。
随着时间增加,数值变化很⼤。
下⾯是.dat数据:下⾯进⼊预测。
先导⼊数据:> skirts <- scan("/tsdldata/roberts/skirts.dat",skip=5) #导⼊在线数据,并跳过前5⾏Read 46 items #R控制台显⽰内容,表⽰共读取46⾏数据> skirts<- ts(skirts,start = c(1866)) #设定时间1866开始> plot.ts(skirts) #画出图我们可以通过键⼊下⾯的代码来得到时间序列(数据存于“skirtsts”)的⼀阶差分,并画出差分序列的图: > skirtsdiff<-diff(skirts,differences=1) #⼀阶差分> plot.ts(skirtsdiff) #画图从⼀阶差分的图中可以看出,数据仍是不平稳的。
时间序列:R语⾔ARMA-GARCH模型ARMA:
#读⼊数据,并绘制时序图
d<-read.table("C:/Users/haha/Desktop/R/zuoye/1.txt")
x<-ts(log(d),start = 1)
1: x的时间序列图:
x<-ts(log(d),start = 1)
plot(x)
2:
从上图可以看出x.dif序列值在0的附近波动,没有存在显著地波动起伏⼤的情况,基本为平稳特征.
3.对x.dif序列adf单位根检验:
从x.dif的adf单位根检验p=0.01⼩于显著⽔平a=0.05,故拒绝原假设,所有x.dif是平稳序列.
4.
从上图可以看出x.dif的ACF,PACF是均显⽰不截尾的性质(PACF:lag12,14; ACF:lag:4,12 在2倍标准差外),故认为可以尝试使⽤模型ARMA(1,1)
5: 系统⾃动定阶:
为避免错估模型采⽤,auto.arima⾃动定价模型
定阶模型是ARIMA(1,1,1),其中p=1,d=1,q=1
也就是d=1是需要⼀阶差分后,序列才平稳,然后对它进⾏⾃回归模型是ARMA(1,1).既最后得到模型为x.dif序列的ARMA(1,1)模型6:
7: 进⾏⽩噪声检验:
8:
GARCH:
ARCH效应检验的两种⽅法:LM检验(拉格朗⽇检验)
拟合garch(1,1):。
时间序列数据分析R语言案例时间序列数据分析是一种专门用于分析和预测时间序列数据的统计方法。
时间序列数据是按照时间顺序排列的观测数据,在金融、经济、气象等领域都有广泛的应用。
在本文中,将介绍一个使用R语言进行时间序列数据分析的案例。
假设我们有一个销售数据集,包含了过去几年每月的销售额数据。
我们的目标是分析销售趋势,并且预测未来的销售额。
下面是具体的步骤。
第一步是导入数据。
我们可以使用R语言中的`read.csv(`函数来导入包含销售数据的CSV文件,并将数据存储在一个数据框中。
```Rsales_data <- read.csv("sales_data.csv")```第二步是查看数据的结构和摘要统计信息,以便了解数据集的特征。
```Rstr(sales_data)summary(sales_data)```第三步是将时间列转换为时间序列对象。
在R中,可以使用`as.Date(`函数将日期列转换为`Date`对象,并使用`ts(`函数将数据转换为时间序列对象。
sales_data$date <- as.Date(sales_data$date, format = "%Y-%m-%d")sales_ts <- ts(sales_data$sales, start = 2024, frequency = 12)```第四步是对时间序列数据进行可视化。
可以使用`plot(`函数将销售时间序列数据绘制成折线图,以便观察数据的趋势和季节性。
```Rplot(sales_ts, main = "Monthly Sales", xlab = "Year", ylab = "Sales")``````R```第六步是检验时间序列数据的平稳性。
可以使用`adf.test(`函数或`kpss.test(`函数对时间序列数据进行单位根检验或Kwiatkowski–Phillips–Schmidt–Shin(test for the Null hypothesis of stationarity)检验。
时间序列完整教程(R)简介在商业应用中,时间是最重要的因素,能够提升成功率。
然而绝大多数公司很难跟上时间的脚步。
但是随着技术的发展,出现了很多有效的方法,能够让我们预测未来。
不要担心,本文并不会讨论时间机器,讨论的都是很实用的东西。
本文将要讨论关于预测的方法。
有一种预测是跟时间相关的,而这种处理与时间相关数据的方法叫做时间序列模型。
这个模型能够在与时间相关的数据中,找到一些隐藏的信息来辅助决策。
当我们处理时间序列数据的时候,时间序列模型是非常有用的模型。
大多数公司都是基于时间序列数据来分析第二年的销售量,网站流量,竞争地位和更多的东西。
然而很多人并不了解时间序列分析这个领域。
所以,如果你不了解时间序列模型。
这篇文章将会向你介绍时间序列模型的处理步骤以及它的相关技术。
本文包含的内容如下所示:目录* 1、时间序列模型介绍* 2、使用R语言来探索时间序列数据* 3、介绍ARMA时间序列模型* 4、ARIMA时间序列模型的框架与应用1、时间序列模型介绍本节包括平稳序列,随机游走,Rho系数,Dickey Fuller检验平稳性。
如果这些知识你都不知道,不用担心-接下来这些概念本节都会进行详细的介绍,我敢打赌你很喜欢我的介绍的。
平稳序列判断一个序列是不是平稳序列有三个评判标准:1. 均值,是与时间t 无关的常数。
下图(左)满足平稳序列的条件,下图(右)很明显具有时间依赖。
1. 方差,是与时间t 无关的常数。
这个特性叫做方差齐性。
下图显示了什么是方差对齐,什么不是方差对齐。
(注意右图的不同分布。
)2. 协方差,只与时期间隔k有关,与时间t 无关的常数。
如下图(右),可以注意到随着时间的增加,曲线变得越来越近。
因此红色序列的协方差并不是恒定的。
我们为什么要关心平稳时间序列呢?除非你的时间序列是平稳的,否则不能建立一个时间序列模型。
在很多案例中时间平稳条件常常是不满足的,所以首先要做的就是让时间序列变得平稳,然后尝试使用随机模型预测这个时间序列。
有很多方法来平稳数据,比如消除长期趋势,差分化。
随机游走这是时间序列最基本的概念。
你可能很了解这个概念。
但是,很多工业界的人仍然将随机游走看作一个平稳序列。
在这一节中,我会使用一些数学工具,帮助理解这个概念。
我们先看一个例子例子:想想一个女孩在一个巨型棋盘上面随意移动。
这里,下一个位置只取决于上一个位置。
现在想象一下,你在一个封闭的房间里,不能看见这个女孩。
但是你想要预测不同时刻这个女孩的位置。
怎么才能预测的准一点?当然随着时间的推移你预测的越来越不准。
在t=0时刻,你肯定知道这个女孩在哪里。
下一个时刻女孩移动到附件8块方格中的一块,这个时候,你预测到的可能性已经降为1/8。
继续往下继续预测,现在我们将这个序列公式化:$X(t) = X(t-1) + Er(t)$1现在,我们将改变Rho看看我们可不可以让这个序列变的平稳。
这里我们只是看,并不进行平稳性检验。
让我们从一个Rho=0的完全平稳序列开始。
这里是时间序列的图:将Rho的值增加到0.5,我们将会得到如下图:你可能会注意到,我们的周期变长了,但基本上似乎没有一个严重违反平稳性的假设。
现在让我们采取更极端的情况下ρ= 0.9我们仍然看到,在一定的时间间隔后,从极端值返回到零。
这一系列也不违反非平稳性。
现在,让我们用ρ= 1随机游走看看这显然是违反固定条件。
是什么使rho= 1变得这么特殊的呢?这种情况并不满足平稳性测试?我们来找找这个数学的原因公式X(t) = Rho * X(t-1) + Er(t)的期望为:# 拟合一条直线>cycle(AirPassengers) #绘制盒图重要推论1. 每年的趋势显示旅客的数量每年都在增加;2. 七八月的均值和方差比其他月份要高很多;3. 每个月的平均值并不相同,但是方差差异很小。
因此,可以看出具有很强的周期性,一个周期为12个月或更少。
查看数据,试探数据是建立时间序列模型最重要的一部-如果没有这一步,你将不知道这个序列是不是平稳序列。
就像这个例子一样,我们已经知道了关于这个模型的很多细节。
接下来我们会建立一些时间序列模型以及这些模型的特征,也会做一些预测。
3、ARMA时间序列模型ARMA也叫自回归移动平均混合模型。
ARMA模型经常在时间序列中使用。
在A RMA模型中,AR代表自回归,MA代表移动平均。
如果这些术语听起来很复杂,不用担心-下面将会用几分钟的时间简单介绍这些概念。
我们现在就会介绍这些模型的特点。
在开始之前,你首先要记住,AR或者MA 并不是应用在非平稳序列上的。
在实际应用中可能会得到一个非平稳序列,你首先要做的就是将这个序列变成平稳序列(通过差分/转换),然后选择可以使用的时间序列模型。
首先,本文将分开介绍两个模型(AR&MA)。
接下来我们看一看这些模型的特点。
自回归时间序列模型让我们从下面的例子理解AR模型:假设一个国家的GDP(x(t))依赖与去年的GDP(x(t-1))。
这个假设表明,一个国家今年的GDP总值依赖于去年的GDP总值和今年的新开的工厂和服务。
但x(t) = alpha * x(t –1) + error (t) (1)这个等式就是AR公式。
公式(1)表示下一个点完全依赖与前面一个点。
alph a是一个系数,希望能够找到alpha最小化错误率。
x(t-1)同样依赖x(t)。
例如,x(t)代表一个城市在某一天的果汁的销售量。
在冬天,极少的供应商进果汁。
突然有一天,温度上升了,果汁的需求猛增到1000.然而过了几天,气温又下降了。
但是众所周知,人们在热天会喝果汁,这些人会有50%在冷天仍然喝果汁。
在接下来的几天,这个比例降到了25%(50%的50%),然后几天后逐渐降到一个很小的数。
下图解释了AR序列的惯性:尝试把这个图画出来,就是这个样子的:注意到MA和AR模型的不同了没?在MA模型中,噪声/冲击迅速消失。
在AR 模型中会受到长时间的影响。
AR模型与MA模型的不同AR与MA模型的主要不同在于时间序列对象在不同时间点的相关性。
MA模型用过去各个时期的随机干扰或预测误差的线性组合来表达当前预测值。
当n>某一个值时,x(t)与x(t-n)的相关性总为0.AM模型仅通过时间序列变量的自身历史观测值来反映有关因素对预测目标的影响和作用,步骤模型变量相对独立的假设条件约束,所构成的模型可以消除普通回退预测方法中由于自变量选择、多重共线性等造成的困难。
即AM模型中x(t)与x(t-1)的相关性随着时间的推移变得越来越小。
这个差别要好好利用起来。
利用ACF和PACF绘图一旦我们得到一个平稳的时间序列。
我们必须要回答两个最重要的问题;Q1:这个是AR或者MA过程?Q2:我们需要利用的AR或者MA过程的顺序是什么?解决这两个问题我们要借助两个系数:时间序列x(t)滞后k阶的样本自相关系数(ACF)和滞后k期的情况下样本偏自相关系数(PACF),公式省略。
AR模型的ACF和PACF:通过计算证明可知:- AR的ACF为拖尾序列,即无论滞后期k取多大,ACF的计算值均与其1到p 阶滞后的自相关函数有关。
- AR的PACF为截尾序列,即当滞后期k>p时PACF=0的现象。
上图蓝线显示值与0具有显著的差异。
很显然上面PACF图显示截尾于第二个滞后,这意味这是一个AR(2)过程。
MA模型的ACF和PACF:- MA的ACF为截尾序列,即当滞后期k>p时PACF=0的现象。
- MR的PACF为拖尾序列,即无论滞后期k取多大,ACF的计算值均与其1到p阶滞后的自相关函数有关。
很显然,上面ACF图截尾于第二个滞后,这应该是一个MA(2)过程。
目前,本文已经介绍了关于使用ACF&PACF图识别平稳序列的类型,现在,我将介绍一个时间序列模型的整体框架。
此外,还将讨论时间序列模型的实际应用。
4、ARIMA时间序列模型的框架与应用到此,本文快速介绍了时间序列模型的基础概念、使用R探索时间序列和ARM A模型。
现在我们将这些零散的东西组织起来,做一件很有趣的事情。
框架下图的框架展示了如何一步一步地“做一个时间序列分析”前三步我们在前文已经讨论了。
尽管如此,这里还是需要简单说明一下:3 季节性:季节性直接被纳入ARIMA模型中,下面的应用部分我们再讨论这个。
第三步:找到最优参数参数p,q可以使用ACF和PACF图发现。
除了这种方法,如果相关系数ACF 和偏相关系数PACF逐渐减小,这表明我们需要进行时间序列平稳并引入d参数。
第四步:建立ARIMA模型找到了这些参数,我们现在就可以尝试建立ARIMA模型了。
从上一步找到的值可能只是一个近似估计的值,我们需要探索更多(p,d,q)的组合。
最小的BIC和AIC的模型参数才是我们需要的。
我们也可以尝试一些季节性成分。
在这里,在ACF/PACF图中我们会注意到一些季节性的东西。
第五步:预测到这步,我们就有了ARIMA模型,我们现在就可以做预测了。
我们也可以将这种趋势可视化,进行交叉验证。
时间序列模型的应用这里我们用前面的例子,使用这个时间序列做预测。
我们建议你在进行下一步之前,先观察这个数据。
我们从哪里开始呢?下图是这些年的乘客数的图。
在往下看之前,观察这个图。
这里是我的观察:1. 乘客有着逐年增加的趋势。
2. 这看起来有季节性,每一个周期不超过12个月。
3. 数据的方差逐年增加。
在我们进行平稳性测试之前我们需要解决两个问题。
第一,我们需要消除方差不齐。
这里我们对这个序列取对数。
第二我们需要解决序列的趋势性。
我们通过对时序序列做差分。
现在,我们来检验最终序列的平稳性。
adf.test(diff(log(AirPassengers)), alternative="stationary", k=0) #这里可能会显示没有这个函数,需要安装一下.install.packages("tseries")acf(log(AirPassengers))显然ACF截止于第一个滞后,因此我们知道p的值应该是0.而q的值应该是1或者2.几次迭代以后,我们发现(p,d,q)取(0,1,1)时,AIC和BIC最小。
> fit <-arima(log(AirPassengers), c(0, 1, 1),seasonal =list(order=。