【问题标题】:Using model for prediction使用模型进行预测
【发布时间】:2020-08-24 23:34:04
【问题描述】:

我正在尝试使用我创建的模型来预测新日期。 第一个问题是建立一个模型来研究从 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

【问题讨论】:

    标签: r rstudio prediction predict


    【解决方案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)
    

    为了预测模型中没有的日期,我们创建了一个我们想要的日期向量。我们将这些作为列表或数据框提供给predictnewdata 参数:

    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)
    

    您不妨考虑采用positivelog 并重复回归。您可以根据原始positive 结果绘制预测的exp。我想你会对结果感到满意。

    【讨论】:

      猜你喜欢
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 2014-06-05
      • 1970-01-01
      相关资源
      最近更新 更多