2014-02-28 2 views
0

Я хотел бы создать модель прогнозирования из временного ряда. У меня есть кадр данных, который включает в себя 2 столбца (дата и случаи). Поле даты отправляется с 2008-01-01 по 2013-12-01. Случаи имеют некоторое количество за каждый месяц (однако более 30 из 72 наблюдений имеют значение NA.) В результате я хочу создать модель прогнозирования для прогнозирования случаев в ближайшие 3-4 месяца после 2013-12-01? Может кто-нибудь мне помочь?Выполнение прогноза из временного ряда?

Вот выход 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, как бы я создал модель прогнозирования? Поскольку, я буду применять эту модель прогнозирования к другому кадру данных, который имеет те же столбцы (Cases and Date, но имеет несколько NA). – Ram

+0

Проверьте пакеты 'прогноз' и' astsa'. Я посмотрю, смогу ли я создать общий ответ. –

ответ

0

Возможно, это может помочь вам начать работу, но предсказания трудно и необходимо хорошо понимать ваши данные. Представленной здесь информации недостаточно, чтобы сделать хорошие прогнозы ИМО. Это обобщенная линейная модель с случаями как функция дней с момента первого наблюдения и месяца года, так как только просмотр данных, которые он похож на подсчеты, может быть связан с месяцами и уменьшается с годами.

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

Thats awesome. Действительно оценен. Я хочу задать вам несколько вопросов о графике (вопросы могут быть очень легкими, но я должен хорошо понимать.) 1) На графике есть две пунктирные линии, что именно означает эти строки? 2) Также, каково значение наблюдаемой и предсказанной линии? и/или Каковы различия между этими двумя строками? Как я должен их интерпретировать? 3) На моем графике я вижу число в строке y, как 1e + 05, 3e-05. Как преобразовать их в нормальное число, как в вашем графике. Огромное спасибо. – Ram

+0

@ Кратки пунктирные линии просто соединяют наблюдаемые и предсказанные точки, они не имеют статистического значения, сплошные линии - лессовые кривые (по умолчанию устанавливается из 'geom_smooth()'). Эти цифры представляют собой научную нотацию, просто измените [масштабирование] (http://stackoverflow.com/questions/14563989/force-r-to-stop-plotting-abbreviated-axis-labels-e-g-1e00-in-ggplot2). Все строки являются просто разведывательными, изучают модели glm для статистического анализа или спрашивают [здесь] (http://stats.stackexchange.com/). – jenesaisquoi

+0

как раз последний вопрос. Когда я смотрю на начало сплошных линий, наблюдается около 14 000, и предсказано около 9000? Откуда эти различия? Я прошу об этом, так как я полагаю, что наблюдаемые данные должны быть одинаковыми с фактическими данными. Например, давайте посмотрим на первый месяц (2008-01-01). Количество случаев в этом месяце - 16352, которое является начальной точкой пунктирной линии. В этом пункте наблюдаемые данные составляют около 14 000. Я полагаю, что эти два пункта должны быть одинаковыми. Не могли бы вы рассказать мне, почему они разные? – Ram

Смежные вопросы