我从我的数据集中创建了一对模型(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)
Run Code Online (Sandbox Code Playgroud)
然后我试图使用新的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)))
Run Code Online (Sandbox Code Playgroud)
#4工作正常,但我对其他3有问题.#1和#2返回800值而不是1.#3给我这个错误.
UseMethod中的错误("预测"):没有适用于"预测"的方法应用于类"列表"的对象
我在#1和#2做错了什么?有没有其他方法可以使用该predict()方法loess.smooth?
使用predict变量时,必须使用与调用时相同的名称lm.在#1中,您使用lm变量名称,A1但随后使用predict变量名称xl.该predict功能无法理解您的新数据.想象一下,几个自变量会发生什么......你需要坚持自己的名字.
请predict(m1, list(A1=100000))改用.
对于#2,我之前从未使用过包polspline,但似乎你的调用polymars是错误的.第二个参数必须是预测变量,到目前为止,您将响应包含为预测变量,因为您提供了完整的data.frame.所以你应该这样做:
mmars1 <- polymars(fish$A, fish$A1)
predict(mmars1, fish$A1)
Run Code Online (Sandbox Code Playgroud)
#3相同.似乎loess.smooth已经为你提供了合适的分数.您可以使用该evaluation参数来告知您想要适合预测器的点数:
bestm1 <- loess.smooth(fish$A1, fish$A, evaluation=50)
Run Code Online (Sandbox Code Playgroud)
将给出一个50点的列表以及A1中的拟合点A.或者,您可以使用loess而不是loess.smooth:
bestm1 <- loess(A~A1, fish)
predict(bestm1, data.frame(A1=100000))
Run Code Online (Sandbox Code Playgroud)