精华内容
下载资源
问答
  • R语言 时间序列arima模型

    万次阅读 多人点赞 2018-06-20 20:55:27
    基本理论知识   ARMA模型称为自回归移动平均模型,是时间序列里常用的模型之一。ARMA模型是对不含季节变动的平稳序列进行建模。它将序列值表示为过去值和过去扰动项的加权和。模型形式如下:yt=c+a1yt−1+a2yt−2...

    基本理论知识

       ARMA模型称为自回归移动平均模型,是时间序列里常用的模型之一。ARMA模型是对不含季节变动的平稳序列进行建模。它将序列值表示为过去值和过去扰动项的加权和。模型形式如下:

    yt=c+a1yt1+a2yt2+...+apytp+ϵtb1ϵt1b2ϵt2...bqϵtqyt=c+a1yt−1+a2yt−2+...+apyt−p+ϵt−b1ϵt−1−b2ϵt−2−...−bqϵt−q
    其中 ytyt  为序列值, ϵtϵt  为扰动项。模型可以简记为:
    ϕ(l)yt=c+Θ(l)ϵtϕ(l)yt=c+Θ(l)ϵt
    其中
    ϕ(l)=1a1la2l2...aplpϕ(l)=1−a1l−a2l2−...−aplp
    称为自回归系数多项式。
    Θ(l)=1b1lb2l2...bqlqΘ(l)=1−b1l−b2l2−...−bqlq
    称为移动平均系数多项式。 
        ARIMA模型 的本质和ARMA是一样的,将ARMA模型里的序列值 ytyt  换成一阶差分的值即可。
    Δyt=c+a1Δyt1+a2Δyt2+...+apΔytp+ϵtb1ϵt1b2ϵt2...bqϵtqΔyt=c+a1Δyt−1+a2Δyt−2+...+apΔyt−p+ϵt−b1ϵt−1−b2ϵt−2−...−bqϵt−q

        自相关系数acf 刻画的是 ytyt  与滞后k阶 ytkyt−k  之间的相关系数, 
        偏自相关系数pacf 刻画的是去除 yt1yt−1 yt2yt−2  等值对 ytkyt−k  的影响后,计算的纯 ytyt  与滞后k阶 ytkyt−k  之间的相关系数。 
        平稳性 :均值为常数,且两个变量间的协方差只取决于它们之间的时间间隔而不取决于时间点。即
    E(yt)=μE(yt)=μ
    Cov(yt,ys)=E((ytμt)(ysμs))=γ|st|Cov(yt,ys)=E((yt−μt)(ys−μs))=γ|s−t|

        白噪声 :所有随机变量的均值为0,方差不变为常数,且彼此之间不想管的序列即为白噪声序列。一般假设模型的残差为白噪声。即
    E(ϵt)=0E(ϵt)=0
    Var(ϵt)=σ2Var(ϵt)=σ2
    stCov(ϵt,ϵt)=0对于所有s≠t,Cov(ϵt,ϵt)=0

    建模

       建模流程图 
    这里写图片描述

    1、画出时序图和自相关图

      画出序列的时序图,观察序列是否平稳。利用acf()函数画出序列的自相关图,通过自相关图判断序列是否平稳。若自相关图里的自相关系数很快的衰减为0,则序列平稳,否则为非平稳。对于非平稳序列需要将其转化为平稳序列,才可用ARMA进行建模。以R自带的时间序列Nile(尼罗河的流量)为例。

    > plot(Nile,type="l")
    > plot(Nile,type="l",xlab="时间",ylab="尼罗河流量")
    > acf(Nile,main="自相关图")  #画出自相关图
    > opar<-par(mfrow=c(2,1))
    > plot(Nile,type="l",xlab="时间",ylab="尼罗河流量")
    > acf(Nile,main="自相关图")
    > par(opar)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结果如下: 
    这里写图片描述 
    这里写图片描述 
       从时序图可以看到序列再1990年有一个下降的趋势,并且自相关图里自相关系数没有快速的减为0(一般认为自相关系数低于2倍标准差即图中蓝色虚线一下时即为0),而是呈现出拖尾的特征,故判断序列为非平稳序列。

    2、对序列进行平稳化处理

      若序列为非平稳,则需将序列通过差分转化为平稳序列。差分可以消除序列的线性趋势。ndiffs()函数可以帮助我们判断需要进行几次差分。将序列取对数可以保证ARMA模型同方差的假设。代码如下:

    > opar<-par(mfrow=c(2,1))
    > plot(data,type="l",xlab="时间",ylab="尼罗河流量对数值",main="差分前")
    > acf(data,main="自相关图",xlab="滞后阶数")
    > par(opar)
    > library(forecast)
    > ndiffs(data)
    [1] 1           #结果表明序列需要进行1阶差分
    > ndata<-diff(data,1)
    > ndiffs(ndata)
    [1] 0           #结果表明无需进行 
    > opar<-par(mfrow=c(2,1))
    > plot(ndata,type="l",main="差分后")
    > acf(ndata,main="自相关图",xlab="滞后阶数")
    > par(opar)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    这里写图片描述 
    这里写图片描述 
       从上图可以看到,1阶差分以后序列变为平稳序列,且自相关图显示自相关系数在滞后1阶后就快速的减为0。进一步表明序列平稳。

    3、ARMA模型的定阶及参数估计

    acf值pacf值模型
    拖尾(逐渐减为0)P阶截尾(p阶快速减为0)ARIMA(p,d,0)
    q阶截尾拖尾ARIMA(0,d,q)
    拖尾拖尾ARIMA(p,d,q)

       如上表所示,我们可以通过acf和pacf图来判断模型的阶数。还可以通过模型的AIC和BIC值来选取模型,AIC和BIC的介绍见前面的基本理论知识。R里面的auto.arima()函数就是通过选取AIC和BIC最小来选取模型的。 
       R可以通过arima()函数估计模型参数,调用格式为: 
    arima(data,order=c(p,d,q),method=,…)

    参数含义
    data时间序列
    order模型的阶数
    method模型参数估计的方法,“ML”极大似然估计,”CSS”条件最小二乘估计,“CSS-ML”
    > opar<-par(mfrow=c(2,1))
    > acf(ndata)
    > pacf(ndata)
    > par(opar)
    > model1<-arima(data,order=c(0,1,1),method="ML")
    > model1
    
    Call:
    arima(x = data, order = c(0, 1, 1), method = "ML")
    
    Coefficients:
              ma1
          -0.7677
    s.e.   0.1046
    
    sigma^2 estimated as 0.02623:  log likelihood = 39.3,  aic = -74.6
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    这里写图片描述

       通过上面的acf和pacf图,我们可以选取建立ARIMA(0,1,1)模型。最后估计出来的模型为

    yt=yt1+ϵt0.7677ϵt1yt=yt−1+ϵt−0.7677ϵt−1

    4、模型检验

       模型参数检验包括两个检验:参数的显著性检验和残差的正态性和无关性检验。 
       参数的显著性检验:用估计出的系数除以其的标准差(se)得到的商与T统计量5%的临界值(1.96)比较,商的绝对值大于1.96,则拒绝原假设,认为系数显著的不为0,否则认为系数不显著。系数不显著的可以去掉,语法为arima(data,order,fixed=c(NA,0,NA…)),fixed为0的位置即为被去掉的参数的位置。 
       残差的正态性检验:画出残差的QQ图即可判断,QQ图中残差基本完全落在45°线上即为符合正态性假设。否则模型可能出现错误。语法为: 
      qqnorm(model$residuals) 
      qqline(model$residuals) 
       残差的无关性检验:也称为残差的白噪声检验,由前面白噪声的定义可知,残差(=估计值-真实值)应为不相关的序列。常用LB统计量来检验残差。

    Q=n(n+2)(ρ/(nk))Q=n(n+2)∑(ρ/(n−k))
    服从自由度为K-p-q的卡方分布,其中n为样本容量。语法为: 
       Box.test(model$residuals,type=”Ljung-Box”)

    > qqnorm(model1$residuals)
    > qqline(model1$residuals)
    > Box.test(model1$residuals,type="Ljung-Box")
    
        Box-Ljung test
    
    data:  model1$residuals
    X-squared = 1.5897, df = 1, p-value = 0.2074
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这里写图片描述

      从 画出的QQ图和LB检验的结果来看,残差符合正态性假设且不相关,则认为模型拟合数据比较充分,可以用来进行下一步预测。

    5、预测

    > p<-predict(model1,4)
    > p
    $pred
    Time Series:
    Start = 1971 
    End = 1974 
    Frequency = 1 
    [1] 6.686726 6.686726 6.686726 6.686726
    
    $se
    Time Series:
    Start = 1971 
    End = 1974 
    Frequency = 1 
    [1] 0.1619621 0.1662765 0.1704817 0.1745857
    
    > plot(Nile,xlab="时间",ylab="流量")
    > lines(exp(p$pred),col="red")
    > exp(p$pred)
    Time Series:
    Start = 1971 
    End = 1974 
    Frequency = 1 
    [1] 801.6934 801.6934 801.6934 801.6934
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    这里写图片描述

      从预测结果可以看到 ,预测的后四年的值均为801.69。时间序列在做预测时经常会出现这个问题。如果数据能够多一点,做出来的模型可能预测效果会好一点。时间序列模型只适合短时期的预测,不适合长时期的。而且我个人认为时间序列的模型在加入外生变量方面不是很方便,没有回归做起来方便(这一点是在参加天池的比赛时体会到的),这也是时间序列模型应用的一个缺点。

    展开全文
  • R语言 时间序列ARIMA模型方法

    万次阅读 多人点赞 2017-02-17 14:17:03
     ARIMA:全称为自回归积分滑动平均模型(Autoregressive Integrated Moving Average Model,简记ARIMA),是由博克思(Box)和詹金斯(Jenkins)于70年代初提出一著名时间序列预测方法 ,所以又称为box-jenkins模型、...

    原理什么的百度一搜一堆,看不明白,先学会用这个工具吧!
      ARIMA:全称为自回归积分滑动平均模型(Autoregressive Integrated Moving Average Model,简记ARIMA),是由博克思(Box)和詹金斯(Jenkins)于70年代初提出一著名时间序列预测方法 ,所以又称为box-jenkins模型、博克思-詹金斯法。其中ARIMA(p,d,q)称为差分自回归移动平均模型,AR是自回归, p为自回归项; MA为移动平均,q为移动平均项数,d为时间序列成为平稳时所做的差分次数。所谓ARIMA模型,是指将非平稳时间序列转化为平稳时间序列,然后将因变量仅对它的滞后值以及随机误差项的现值和滞后值进行回归所建立的模型。ARIMA模型根据原序列是否平稳以及回归中所含部分的不同,包括移动平均过程(MA)、自回归过程(AR)、自回归移动平均过程(ARMA)以及ARIMA过程。(这是我从百度百科挖过来的-_-)
    步骤总结如下:

    #加载时间序列程序包
    library(tseries)
    library(forecast)
    #使用该包自带的程序,是指航空乘客的分布
    air <- AirPassengers
    #作这个时间序列的图,通过图作一个直观判断
    plot(air)
    

    air

    #也可以直接使用tsdisplay来观察,它包含了时序图,以及acf、pacf两个相关图
    tsdisplay(air)
    

    air2

    #可以拆掉最后一年来做样本的训练集,再将最后一年做样本的测试集
    sair<-ts(as.vector(air[1:132]),frequency=12,start=c(1949,1))
    #同样可以看一下拆掉之后的训练集图形
    tsdisplay(sair)
    

    sair

    #sair的明显存在一个向上的趋势,用差分方法干掉,先看滞后1次的图形
    s1<-diff(sair,1)
    #从图上看,基本围绕了0在振动,基本平稳,进一步使用adf检验,看一下是否存在单位根(验证平稳性,若存在则不平稳)
    adf.test(s1)
    #单位根检验通过(p<0.05,显著拒绝存在单位根),再看一下差分之后的图形。
    tsdisplay(s1)
    

    s1

    #图形显示acf图存在拖尾,q=0,pacf图超出虚线较多,但从整体上看,从16阶之后截断,而上面的线可以大概看到(1,8,10,12,16)这五个数超出虚线甚多,所以,可以每个都测试一下。形成(1,1,0)(8,1,0),10,1,0),(12,1,0),(16,1,0),然后判断一下各自的AIC值,取最小值即可。
    #且acf图存在一个12阶的季节性影响因素,然后通过作滞后12阶的图看一下是否消除
    tsdisplay(diff(s1,12))
    

    s12

    #图形可以看出,已经消除了季节性的影响,所以ARIMA季节参数中周期应该为12,由于季节性图的acf图和pacf上看到最后一个超出虚线的阶数均为1,季度参数可以这么设置(1,1,1)[12]
    #拟合模型,看一下哪个模型最好,注意,拟合模型使用的data是原始数据,并不是差分之后的数据!
    arima(sair,order=c(1,1,0),seasonal=list(order=c(1,1,1),period=12))#AIC=899.95
    arima(sair,order=c(8,1,0),seasonal=list(order=c(1,1,1),period=12))#AIC=907.17
    arima(sair,order=c(10,1,0),seasonal=list(order=c(1,1,1),period=12))#AIC=909
    arima(sair,order=c(12,1,0),seasonal=list(order=c(1,1,1),period=12))#AIC=905.38
    arima(sair,order=c(16,1,0),seasonal=list(order=c(1,1,1),period=12))#NaNs
    #从上面的拟合可以看出,选择(1,1,0)(1,1,1)[12]的模型AIC值最小,也可以使用auto.arima函数来自动确定这些参数:
    auto.arima(sair)
    #Series: sair 
    #ARIMA(0,1,1)(0,1,0)[12]
    #Coefficients:
    #       ma1
    #      -0.2263
    #s.e.   0.0900
    #sigma^2 estimated as 110.5:  log likelihood=-448.34 AIC=900.69   AICc=900.79   BIC=906.24
    #auto.arima给出的建议是(0,1,1)(0,1,0)[12],其AIC是900.69,相差不大,可以使用两个方案都看一下预测的结果。
    #先进行拟合
    fit1<-arima(sair,order=c(1,1,0),seasonal=list(order=c(1,1,1),period=12))
    fit2<-arima(sair,order=c(0,1,1),seasonal=list(order=c(0,1,0),period=12))
    #然后使用tsdiag看一下各自的结果,图中表明残差标准差基本都在[-1,1]之间,残差的自回归都为0(两虚线内),Ljung-Box检验的p值都在0.05之上,结果不错。
    tsdiag(fit1)
    

    fit1

    tsdiag(fit2)
    

    fit2

    #预测
    f.p1<-forecast(fit1,h=12,level=c(99.5))
    f.p2<-forecast(fit2,h=12,level=c(99.5))
    #先看一下fit1【即(1,1,0)(1,1,1)[12]】的效果
    plot(f.p1,ylim=c(100,700))
    lines(f.p1$fitted,col="green")
    lines(air,col="red")
    

    fit1

    #再看一下fit2【即(0,1,1)(0,1,0)[12]】的效果
    plot(f.p2,ylim=c(100,700))
    lines(f.p2$fitted,col="green")
    lines(air,col="red")
    

    fit2

    #从上面两个图(红色为air数据,绿色为利用sair计算出来的原始数据拟合值,蓝色段为预测值),可以看出,几乎没有区别,而且预测效果也非常好。
    

    时间序列预测,ARIMA的模型小结到此为止,到现在为止,关于AR和MA的系数还有季节参数里面的系数选择都没有一点头绪,只能用这种穷举法来一个个找了,费时费力,不过auto.arima貌似很强大,就是给出的系数和网上看来的经验得出的系数有出入,明明是acf拖尾,q应该为0,即AR模型,偏偏就使用了MA,不懂,也没时间仔细研究它的理论,就这样吧。

    展开全文
  • 精心编写的R语言时间序列模型(主要为Arima模型),程序里我给出了很详细的备注,相信即使是编程小白或者统计小白也可以看懂。内容包含数据集
  • R语言时间序列分析之ARIMA模型预测

    万次阅读 2015-11-10 22:48:52
    R语言时间序列分析之ARIMA模型预测   今天学习ARIMA预测时间序列。  指数平滑法对于预测来说是非常有帮助的,而且它对时间序列上面连续的值之间相关性没有要求。但是,如果你想使用指数平滑法计算出...

    R语言时间序列分析之ARIMA模型预测

     
    今天学习ARIMA预测时间序列。

     指数平滑法对于预测来说是非常有帮助的,而且它对时间序列上面连续的值之间相关性没有要求。但是,如果你想使用指数平滑法计算出预测区间, 那么预测误差必须是不相关的, 而且必须是服从零均值、 方差不变的正态分布。即使指数平滑法对时间序列连续数值之间相关性没有要求,在某种情况下, 我们可以通过考虑数据之间的相关性来创建更好的预测模型。自回归移动平均模型( ARIMA) 包含一个确定(explicit) 的统计模型用于处理时间序列的不规则部分,它也允许不规则部分可以自相关。

    首先,先确定数据的差分。

    ARIMA 模型为平稳时间序列定义的。 因此, 如果你从一个非平稳的时间序列开始, 首先你就需要做时间序列差分直到你得到一个平稳时间序列。如果你必须对时间序列做 d 阶差分才能得到一个平稳序列,那么你就使用ARIMA(p,d,q)模型,其中 d 是差分的阶数。 

    我们以每年女人裙子边缘的直径做成的时间序列数据为例。从 1866 年到 1911 年在平均值上是不平稳的。 随着时间增加, 数值变化很大。  

    > skirts <- scan("http://robjhyndman.com/tsdldata/roberts/skirts.dat",skip=5)

    Read 46 items

    > skirtsts<- ts(skirts,start = c(1866))

     

    > plot.ts(skirtsts)

    R学习日记——时间序列分析之ARIMA模型预测

    我们可以通过键入下面的代码来得到时间序列(数据存于“skirtsts”) 的一阶差分, 并画出差分序列的图:

    > skirtstsdiff<-diff(skirtsts,differences=1)

     

    > plot.ts(skirtstsdiff)

    R学习日记——时间序列分析之ARIMA模型预测
    从一阶差分的图中可以看出,数据仍是不平稳的。我们继续差分。

    > skirtstsdiff2<-diff(skirtsts,differences=2)

    > plot.ts(skirtstsdiff2)

    R学习日记——时间序列分析之ARIMA模型预测

    二次差分(上面)后的时间序列在均值和方差上确实看起来像是平稳的, 随着时间推移, 时间序列的水平和方差大致保持不变。因此, 看起来我们需要对裙子直径进行两次差分以得到平稳序列。

    第二步,找到合适的ARIMA模型

     如果你的时间序列是平稳的,或者你通过做 n 次差分转化为一个平稳时间序列, 接下来就是要选择合适的 ARIMA模型,这意味着需要寻找 ARIMA(p,d,q)中合适的 p 值和 q 值。为了得到这些,通常需要检查[平稳时间序列的(自)相关图和偏相关图。 

     我们使用 R 中的“acf()”和“pacf” 函数来分别( 自) 相关图和偏相关图。“acf()”和“pacf 设定“plot=FALSE” 来得到自相关和偏相关的真实值。 

    > acf(skirtstsdiff2,lag.max=20)

     

    > acf(skirtstsdiff2,lag.max=20,plot=FALSE)

    R学习日记——时间序列分析之ARIMA模型预测

    Autocorrelations of series ‘skirtstsdiff2’, by lag


         0      1      2      3      4      5      6      7      8      9     10 

     1.000 -0.303  0.096  0.009  0.102 -0.453  0.173 -0.025 -0.039  0.073 -0.094 

        11     12     13     14     15     16     17     18     19     20 

     0.133 -0.089 -0.027 -0.102  0.207 -0.260  0.114  0.101  0.011 -0.090 

    自相关图显示滞后1阶自相关值基本没有超过边界值,虽然5阶自相关值超出边界,那么很可能属于偶然出现的,而自相关值在其他上都没有超出显著边界, 而且我们可以期望 1 到 20 之间的会偶尔超出 95%的置信边界。  

    > pacf(skirtstsdiff2,lag.max=20)

    > pacf(skirtstsdiff2,lag.max=20,plot=FALSE)

    R学习日记——时间序列分析之ARIMA模型预测

    Partial autocorrelations of series ‘skirtstsdiff2’, by lag


         1      2      3      4      5      6      7      8      9     10     11 

    -0.303  0.005  0.043  0.128 -0.439 -0.110  0.073  0.028  0.128 -0.355  0.095 

        12     13     14     15     16     17     18     19     20 

     0.052 -0.094 -0.103 -0.034 -0.021 -0.002  0.074  0.020 -0.034 

    偏自相关值选5阶。

    故我们的ARMIA模型为armia(1,2,5)

    > skirtsarima<-arima(skirtsts,order=c(1,2,5))

    > skirtsarima

    SSeries: skirtsts 

    ARIMA(1,2,5)                    


    Coefficients:

              ar1     ma1     ma2     ma3     ma4      ma5

          -0.4345  0.2762  0.1033  0.1472  0.0267  -0.8384

    s.e.   0.1837  0.2171  0.2198  0.2716  0.1904   0.2888


    sigma^2 estimated as 206.1:  log likelihood=-183.8

    AIC=381.6   AICc=384.71   BIC=394.09

    预测后5年裙子的边缘直径

    >  skirtsarimaforecast<-forecast.Arima(skirtsarima,h=5,level=c(99.5))

    > skirtsarimaforecast

         Point Forecast  Lo 99.5  Hi 99.5

    1912       548.5762 507.1167 590.0357

    1913       545.1793 459.3292 631.0295

    1914       540.9354 396.3768 685.4940

    1915       531.8838 316.2785 747.4892

    1916       529.1296 233.2625 824.9968

    plot.forecast(skirtsarimaforecast$residuals)   #谢谢@忆水如烟的指正

    R学习日记——时间序列分析之ARIMA模型预测第三步,检验

    在指数平滑模型下, 观察 ARIMA 模型的预测误差是否是平均值为 0 且方差为常数的正态分布(服从零均值、方差不变的正态分布) 是个好主意,同时也要观察连续预测误差是否(自)相关。  

    > acf(skirtsarimaforecast$residuals,lag.max=20)

    R学习日记——时间序列分析之ARIMA模型预测> Box.test(skirtsarimaforecast$residuals, lag=20, type="Ljung-Box")


            Box-Ljung test


    data:  skirtsarimaforecast$residuals 

    X-squared = 8.5974, df = 20, p-value = 0.9871

    既然相 关图显示出在1 - 20 l a g s 1 - 20 )中样本自相关值都没有超出显著(置信界,Ljung-Box检验p值为0.99,所我们推断在1-20lags1-20)中明显据说明预测误差是非零自相关的。 

    为了调查预测误差是否是平均值为零且方差为常数的正态分布(服从零均值、方差不变的正态分布),我们可以做预测误差的时间曲线图和直方图(具有正态分布曲线)

    > plot.ts(skirtsarimaforecast$residuals)

    R学习日记——时间序列分析之ARIMA模型预测> plotForecastErrors(skirtsarimaforecast$residuals)
    R学习日记——时间序列分析之ARIMA模型预测

    上图预测中的时间曲线图显示出对着时间增加,方差大致为常数(大致不变)(尽管上半部分的时间序

    列方差看起来稍微高一些)。时间序列的直方图显示预测误大致是正态分布的且平均值接近于 0(服从零均值的正态分布的)。因此,把预测误差看作平均值为0方差为常数正态分布(服从零均值、方差不变的正态分布)是合理的。 

     

    既然依次连续的预测误差看起来不是相关,而且看起来是平均值为 0 方差为常数的正态分布(服从零均值、方差不变的正态分布),那么对于裙子直径的数据, ARIMA(1,2,5)看起来是可以提供非常合适预测的模型。 

    至此,时间序列的学习结束
    展开全文
  • R语言 时间序列分析之ARIMA模型预测

    千次阅读 2017-04-08 18:49:51
    原文地址:R语言学习日记——时间序列分析之ARIMA模型预测作者:Kevin ARIMA预测时间序列: 指数平滑法对于预测来说是非常有帮助的,而且它对时间序列上面连续的值之间相关性没有要求。但是,如果你想使用...
     
    
    ARIMA预测时间序列:

    指数平滑法对于预测来说是非常有帮助的,而且它对时间序列上面连续的值之间相关性没有要求。但是,如果你想使用指数平滑法计算出预测区间,那么预测误差必须是不相关的, 而且必须是服从零均值、 方差不变的正态分布。即使指数平滑法对时间序列连续数值之间相关性没有要求,在某种情况下,我们可以通过考虑数据之间的相关性来创建更好的预测模型。自回归移动平均模型( ARIMA) 包含一个确定(explicit)的统计模型用于处理时间序列的不规则部分,它也允许不规则部分可以自相关。

     

    首先,先确定数据的差分。

    ARIMA 模型为平稳时间序列定义的。 因此, 如果你从一个非平稳的时间序列开始,首先你就需要做时间序列差分直到你得到一个平稳时间序列。如果你必须对时间序列做 d 阶差分才能得到一个平稳序列,那么你就使用ARIMA(p,d,q)模型,其中 d 是差分的阶数。 

    我们以每年女人裙子边缘的直径做成的时间序列数据为例。从 1866 年到 1911 年在平均值上是不平稳的。 随着时间增加, 数值变化很大。  

    > skirts <- scan("http://robjhyndman.com/tsdldata/roberts/skirts.dat",skip=5)

    Read 46 items

    > skirtsts<- ts(skirts,start = c(1866))

     

    > plot.ts(skirtsts)

    R学习日记——时间序列分析之ARIMA模型预测

    我们可以通过键入下面的代码来得到时间序列(数据存于“skirtsts”) 的一阶差分, 并画出差分序列的图:

    > skirtstsdiff<-diff(skirtsts,differences=1)

     

    > plot.ts(skirtstsdiff)

    R学习日记——时间序列分析之ARIMA模型预测
    从一阶差分的图中可以看出,数据仍是不平稳的。我们继续差分。

    > skirtstsdiff2<-diff(skirtsts,differences=2)

    > plot.ts(skirtstsdiff2)

    R学习日记——时间序列分析之ARIMA模型预测

    二次差分(上面)后的时间序列在均值和方差上确实看起来像是平稳的, 随着时间推移,时间序列的水平和方差大致保持不变。因此,看起来我们需要对裙子直径进行两次差分以得到平稳序列。

    第二步,找到合适的ARIMA模型

     如果你的时间序列是平稳的,或者你通过做 n 次差分转化为一个平稳时间序列, 接下来就是要选择合适的 ARIMA模型,这意味着需要寻找 ARIMA(p,d,q)中合适的 p 值和 q 值。为了得到这些,通常需要检查[平稳时间序列的(自)相关图和偏相关图。 

     我们使用 R 中的“acf()”和“pacf” 函数来分别(自) 相关图和偏相关图。“acf()”和“pacf 设定“plot=FALSE” 来得到自相关和偏相关的真实值。 

    > acf(skirtstsdiff2,lag.max=20)

     

    > acf(skirtstsdiff2,lag.max=20,plot=FALSE)

    R学习日记——时间序列分析之ARIMA模型预测

    Autocorrelations of series ‘skirtstsdiff2’, by lag


         0      1      2      3      4      5      6      7      8      9     10 

     1.000 -0.303  0.096  0.009  0.102 -0.453  0.173 -0.025 -0.039  0.073 -0.094 

        11     12     13     14     15     16     17     18     19     20 

     0.133 -0.089 -0.027 -0.102  0.207 -0.260  0.114  0.101  0.011 -0.090 

    自相关图显示滞后1阶自相关值基本没有超过边界值,虽然5阶自相关值超出边界,那么很可能属于偶然出现的,而自相关值在其他上都没有超出显著边界,而且我们可以期望 1 到 20 之间的会偶尔超出 95%的置信边界。  

    > pacf(skirtstsdiff2,lag.max=20)

    > pacf(skirtstsdiff2,lag.max=20,plot=FALSE)

    R学习日记——时间序列分析之ARIMA模型预测

    Partial autocorrelations of series ‘skirtstsdiff2’, by lag


         1      2      3      4      5      6      7      8      9     10     11 

    -0.303  0.005  0.043  0.128 -0.439 -0.110  0.073  0.028  0.128 -0.355  0.095 

        12     13     14     15     16     17     18     19     20 

     0.052 -0.094 -0.103 -0.034 -0.021 -0.002  0.074  0.020 -0.034 

    偏自相关值选5阶。

    故我们的ARMIA模型为armia(1,2,5)

    > skirtsarima<-arima(skirtsts,order=c(1,2,5))

    > skirtsarima

    SSeries: skirtsts 

    ARIMA(1,2,5)                    


    Coefficients:

              ar1     ma1     ma2     ma3     ma4      ma5

          -0.4345  0.2762  0.1033  0.1472  0.0267  -0.8384

    s.e.   0.1837  0.2171  0.2198  0.2716  0.1904   0.2888


    sigma^2 estimated as 206.1:  log likelihood=-183.8

    AIC=381.6   AICc=384.71   BIC=394.09

    预测后5年裙子的边缘直径

    >  skirtsarimaforecast<-forecast.Arima(skirtsarima,h=5,level=c(99.5))

    > skirtsarimaforecast

         Point Forecast  Lo 99.5  Hi 99.5

    1912       548.5762 507.1167 590.0357

    1913       545.1793 459.3292 631.0295

    1914       540.9354 396.3768 685.4940

    1915       531.8838 316.2785 747.4892

    1916       529.1296 233.2625 824.9968

    plot.forecast(skirtsarimaforecast$residuals 

    R学习日记——时间序列分析之ARIMA模型预测第三步,检验

    在指数平滑模型下, 观察 ARIMA 模型的预测误差是否是平均值为 0 且方差为常数的正态分布(服从零均值、方差不变的正态分布) 是个好主意,同时也要观察连续预测误差是否(自)相关。  

    > acf(skirtsarimaforecast$residuals,lag.max=20)

    R学习日记——时间序列分析之ARIMA模型预测> Box.test(skirtsarimaforecast$residuals, lag=20, type="Ljung-Box")


            Box-Ljung test


    data:  skirtsarimaforecast$residuals 

    X-squared = 8.5974, df = 20, p-value = 0.9871

    既然相 关图显示出在1 - 20 l a g s 1 - 20 )中样本自相关值都没有超出显著(置信 界,Ljung-Box检验p值为0.99,所我们推断在1-20lags1-20)中明显据说明预测 误差是非零自相关的。 

    为了调查预测误差是否是平均值为零且方差为常数的正态分布(服从零均值、方差不变的正态分布),我们可以做预测误差的时间曲线图和直方图(具有正态分布曲线)

    > plot.ts(skirtsarimaforecast$residuals)

    R学习日记——时间序列分析之ARIMA模型预测> plotForecastErrors(skirtsarimaforecast$residuals)
    R学习日记——时间序列分析之ARIMA模型预测

    上图预测中的时间曲线图显示出对着时间增加,方差大致为常数(大致不变)(尽管上半部分的时间序

    列方差看起来稍微高一些)。时间序列的直方图显示预测误大致是正态分布的且平均值接近于 0(服从零均值的正态分布的)。因此,把预测误差看作平均值为0方差为常数正态分布(服从零均值、方差不变的正态分布)是合理的。 

     

    既然依次连续的预测误差看起来不是相关,而且看起来是平均值为 0 方差为常数的正态分布(服从零均值、方差不变的正态分布),那么对于裙子直径的数据, ARIMA(1,2,5)看起来是可以提供非常合适预测的模型。 

    展开全文
  • R语言时间序列ARIMA新手教程

    千次阅读 2020-08-01 08:24:19
    R语言时间序列ARIMA新手教程 首先说一下ARMA回归的底层逻辑,所谓的AR模型和MA模型都是ARMA模型的一种特殊情况,有点类似正方形和长方形都是矩形。ARMA模型的表达式为: p为自回归部分的滞后阶数,q为移动平均部分...
  • R语言 时间序列ARIMA模型

    万次阅读 多人点赞 2018-03-29 22:25:10
    ARIMA模型的本质和ARMA是一样的,只是ARIMA针对不平稳的序列进行建模的,将ARMA模型里的序列值进行差分就可以。定阶以及参数说明acf值pcf值模型拖尾(逐渐为0)p阶截尾ARIMA(p,d,0)q阶截尾拖尾ARIMA(0,d,q)拖尾拖尾...
  • 本文是我们通过时间序列ARIMA模型预测拖拉机销售的制造案例研究示例的延续。您可以在以下链接中找到以前的部分: 第1部分:时间序列建模和预测简介 第2部分:在预测之前将时间序列分解为解密模式和趋势 第3部分...
  • 最近初步接触了下如何用R语言进行时间序列分析,自己动手写了段小代码。 首先呢是生成随机观测值,接着画出时间序列图,然后进行单根检验和用 ACF 和 PACF 指令分别画出自相关数和偏自相关系数图。 随机观测值生成...
  • R语言时间序列之ARMA、ARIMA模型

    万次阅读 多人点赞 2017-08-05 21:16:40
    基本理论知识   ARMA模型称为自回归移动平均模型,是时间序列里常用的模型之一。ARMA模型是对平稳序列进行建模。它将序列值表示为过去值和过去扰动项的加权和。模型形式如下:yt=c+a1yt−1+a2yt−2+...+apyt−p+ϵ...
  • R 语言环境下用ARIMA模型时间序列预测,内有详细说明
  • 本文是我们通过时间序列ARIMA模型预测拖拉机销售的制造案例研究示例的延续。您可以在以下链接中找到以前的部分: 第1部分:时间序列建模和预测简介 第2部分:在预测之前将时间序列分解为解密模式和趋势 第3部分...
  • 原文链接:http://tecdat.cn/?p=17622​tecdat.cn最近,我们继续对时间序列建模进行探索,研究时间序列模型的自回归和条件异方差族。我们想了解自回归移动平均值(ARIMA)和广义自回归条件异方差(GARCH)模型。它们...
  • 在这篇文章中,我们将介绍流行的ARIMA预测模型,以预测库存的回报,并演示使用R编程的ARIMA建模的逐步过程。 时间序列中的预测模型是什么? 预测涉及使用其历史数据点预测变量的值,或者还...
  • R语言 ARIMA时间序列模型

    千次阅读 2019-05-27 09:55:15
    1.数据介绍 本实验使用R的fEcofin包中的CPI.dat数据集。CPI是一个经季节调整的美国消费价格指数,此数据是月度的。 数据载入方法: 首先安装该数据所在包:install.packages(...2.实验 ARMA时间序列数据分析...
  • ARIMAX模型是ARIMA模型的一个扩展版本。它还包括其他独立(预测)变量。该模型也被称为向量ARIMA或动态回归模型。 ARIMAX模型类似于多变量回归模型,但允许利用回归残差中可能存在的自相关来提高预测的准确性。 ...
  • 最近,我写了关于将均值回归时间序列分析模型拟合到财务数据并使用模型的预测作为交易策略基础的文章。继续我们对时间序列建模的探索,让我们研究时间序列模型的自回归和有条件异方差族。特别是,我们想了解自回归...
  • 你是否不清楚时间序列分析各种模型该在什么情况下使用?本文将针对以上两个问题,带你入门时间序列分析~等等!不止’入门‘读完这篇,你立即就能在R中写出不同模型的相应代码~先介绍以下我自己吧~我目前是Warner ...
  • 在上一篇中,探讨了R语言时间序列分析常用步骤,如何比对AIC值判断最优模型?代码和解释如下: #WWWusage是datasets包自带的每分钟通过服务器连接到因特网的用户数的长度为100的时间序列数据 require(graphics) #...
  • 本文我们使用4个时间序列模型对每周的温度序列建模。第一个是通过auto.arima获得的,然后两个是SARIMA模型,最后一个是Buys-Ballot方法。
  • 原文:http://tecdat.cn/?p=3609 您要分析时间序列数据的第一件事就是将其读入R,并绘制时间序列。您可以使用scan()函数将数据读入R,该函数假定连续时间点的数据位于包含一列的简单文本文件中。
  • 在本文中我们对在Google趋势上的关键字“ Chocolate ”序列进行预测。序列如下
  • 根据我们对温度的预测,我们可以预测电力消耗。绘制电力消耗序列图:
  • 时间序列分析是统计学中的一个主要分支,主要侧重于分析数据集以研究数据的特征并提取有意义的统计信息来预测序列的未来值。时序分析有两种方法,即频域和时域。前者主要基于傅立叶变换,而后者则密切研究序列的自...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 956
精华内容 382
关键字:

r语言时间序列arima模型