2016-07-09 143 views
0

我有一個時間序列對象calc_visit_ts我想爲每個模型應用基於MAPE值的最佳擬合時間序列模型。我面臨的問題是MAPE值HOLT-WINTER乘法模型無法像其他模型一樣計算(因爲與summary(visit_model_Hw_M)相比,它給了我一個不同的MAPE值)。在MAPE的基礎上應用不同的時間序列模型(ARIMA,HOLT-WINTER)

#### AUTO-ARIMA 
visit_model_Arima <- auto.arima(calc_visit_ts) 
# summary(visit_model_Arima) 

#### HOLT-WINTER ADDITIVE 
visit_model_Hw_A <- hw(calc_visit_ts,h=monthly_prediction,seasonal = "additive") 
# summary(visit_model_Hw_A) 

#### HOLT-WINTER MULTIPLICATIVE 
visit_model_Hw_M <- hw(calc_visit_ts,h=monthly_prediction,seasonal = "multiplicative") 
# summary(visit_model_Hw_M) 


#### Calculating MAPE on models for best suit 
model_Mape<- c(MAPE_model(visit_model_Arima) 
       ,MAPE_model(visit_model_Hw_A)) 
       #,MAPE_model(visit_model_Hw_M)) this is not accurate 

model_Mape=na.omit(model_Mape) 
token<-which(min(model_Mape)==model_Mape) 

if(length(token)>0) 
{ 
    if(token==1) 
    {visit_model<-visit_model_Arima 
    }else if(token==2) 
    {visit_model<-visit_model_Hw_A 
    }else if(token==3) 
    {visit_model<-visit_model_Hw_M 
    }else 
    { 
    ##EXCEPTION HANDLING 
    } 
} 

summary(visit_model) 

這裏是功能我用的模型進行MAPE計算 -

MAPE_model <- function(visit_model) { 
#CHECK FOR ZERO CONDIITION if(visit_model$x!=0) 
mape = mean(abs(visit_model$residuals)/visit_model$x) 
return(mape) 
} 

數據的時間序列 -

calc_visit_ts 
    Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 
2012   35 53 65 60 64 49 63 55 59 66 
2013 62 54 77 67 84 62 82 65 59 67 60 67 
2014 73 75 55 76 93 96 89 76 88 65 83 82 
2015 76 72 75 94 91 83 72 73 80 83 81 81 
2016 97 91 90 80 101 98 

dput(calc_visit_ts) 
structure(c(35, 53, 65, 60, 64, 49, 63, 55, 59, 66, 62, 54, 77, 
67, 84, 62, 82, 65, 59, 67, 60, 67, 73, 75, 55, 76, 93, 96, 89, 
76, 88, 65, 83, 82, 76, 72, 75, 94, 91, 83, 72, 73, 80, 83, 81, 
81, 97, 91, 90, 80, 101, 98), .Tsp = c(2012.16666666667, 2016.41666666667, 
12), class = "ts") 

要顯示正是我意思是 -

霍爾特 - 溫特添加劑疊加

Holt-Winter Additive Plot

霍爾特,冬季乘情節 Holt-Winter Multiplicative Plot

問題summary(visit_model_Hw_M)MAPE = 9.075097 然而,MAPE_model(visit_model_Hw_M)0.001273087因爲乘法模型擬合曲線(數據點)因此使用visit_model_Hw_M$residuals不是計算MAPE的適當方法(因爲函數試圖擬合曲線)。

有沒有一種方法可以從摘要本身獲取HOLT-WINTER乘法的MAPE值?或者正確估計HOLT-WINTER乘法模型的MAPE值的方法?

+0

的區別請使用'dput'提供數據對象或使用內置數據重新構建問題,以便您擁有一個MCVE http://stackoverflow.com/help/mcve –

+0

添加數據。對不起,很急。 –

+0

謝謝!別擔心。順便說一句,如果你使用'dput',那麼它允許我們將它複製到我們的R會話中,即'dput(calc_visit_ts)'。有時候我們可以從剪貼板加載數據,但是當這樣的數據點缺失時不能加載數據。 –

回答

0

在數據和反覆試驗想來想去我發現梅普斯爲ARIMAHolt-Winter模型計算出不同 -

MAPE_model <- function(visit_model,model_type) { 
if(model_type == "ARIMA") 
    mape = mean(abs(visit_model$residuals)/visit_model$x) 
if(model_type == "HW") 
    mape = mean(abs(visit_model$x - visit_model$fitted)/visit_model$x) 
else 
    mape = -1 #Something 
return(mape) 
} 

雖然符號visit_model$x - visit_model$fitted是規範等價於visit_model$residualsARIMAHolt-Winter(additive)它在Holt-Winter(multiplicative)模型中不是這種情況。因此,model_type