加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

R语言时间序列分析——与有漂移的ARIMA差分模型有关的若干问题

(2015-05-19 23:32:26)
标签:

r时间序列

当我们拟合ARIMA模型的时候,如果有差分,常数项是不包括在模型中的。在直接用ARIMA模型拟合有差分的模型时候,要小心。

例子:arima(x,order=c(1,1,0))  #(1) 的结果 与 arima(diff(x),order=c(1,0,0)) #(2)  的结果并不一样。

因为在(1)中,R会拟合 
 x(t)= φ*x(t-1) + w(t) (没有常数项)

但是在(2)中,R会拟合  
x(t) = α + φ*x(t-1) + w(t). 

如果α 不等于0,那么两个拟合得到的结果一样。但是如果α 等于0,(1)中的拟合和预测都会出现问题。
如果α 不等于0,正确的做法是:

arima(x, order = c(1, 1, 0), xreg=1:length(x))           # (1+)

为什么这样做是正确的呢?机理是这样的,xreg = t,R将会用  y(t) = x(t)-β*t  代替  x(t)  ,这样,将会拟合  
∇y(t)= φ*∇y(t-1) + w(t),
或者  
∇[x(t) - β*t] = φ*∇[x(t-1) - β*(t-1)] + w(t)
简化后,有
∇x(t) = α + φ*∇x(t-1) + w(t)  ,这里  α = β*(1-φ).

错误的预测:
fit1 = arima(gtemp, order=c(1,1,1)) 
fore1 = predict(fit1, 15) 
nobs = length(gtemp) 
ts.plot(gtemp,fore1$pred, col=1:2, main="WRONG") 

正确的预测:
fit2 = arima(gtemp, order=c(1,1,1), xreg=1:nobs) 
fore2 = predict(fit2, 15, newxreg=(nobs+1):(nobs+15))
par(mfrow=c(2,1)) 
ts.plot(gtemp,fore2$pred, col=1:2, main="RIGHT")



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有