• R语言
  • 急求高手!R语言中的ARMA和ARIMA计算得到的结果为什么不同?该采用哪个?

<br />
xx= c(0.054109326, 0.030062775,-0.084484650,-0.030417398, 0.129971162, 0.027219980,<br />
      -0.127560850, 0.117744837, 0.089408216,-0.136622767,-0.059829294, 0.042510965,<br />
      0.078971832, 0.104406809, 0.048873626,-0.150192614,-0.070094196,-0.020664303,<br />
      -0.047555354,-0.017869914, 0.008704639,-0.020515520,0.023814828,0.018093041,<br />
      0.036519402,-0.016964719,0.017262081,0.052619006,-0.041050424,-0.034393467,<br />
      0.036546402)<br />
xx=ts(xx)<br />
#第一种方法<br />
library(tseries)<br />
xx.arma=arma(xx,lag=list(ma=c(1,2)),include.intercept=F)<br />
xx.arma<br />
#第二种方法<br />
xx.arima=arima(xx,order=c(0,0,2),include.mean =F)<br />
xx.arima<br />
#比较残差的散点图<br />
xx.arma$residuals<br />
xx.arima$resid<br />
plot(xx.arma$residuals,xx.arima$resid)<br />
abline(0,1,col=2,lwd=3)<br />
</p>

结果:

<br />
> xx= c(0.054109326, 0.030062775,-0.084484650,-0.030417398, 0.129971162, 0.027219980,<br />
+       -0.127560850, 0.117744837, 0.089408216,-0.136622767,-0.059829294, 0.042510965,<br />
+       0.078971832, 0.104406809, 0.048873626,-0.150192614,-0.070094196,-0.020664303,<br />
+       -0.047555354,-0.017869914, 0.008704639,-0.020515520,0.023814828,0.018093041,<br />
+       0.036519402,-0.016964719,0.017262081,0.052619006,-0.041050424,-0.034393467,<br />
+       0.036546402)<br />
> xx=ts(xx)<br />
> #第一种方法<br />
> library(tseries)<br />
> xx.arma=arma(xx,lag=list(ma=c(1,2)),include.intercept=F)<br />
警告信息:<br />
In arma(xx, lag = list(ma = c(1, 2)), include.intercept = F) :<br />
  order is ignored<br />
> xx.arma</p>
<p>Call:<br />
arma(x = xx, lag = list(ma = c(1, 2)), include.intercept = F)</p>
<p>Coefficient(s):<br />
    ma1      ma2<br />
-0.1191  -0.8591  </p>
<p>> #第二种方法<br />
> xx.arima=arima(xx,order=c(0,0,2),include.mean =F)<br />
> xx.arima</p>
<p>Call:<br />
arima(x = xx, order = c(0, 0, 2), include.mean = F)</p>
<p>Coefficients:<br />
         ma1      ma2<br />
      0.0008  -0.6971<br />
s.e.  0.3311   0.3331</p>
<p>sigma^2 estimated as 0.003063:  log likelihood = 45.07,  aic = -84.14<br />
> #比较残差的散点图<br />
> xx.arma$residuals<br />
Time Series:<br />
Start = 1<br />
End = 31<br />
Frequency = 1<br />
 [1]            NA            NA -0.0844846500 -0.0404758886  0.0525689701 -0.0012953442<br />
 [7] -0.0825515180  0.1068036310  0.0312014953 -0.0411498622 -0.0379223495  0.0026429835<br />
[13]  0.0467062894  0.1122381856  0.1023631198 -0.0415784323  0.0128987735 -0.0548498703<br />
[19] -0.0430038995 -0.0701129705 -0.0365887200 -0.0851077837 -0.0177522989 -0.0571391006<br />
[25]  0.0144650677 -0.0643324368  0.0220302190 -0.0000280347 -0.0221269512 -0.0370519213<br />
[31]  0.0131251947<br />
> xx.arima$resid<br />
Time Series:<br />
Start = 1<br />
End = 31<br />
Frequency = 1<br />
 [1]  0.044387707  0.024654175 -0.054904652 -0.015138159  0.091425763  0.016817448<br />
 [7] -0.064880088  0.127220070  0.044447395 -0.048931672 -0.028928431  0.008632592<br />
[13]  0.058769786  0.110176613  0.089618480 -0.073523119 -0.007606578 -0.071844835<br />
[19] -0.052788530 -0.067880804 -0.028031943 -0.067799911  0.004329126 -0.029170614<br />
[25]  0.039560009 -0.037330935  0.044869976  0.026558178 -0.009791723 -0.015870968<br />
[31]  0.029733058<br />
> plot(xx.arma$residuals,xx.arima$resid)<br />
> abline(0,1,col=2,lwd=3)<br />
</p>

[attachment=228276,1634]

结果当然不一样啊,模型都不一样。一个平稳,一个不平稳。

回复 第2楼 的 iscott:同样的数据,同样都是arma(0,2)模型,怎么是一个平稳一个不平稳呢?

上面的那个警告信息:

In arma(xx, lag = list(ma = c(1, 2)), include.intercept = F) :

order is ignored

是order参数被忽视掉而已,我没写order=NULL,默认的order=c(1,1)。不是不平稳。但我仍不明白这两个模型的估计结果为什么差别这么大。

11 天 后

可能是套用的模型不合适造成的,用arma(xx,c(2,1))和arima(xx,order=c(2,0,1))拟合的差距会小点。

2 个月 后

回复 第4楼 的 ustcstar:好的。谢谢!我试试。

4 个月 后

那用对于一个一阶平稳的序列r,用arima(r,order=c(p,1,q)和arima(diff(r),order=c(p,0,q))结果为什么不一样咧。还有上面include.mean=F和include.intercept=F有嘛区别,为嘛要不一样啊

回复 第6楼 的 penny388:arima在处理diff过的序列时模型的定义不同,具体见http://www.stat.pitt.edu/stoffer/tsa2/Rissues.htm