2014-02-28 100 views
0

我想從時間序列創建一個預測模型。我有一個數據框,其中包括2列(日期和案例)。日期列從2008-01-01到2013-12-01。每個月都有一些數字(但是,72個觀測值中的30個以上的值爲NA)。因此,我想創建一個預測模型來預測2013-12-01之後的3-4個月內的病例嗎?誰能幫我?從時間序列進行預測?

這裏是dput(my data)

structure(list(Date2 = structure(c(13879, 13910, 13939, 13970, 
14000, 14031, 14061, 14092, 14123, 14153, 14184, 14214, 14245, 
14276, 14304, 14335, 14365, 14396, 14426, 14457, 14488, 14518, 
14549, 14579, 14610, 14641, 14669, 14700, 14730, 14761, 14791, 
14822, 14853, 14883, 14914, 14944, 14975, 15006, 15034, 15065, 
15095, 15126, 15156, 15187, 15218, 15248, 15279, 15309, 15340, 
15371, 15400, 15431, 15461, 15492, 15522, 15553, 15584, 15614, 
15645, 15675, 15706, 15737, 15765, 15796, 15826, 15857, 15887, 
15918, 15949, 15979, 16010, 16040), class = "Date"), Cases = c(16352L, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, 10L, NA, 23L, 138L, NA, 18L, 
NA, 3534L, 43L, NA, 3L, 118L, NA, 172L, 4194L, NA, 9L, 2L, 162L, 
NA, 112L, 115L, NA, NA, 119L, NA, NA, 172L, NA, 25L, NA, NA, 
11L, 4L, 457L, 56L, NA, 148L, 446L, 30L, NA, NA, NA, NA, NA, 
NA, NA, 583L, NA, 180L, 193L, NA, 77L, NA, 18L, 15L, NA, NA, 
1L, NA, NA, NA)), .Names = c("Date2", "Cases"), row.names = c(NA, 
-72L), class = "data.frame") 

預先感謝您爲您的貢獻輸出。

+0

這有點難以作出預測時,在歷史的一半的數據不可用。 –

+0

我想是的。但是,如果數據集沒有NA值,我將如何創建預測模型?因爲,我將把這個預測模型應用到具有相同列的另一個數據框(案例和日期,但有幾個NA)。 – Ram

+0

查看軟件包'forecast'和'astsa'。我會看看我能否創建一個通用答案。 –

回答

0

也許這可以讓你開始,但做出預測是困難的,需要很好地理解你的數據。這裏提供的信息不足以做出良好的IMO預測。這是一種廣義線性模型,自第一次觀察和一年中的月份起,隨着天數的變化,由於只是眼睛看起來像計數的數據可能與月份有關,並且隨着年份的增加而下降。

library(ggplot2) 
dat <- dats[complete.cases(dats),] 
dat$days <- dat$Date2 - dat$Date2[1] 
mod2 <- glm(Cases ~ days + format(Date2, "%m"), data = dat, family = poisson()) 
dat$predicted <- "observed" 

## See how the model performed against old data 
dat <- rbind(dat, data.frame(
    Date2 = dat$Date2, 
    Cases = predict(mod2, type = "response"), 
    predicted = "predicted", 
    days = dat$days)) 

## predict future cases 
futureDates <- seq(as.Date("2014/1/1"), by = "month", length.out = 12) 
future <- data.frame(
    Date2 = futureDates, 
    days = futureDates - dat$Date2[1]) 

datFuture <- rbind(dat, data.frame(Date2 = future$Date2, 
          days = future$days, 
          Cases = predict(mod2, type = "response", newdata = future), 
          predicted = "predicted")) 

ggplot(datFuture, aes(Date2, Cases, col = factor(predicted), group = predicted)) + 
    geom_point(pch = 3) + ylab("Predicted Cases") + xlab("Date") + 
    geom_line(lty = 2, lwd = 1.5, alpha = 0.2) + 
    geom_smooth(alpha = 0.1, fill = NA) 

Results look like this

+0

那真棒。非常感謝。我想問你一些關於圖的問題(問題可能很簡單,但我需要理解。) 1)圖中有兩條虛線,這些線的確切含義是什麼? 2)另外,觀察和預測線的含義是什麼?和/或這兩條線有什麼區別?我應該如何解釋這些? 3)在我的圖中,我看到y行中的數字,如1e + 05,3e-05。我怎樣才能將它們轉換爲正常的數字,就像你的圖表一樣。非常感謝。 – Ram

+0

@Ram虛線僅連接觀察點和預測點,它們沒有統計意義,實線是黃土曲線(來自'geom_smooth()'的默認擬合)。這些數字是科學記數法,只需更改[scaling](http://stackoverflow.com/questions/14563989/force-r-to-stop-plotting-abbreviated-axis-labels-e-g-1e00-in-ggplot2)。所有這些行都只是探索性的,可以查看glm模型進行統計分析或詢問[here](http://stats.stackexchange.com/)。 – jenesaisquoi

+0

只是最後一個問題。當我看到實線開始時,觀察到約14.000,預測約9000?這種差異來自哪裏?我這樣問,因爲我認爲觀察到的數據應該與實際數據相同。例如,讓我們看看第一個月(2008-01-01)本月的案例數是16352,這是虛線的起點。在這一點上觀察到的數據約爲14.000。我想這兩點應該是一樣的。你能告訴我他們爲什麼不同嗎? – Ram

相關問題