R

為指數數據 (COVID19) 預測包 R 選擇正確的預測模型

  • March 13, 2020

我正在嘗試預測歐洲每天匯總的 COVID 病例。這些是意大利目前的數字。

temp <- c(0    , 0    , 0  ,   0  ,   0   ,  0   ,  0  ,   0 ,    0,     2,
2    , 2   ,  2 ,    2   ,  2 ,    2   ,  3  ,   3 ,    3,     3,
3  ,   3  ,   3   ,  3  ,   3   ,  3,     3 ,    3   ,  3  ,   3,
20   , 62  , 155 ,  229 , 322  , 453   ,655  , 888,  1128 , 1694,2036 , 
2502 ,3089 , 3858,  4636 , 5883 , 7375,  9172, 10149, 12462,12462)

我的問題是所有模型都低估了指數增長模式,因為這個具有指數平滑。(如果我嘗試使用 4636 值之前的數據進行預測,當實際數字為 12,462 時,不同的模型估計為 8-9,0000)。我嘗試過轉換,不同的模型等。

library(data.table)
library(tidyverse)
library(forecast)
library(lubridate)

COVfirst <- min(which(temp > 0))+22 #starts 22 day in january


temp2 <- ts(temp, start = c(2020, 22), 
           frequency = 365.25)

temp2 %>% autoplot

test <- ets(temp2,
           allow.multiplicative.trend =TRUE)


test %>% forecast(., h = 14) %>% autoplot()


ts_Italy_confirmed <- temp2
forecast_italy_Confirmed <- test %>% forecast(., h = 14)

我對此有點困惑,因為直到今天的發展實際上非常簡單(指數)。我不喜歡擬合指數回歸模型,因為當流行病的指數部分停止時,它不會趕上。(我認為)

您可以通過使用參數 強制ets()使用具有乘法趨勢(和乘法誤差)的模型model="MMN"。當然,您需要稍後再開始這個系列,因為乘法趨勢和誤差對於零值沒有意義。

temp3 <- ts(temp[-(1:9)], start = c(2020, 32), 
           frequency = 365.25)
test <- ets(temp3,model="MMN")
test %>% forecast(., h = 14) %>% autoplot()

預報

我當然希望這個圖形是你想要的。

它還說明了為什麼ets()非常小心地自行擬合乘法趨勢。它們可以而且將會爆炸。還:

我不喜歡擬合指數回歸模型,因為當流行病的指數部分停止時,它不會趕上。

當然,ets()不會知道何時停止推斷指數增長,所以這個(非常正確的)基本原理同樣適用於ets(). 您可能需要考慮明確針對流行病學或(市場)滲透量身定制的模型,例如 Bass 擴散模型或類似模型。

編輯:Rob Hyndman 更深入地解釋了為什麼平滑和類似模型對預測 COVID-19 沒有多大意義,並指出更合適的模型。是伊万·斯維通科夫

引用自:https://stats.stackexchange.com/questions/453978

comments powered by Disqus