使用模型进行预测

问题描述 投票:0回答:1

我试图用我创建的模型来预测新的日期.第一个问题是建立一个模型来研究从2020-03-16到2020-03-29的bw日期和正变量的关系。我已经使用了下面的代码。

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
r rstudio prediction predict
1个回答
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 的参数 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)

enter image description here

你可能希望考虑将其与实际数据进行对比。logpositive 并重复回归。您可以绘制 exp 的预测与原来的 positive 的结果。我想你会对结果满意的。

© www.soinside.com 2019 - 2024. All rights reserved.