相关视频:在Python和R语言中建立EWMA,ARIMA模型预测时间序列

 

 

在本文中我们对在Google趋势上的关键字“ Chocolate ”序列进行预测。序列如下

  1.   
  2.  > report = read.csv(url,skip=6,header=FALSE,nrows=636)
  3.   
  4.  > plot(X,type="l")

拓端tecdat|R语言用ARIMA模型预测巧克力的兴趣趋势时间序列_python

每月建立一个ARIMA模型比每周建立一个容易。因此,我们将每月数据序列化,将预测与观察结果进行比较。

  1.   
  2.  > Y = tapply(base$X,as.factor(base$AM),mean)
  3.  > Z = ts(as.numeric(Y[1:(146-24)]), start=c(2004,1),frequency=12)

拓端tecdat|R语言用ARIMA模型预测巧克力的兴趣趋势时间序列_r语言_02

在这里转换序列的对数序列。我们观察到趋势的变化(开始时是线性的,此后相对稳定)。

  1.   
  2.  > X=log(as.numeric(Z))
  3.   
  4.  > trend=lm(X~T+I((T-80)*(T>80)),data=db)

拓端tecdat|R语言用ARIMA模型预测巧克力的兴趣趋势时间序列_r语言_03

这是我们要建模的序列残差,

residuals(trend)

拓端tecdat|R语言用ARIMA模型预测巧克力的兴趣趋势时间序列_python_04

要对该序列进行建模,我们可以先查看其自相关序列

>  plot(acf(Y,lag=36),lwd=5)

拓端tecdat|R语言用ARIMA模型预测巧克力的兴趣趋势时间序列_时间序列_05

和偏自相关序列

> plot(pacf(Y,lag=36),lwd=5)

拓端tecdat|R语言用ARIMA模型预测巧克力的兴趣趋势时间序列_python_06

该序列是稳定的,但是有很强的周期性成分。我们可以尝试AR模型或ARMA(带有AR的残差不是白噪声)。

  1.  arima(Y,order=c(12,0,12),
  2.  + seasonal = list(order = c(0, 0, 0 , period = 12 )

这里的残差序列是白噪声

拓端tecdat|R语言用ARIMA模型预测巧克力的兴趣趋势时间序列_时间序列_07

然后,我们可以使用此模型对初始序列进行预测

  1.   
  2.   
  3.  > Y2=tapply(base$X,as.factor(base$AM),mean)
  4.   
  5.  > lines(futur,obs_reel,col="blue")

拓端tecdat|R语言用ARIMA模型预测巧克力的兴趣趋势时间序列_r语言_08

我们的模型为红色,真实的观察结果为蓝色。然后,我们可以根据这24个观测值计算误差平方和。

  1.  > sum( (obs_reel-Xp)^2 )
  2.  [1] 190.9722

但是我们可以尝试其他模型,例如通过更改趋势或通过更改ARIMA模型(通过季节性单位根)来尝试

  1.   
  2.  > E=residuals(model3)
  3.  > model3
  4.   
  5.  Coefficients:
  6.  ma1 ma2 sma1
  7.  0.2246 0.3034 -0.9999
  8.  s.e. 0.0902 0.0925 0.3503
  9.   
  10.  sigma^2 estimated as 0.002842: log likelihood = 152.37, aic = -296.75

我们检查残差序列确实是白噪声

  1.   
  2.  Box-Pierce test
  3.   
  4.  data: E
  5.  X-squared = 6.326, df = 12, p-value = 0.8988

拓端tecdat|R语言用ARIMA模型预测巧克力的兴趣趋势时间序列_时间序列_09

然后,我们可以对原始系列进行预测,

  1.   
  2.  > Yp=predict(model3,n.ahead=24) +
  3.  + predict(trend,newdata=data.frame(T=futur)
  4.   
  5.  > Y2=tapply( X,as.factor( AM),mean)

拓端tecdat|R语言用ARIMA模型预测巧克力的兴趣趋势时间序列_时间序列_10

误差平方和低一些

  1.  > sum( (obs_reel-Xp)^2 )
  2.  [1] 173.8138

也就是说,在过去的两年中,第二个模型比以前的模型要好,是对未来几年进行预测的好方法。


拓端tecdat|R语言用ARIMA模型预测巧克力的兴趣趋势时间序列_时间序列_11