使用lm模型预测阳性值时的行号匹配问题咨询
问题分析与解决方案:线性模型预测日期对应阳性值的错误排查
核心问题:代码参数错误 + 数据集顺序误解
你现在遇到的问题,本质是预测代码的参数使用错误,再加上原始数据集的倒序排列,导致你拿到的是模型训练数据的拟合值,而非目标日期的预测结果。
先拆解下问题点:
predict()函数参数完全用错了:
你写的代码是:predict(Covid = subset2,M1, interval = "confidence")但
predict()的正确语法是predict(模型对象, newdata=新数据框, ...)——你不仅把模型和数据的顺序搞反了,还错误地用了Covid=这个不存在的参数名,而且subset2是逻辑向量,不是包含date变量的数据框,根本无法用来做预测输入。原始数据集是倒序排列的:
你的原始数据里,第1行是2020-04-08,第10行是2020-03-30(你要预测的起始日),第11-24行正好是你用来训练模型的2020-03-16至2020-03-29的数据。因为参数错误,predict()默认用了模型训练时的数据集(Covid_sub)来生成拟合值,所以你拿到的是11-24行的结果,这完全不是你要的预测值。
修正后的正确预测代码
把代码改成这样,就能得到目标日期的预测结果了:
# 筛选需要预测的日期区间,生成正确的新数据框 subset2 = Covid$date >= "2020-03-30" & Covid$date <= "2020-04-08" Covid_sub2 = Covid[subset2,] # 使用正确的predict语法,传入模型和新数据框 pred_results = predict(M1, newdata = Covid_sub2, interval = "confidence") # 把日期和预测结果合并,方便对应查看 cbind(预测日期 = Covid_sub2$date, pred_results)
结果解读说明
修正后得到的10行结果,才是2020-03-30至2020-04-08这10天的预测值,这才是你需要解读的内容。
另外补充个小提醒:线性模型会把日期自动转换成数值(比如从某个基准日开始的天数)来计算,从你训练数据的趋势看(阳性值从4019涨到139061),线性拟合是合理的,但你可以通过plot(M1)查看残差,确认模型拟合效果是否符合预期。
内容的提问来源于stack exchange,提问作者JessRay
相关产品推荐
相关产品推荐

