使用模型进行预测

时间:2020-05-09 10:57:57

标签: r rstudio prediction predict

我正在尝试使用自己创建的模型预测新日期。 第一个问题是建立一个模型,研究从2020-03-16到2020-03-29的黑白日期和正变量之间的关系。 我使用了以下代码:

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 个答案:

答案 0 :(得分:1)

这里有一些问题。可能的主要问题是您正在尝试对指数增长曲线进行简单的线性回归。这将带来可怕的预测。

无论如何,作为编码练习,您可以像这样进行。首先,请确保您的日期全部采用日期格式,而不要使用字符或因子。这将确保您正确设置子设置。

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的{​​{1}}参数:

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

enter image description here

您可能希望考虑采用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) 中的log并重复回归。您可以将预测的positive与原始exp的结果作图。我想您会对结果感到满意。