用AR(1)模型预测R检验第一预测

时间:2014-12-20 22:21:44

标签: r time-series forecasting

我有月度通胀数据。从1999/01到2014/10。

我做了一个AR(1)模型,有1999/01到2007/12的数据,它给了我:Yt = 0.0057 + 0.6212Yt-1;

data<-read.table("C:/TimeSeries/Inflation/inflation.txt", header=T, dec=",")
data.ts <- ts(data, start=c(1999,01), freq=12)

time = window(data.ts, start=c(1999,01),end=c(2007,12))

inflarima<-Arima(time,order=c(1,0,0))
inflarima

正如理论所说,我的第一个预测应该是:Et(Yt + 1)= 0.0057 + 0.6212Yt;第二个:0.0057 + 0.6212 * 0.0057 +(0.6212 ^ 2)* Yt等等......对吧

所以,我的第一期预测是2008年1月,其值为(0,0057 + 0,6212 * Y2007,12 =(0,0057 + 0,6212 * 0.003790990 = 0,008054962988 0,008054962988


使用递归方法运行预测代码

stat=c(2008,01) #First Prediction will be january 2008 
out_of_sample=window(data.ts,start=stat)  #out of sample data

recurs.pred1=ts(0,start=stat,end=c(2014,7),frequency=12) #Matrix to put the predictions through RECURSIVE METHOD

for (t in 1:(length(dado_de_fora))) {
  reg.recur1=Arima(window(time,end=c(2007,3+t)),c(1,0,0))
  recurs.pred1[t]=predict(reg.recur1,n.ahead=1)$pred #y chapeu de 1T2008, modelo Arma(1,1)
}

我的足球价值观:

recurs.pred1[]    

           Jan         Feb         Mar         Apr           May        .......
2008 0.004556208 0.003796366 0.003965125     0.003948726  0.003681815   .......

这里开始出现问题:

         Jan 
2008 0.004556208   

我如何得到这个价值??? !!正确的价值应该是 0,008054962988 ,我是对的吗?

这些数据来自:1999/01至2014/07


1 个答案:

答案 0 :(得分:1)

您提出了一些方法论和概念上的错误。

我认为,第一个错误是由于您对AR(1)缺乏了解:提前一步预测不是a+bY{t},而是a*(1-b)+b*Y{t}。你的理论是错误的。请查阅您的教科书或arima的文档以解决问题。因此,您对2008年1月的预测必须

> 0.0057*(1-0.6212) + 0.6212*0.003790990
[1] 0.004514123

其次,您有月度月度通胀率,因此reg.recur1=Arima(window(time,end=c(2007, 3+t)),c(1,0,0))中的论点必须为11+t。 (什么是Arima?)

最后,将通胀数据纳入AR(1)的水平是完全错误的。通常,适合于适应通胀的第一个差异,即通货膨胀的增加。

以下小例子可能有所帮助。我粗略地按照你的代码。

library(forecast)
set.seed(20141221)
x <- arima.sim(n=108, list(ar=0.5))
data.ts <- ts(x, start=c(1999,01), freq=12)
time = window(data.ts, start=c(1999,01),end=c(2007,12))
inflarima <- arima(time, order = c(1, 0, 0)) #
inflarima$coef
#     ar1  intercept 
#0.4945659 0.2069526 
#1-step ahead forecast
0.4945659*time[108] + 0.2069526*(1-0.4945659)
#[1] 0.1147776
forecast(inflarima, h=1) #use forecast rather than predict. returns the same.
#         Point Forecast      Lo 80    Hi 80     Lo 95    Hi 95
#Jan 2008      0.1147776 -0.9938675 1.223423 -1.580749 1.810304