R
為指數數據 (COVID19) 預測包 R 選擇正確的預測模型
我正在嘗試預測歐洲每天匯總的 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 沒有多大意義,並指出更合適的模型。這是伊万·斯維通科夫。