我从我的数据集中创建了一对模型(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
一起使用?
答案 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