我试图用我创建的模型来预测新的日期.第一个问题是建立一个模型来研究从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
这里有几个问题。也许主要的问题是,你试图在指数增长曲线上做一个简单的线性回归。这将给出可怕的预测。
总之,作为一个编码练习,你可以这样进行。首先确保你的日期都是日期格式,而不是字符或因子。这将确保你的子集正确。
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)
你可能希望考虑将其与实际数据进行对比。log
的 positive
并重复回归。您可以绘制 exp
的预测与原来的 positive
的结果。我想你会对结果满意的。