如何正确使用R中的预测函数

How to properly use the predict function in R

首先我要给你一些入门代码:

library(ggplot2)

y = c(0, 0, 1, 2, 0,  0, 1,  3,  0,  0,  3, 0, 6, 2, 8, 16, 21, 39, 48, 113, 92, 93 ,127, 159, 137, 46, 238, 132 ,124, 185 ,171, 250, 250 ,187, 119 ,151, 292,  94, 281, 146, 163 ,104, 156, 272, 273, 212, 210, 135, 187, 208, 310, 276 ,235, 246, 190, 232, 254, 446,
314, 402 ,276, 279, 386 ,402, 238, 581, 434, 159, 261, 356, 440, 498, 495, 462 ,306, 233, 396, 331, 418, 293 ,431 ,300, 222, 222, 479 ,501, 702
,790, 681)
x = 1:length(y)

现在,我正在尝试预测第 90 个数据点将使用多项式回归,其中数据 #1 为 0,#89 为 681。我测试了我的模型并决定8 次多项式曲线是最合适的。

我已经尝试了代码 predict(formula=y~poly(x,8),90),它给出了一些奇怪的错误(这对我来说没有意义)关于如何没有适用的方法。

Error in UseMethod("predict") : 
  no applicable method for 'predict' applied to an object of class "c('double', 'numeric')"

为什么这不起作用? 在搜索了无数 R 文档、博客和论坛后,在我看来这应该可以正常工作。

什么有效?我尝试了其他使用预测方法的方法,我认为这是最接近我想要的解决方案:预测值对于第 90 个数据点。

还有其他建议吗?我不确定我的模型是否最好,欢迎您提出任何建议。例如,您可能会争辩说使用 6 次多项式比使用 8 次多项式建模更好,如果您有正当理由,我会同意您的看法。

谢谢!

注意:请不要删除感谢。我知道一些 Stack Overflowers 讨厌 它,但我觉得它给人一种个人风格。

predict 适用于模型。你有一个公式,但没有模型。您需要先拟合一个模型,然后再对其进行预测。

通常这是分两步完成的,因为通常人们希望保存模型,这样它就可以用于多个预测 - 也许检查系数,检查假设,获得模型拟合诊断,做出不同的预测 - 无需重新拟合模型。

在这里,我将使用最简单的模型,可以采用您的公式,lm,它代表 "linear model"。您还可以使用 GLM、黄土、随机森林、GAM、神经网络,或者……很多很多不同的模型。

my_model = lm(formula=y~poly(x,8))
predict(my_model, newdata = list(x = 90))
#        1 
# 977.9421 

当然,您可以将其组合成一行,而不必费心保存和命名 my_model:

predict(lm(formula=y~poly(x,8)), newdata = list(x = 90))

I'm not sure that my model is the best,

不是。几乎可以确定。但这没关系 - 很难知道一个模型在任何意义上都是最好的。

and I would welcome any suggestions you may have. For example, you may argue that it's better to use a 6th degree than an 8th degree polynomial for modeling,

我认为我从未见过使用过 8 次多项式。 (甚至第六名。)它高得离谱。我不知道你的数据是什么,所以我不能说太多。如果您有理由认为 8 次多项式是准确的,那就去做吧。但是,如果您只想拟合一条摇摆不定的曲线并向前推断一点点,那么使用 mgcv::gamstats::loess 模型的三次样条将是更标准的选择。