【问题标题】:Forecast in R checking first prediction with AR (1) ModelR 中的预测使用 AR (1) 模型检查第一个预测
【发布时间】:2014-12-20 22:21:44
【问题描述】:

我有每月的通货膨胀数据。从 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


【问题讨论】:

  • 错了,错了。错了。
  • 提供可重现的例子。

标签: r time-series forecasting


【解决方案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

【讨论】:

  • 是的,我的错。谢谢...我会回来看书的。最好的问候
猜你喜欢
  • 2022-11-26
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 2019-01-21
  • 2021-11-08
  • 2023-04-09
  • 1970-01-01
  • 2020-08-26
相关资源
最近更新 更多