2016-03-02 742 views
1

在某些情況下,我必須手工做預測,這意味着使用模型的公式。對於AR(p)模型,這很容易。但對於ARIMA模型(p,d,q),d> = 1,我有點困難。 下面的例子,我用模型AR(2)計算。我有系列2090至10年,我需要預測的2011:ARIMA模型的計算公式?

> a<-c(198,150,120,84,150,136,80,128,160,132,144,234,300,312,400,468,420,500,650,612,516) 
> series<-ts(a,frequency=1,start=c(1990)) 
> fit<-Arima(series,c(2,0,0),method="ML") 
> fit 
Series: series 
ARIMA(2,0,0) with non-zero mean 

Coefficients: 
     ar1  ar2 intercept 
     1.1923 -0.2881 305.3748 
s.e. 0.2174 0.2346 111.5251 

sigma^2 estimated as 3727: log likelihood=-117.2 
AIC=242.4 AICc=244.9 BIC=246.58 

我接收模型AR(2)的計算式:

y[t]=305.3748+1.1923*y[t-1]-0.2881*y[t-2] 

我藉此爲2011預測:

y[2011] = 305.3748+1.1923*y[2010]-0.2881*y[2009] 
     = 305.3748+1.1923*516-0.2881*612 
     = 744 

然而,當我適合ARIMA模型(2,1,0):

> fit2<-Arima(series,c(2,1,0),method="ML") 
> fit2 
Series: series 
ARIMA(2,1,0)      

Coefficients: 
     ar1  ar2 
     0.2561 -0.3494 
s.e. 0.2196 0.2117 

sigma^2 estimated as 3489: log likelihood=-110.1 
AIC=226.2 AICc=227.7 BIC=229.19 

當d = 1時,我不知道如何寫公式? 還有一個問題,爲什麼當我用功能forecast()進行預測時,結果與我用公式計算時不同 -

> forecast(fit,h=1) 
    Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 
2011  468.1754 389.9369 546.4138 348.52 587.8308 

回答

1

ARIMA(2,1,0)簡單地意味着你

  1. 區分系列,即,通過替換diff(series)series
  2. 然後申請ARIMA式(2,0,0 ),但是要diff(series),
  3. 最後「重新整合」了結果cumsum

功能fcst_ar2包含ARIMA公式(2,0,0),fcst_diff_ar2對於ARIMA(2,1,0):

library(forecast) 

#-------------------------------------------------------- 

fcst_ar2 <- function(coef, series, horizon) 
{ 
    y <- as.vector(series) - coef[3] 

    for (i in 1:horizon) { 
    y <- c(y, coef[2:1] %*% tail(y,2)) 
    } 

    return(y + coef[3]) 
} 

#-------------------------------------------------------- 

fcst_diff_ar2 <- function(coef, series, horizon) 
{ 
    y <- as.vector(series) 

    return(cumsum(c(y[1], fcst_ar2(c(coef,0), diff(y), horizon)))) 
} 

#======================================================== 
# Example: 

a<-c(198,150,120,84,150,136,80,128,160,132,144,234,300,312,400,468,420,500,650,612,516) 
series<-ts(a,frequency=1,start=c(1990)) 
fit<-Arima(series,c(2,0,0),method="ML") 
fit2<-Arima(series,c(2,1,0),method="ML") 

#-------------------------------------------------------- 
fcst_ar2(coef(fit), series, 3) 
# [1] 198.0000 150.0000 120.0000 84.0000 150.0000 136.0000 80.0000 128.0000 
# [9] 160.0000 132.0000 144.0000 234.0000 300.0000 312.0000 400.0000 468.0000 
# [17] 420.0000 500.0000 650.0000 612.0000 516.0000 468.1754 438.8091 417.5725 

forecast(fit, 3) 
#  Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 
# 2011  468.1754 389.9369 546.4138 348.5200 587.8308 
# 2012  438.8091 317.0562 560.5621 252.6041 625.0142 
# 2013  417.5725 266.9412 568.2038 187.2018 647.9432 

#-------------------------------------------------------- 
fcst_diff_ar2(coef(fit2), series, 3) 
# [1] 198.0000 150.0000 120.0000 84.0000 150.0000 136.0000 80.0000 128.0000 
# [9] 160.0000 132.0000 144.0000 234.0000 300.0000 312.0000 400.0000 468.0000 
# [17] 420.0000 500.0000 650.0000 612.0000 516.0000 504.6897 535.3388 547.1413 

forecast(fit2, 3) 
#  Point Forecast Lo 80 Hi 80 Lo 95 Hi 95 
# 2011  504.6897 428.9867 580.3927 388.9119 620.4675 
# 2012  535.3388 413.7918 656.8858 349.4487 721.2289 
# 2013  547.1413 405.0444 689.2383 329.8228 764.4599 
+0

非常感謝@ mra68 :) –