我不明白R的预测

时间:2014-03-28 11:45:11

标签: r models predict

我从我的数据集中创建了一对模型(800行,2列):

#1
m1=lm(A~A1, fish)
#2
mmars1=polymars(fish$A, fish)
#3
bestm1=loess.smooth(fish$A1, fish$A, span=best)
#4
bestm2=smooth.spline(fish$A1,fish$A, spar=best)

然后我尝试使用新的x预测y:

#Predict
#1
predict(m1, data.frame(xl=c(100000)))
#2
predict(mmars1, data.frame(xm=c(100000)))
#3
predict(bestm1, data.frame(xb1=c(100000)))
#4
predict(bestm2, data.frame(xb2=c(100000)))

#4工作正常,但我有其他3的问题。  #1和#2返回800个值而不是1。  #3给了我这个错误。

  

UseMethod错误("预测"):没有适用的方法来预测'   应用于类"列表"

的对象

我在#1和#2做错了什么?是否有另一种方法可以将predict()方法与loess.smooth一起使用?

1 个答案:

答案 0 :(得分:6)

使用predict时,您的变量必须与调用lm时的名称相同。在#1中,您使用变量名为lm的{​​{1}},然后使用变量名为A1的{​​{1}}。 predict功能无法理解您的新数据。想象一下,几个自变量会发生什么......你需要坚持自己的名字。

改为使用xl

对于#2,我之前从未使用过包predict,但您对predict(m1, list(A1=100000))的调用似乎是错误的。第二个参数必须是预测变量,到目前为止,您将响应包含为预测变量,因为您提供了完整的data.frame。所以你应该这样做:

polspline

#3相同。似乎polymars已经为您提供了拟合点。您可以使用mmars1 <- polymars(fish$A, fish$A1) predict(mmars1, fish$A1) 参数来告知您想要适合预测器的点数:

loess.smooth

将在evaluation中为您提供50个点的列表,其中包含bestm1 <- loess.smooth(fish$A1, fish$A, evaluation=50) 中的拟合点。或者,您可以使用A1代替A

loess