0

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

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讨厌它,但我觉得它给人一种个人感觉。

4

1 回答 1

2

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

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

在这里,我将使用可以采用您的公式的最简单模型,lm代表“线性模型”。您还可以使用 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))

我不确定我的模型是最好的,

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

我欢迎您提出任何建议。例如,您可能会争辩说,使用 6 次多项式比 8 次多项式进行建模更好,

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

于 2020-06-02T18:57:15.600 回答