Использование модели для прогнозирования - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь предсказать новые даты, используя созданную мной модель. Первый вопрос - построить модель для изучения взаимосвязи ч / б даты и положительной переменной с 16 марта по 29 марта 2020 года. Я использовал приведенный ниже код:

Covid = Covid[, c(1,3)]
head(Covid)
subset = Covid$date>="2020-03-16" & Covid$date <= "2020-03-29"`
Covid_sub = Covid[subset,]`
M1 = lm(positive ~ date, data = Covid_sub)

Затем мне нужно было предсказать новые даты, используя модель, даты от 2020-03-30 до 2020-04-08, это всего 10 дат, но я всегда получаю ряды 11-24. Это правильно, и мне просто нужно интерпретировать данные из первых 10 строк? Вот код, который я использовал для этого

subset2 = Covid$date>="2020-03-30" & Covid$date <= "2020-04-08" 
Covid_sub2 = Covid[subset2,]
predict(Covid = subset2,M1, interval = "confidence")

   fit        lwr       upr
11 115947.657  70520.579 161374.73
12 105766.435  61302.585 150230.29
13  95585.213  51940.289 139230.14
14  85403.991  42425.441 128382.54
15  75222.769  32750.860 117694.68
16  65041.547  22910.783 107172.31
17  54860.325  12901.174  96819.48
18  44679.103   2719.952  86638.25
19  34497.881  -7632.883  76628.65
20  24316.659 -18155.250  66788.57
21  14135.437 -28843.113  57113.99
22   3954.215 -39690.709  47599.14
23  -6227.007 -50690.857  38236.84
24 -16408.229 -61835.306  29018.85

Вот данные

     date      positive
1   2020-04-08  423164
2   2020-04-07  392594
3   2020-04-06  361331
4   2020-04-05  332308
5   2020-04-04  305755
6   2020-04-03  271988
7   2020-04-02  239099
8   2020-04-01  210816
9   2020-03-31  184683
10  2020-03-30  160530
11  2020-03-29  139061
12  2020-03-28  118234
13  2020-03-27  99413
14  2020-03-26  80735
15  2020-03-25  63928
16  2020-03-24  51954
17  2020-03-23  42152
18  2020-03-22  31879
19  2020-03-21  23197
20  2020-03-20  17033
21  2020-03-19  11719
22  2020-03-18  7730
23  2020-03-17  5722
24  2020-03-16  4019

1 Ответ

1 голос
/ 09 мая 2020

Здесь есть несколько проблем. Возможно, основная проблема заключается в том, что вы пытаетесь выполнить простую линейную регрессию на кривой экспоненциального роста. Это даст ужасные прогнозы.

В любом случае, в качестве упражнения по кодированию вы можете поступить следующим образом. Сначала убедитесь, что все ваши даты указаны в формате даты, а не в виде символа или фактора. Это гарантирует, что вы правильно разберетесь с подмножеством.

Covid$date <- as.POSIXct(Covid$date)
Covid_sub <- Covid[which(Covid$date >= as.POSIXct("2020-03-16") &
                         Covid$date <= as.POSIXct("2020-03-29")), ]

Теперь мы можем создать модель:

M1 <- lm(positive ~ date, data = Covid_sub)

Чтобы получить прогнозы для дат, которых не было в модели, мы создаем вектор желаемых дат. Мы передаем их в виде списка или фрейма данных в параметр newdata в predict:

new_dates <- seq(as.POSIXct("2020-03-30"), as.POSIXct("2020-04-08"), by = "day")
pred <- predict(M1, newdata = list(date = new_dates), interval = "confidence")

pred
#>         fit      lwr      upr
#> 1  125704.7 109460.4 141948.9
#> 2  135885.9 117932.9 153838.9
#> 3  146067.1 126367.2 165767.0
#> 4  156248.3 134772.6 177724.0
#> 5  166429.5 143155.8 189703.3
#> 6  176610.8 151521.5 201700.0
#> 7  186792.0 159873.3 213710.7
#> 8  196973.2 168213.8 225732.6
#> 9  207154.4 176545.0 237763.8
#> 10 217335.7 184868.6 249802.7

Теперь мы можем увидеть, насколько плохо это соответствие, построив график с фактическими данными:

plot(Covid$date, Covid$positive)
lines(new_dates, pred[,1])
lines(new_dates, pred[,2], col = "red", lty = 2)
lines(new_dates, pred[,3], col = "red", lty = 2)

введите описание изображения здесь

Вы можете sh рассмотреть возможность использования log из positive и повторения регрессии. Вы можете сопоставить exp прогнозов с исходными positive результатами. Думаю, результат вас порадует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...