R 数据拟合多项式-数据帧中数据的困难
我有下面的例子来拟合数据的三阶多项式:R 数据拟合多项式-数据帧中数据的困难,r,plot,curve,R,Plot,Curve,我有下面的例子来拟合数据的三阶多项式: # rm(list = ls(all = TRUE)) # clear workspace var2 <- c(32,64,96,118,126,144,152.5,158) var3 <- c(99.5,104.8,108.5,100,86,64,35.3,15) fit1 <- lm(var3 ~ poly(var2,3,raw=TRUE)) plot(var2, var3 , pch=19, ylim=c(0,150)) xx &l
# rm(list = ls(all = TRUE)) # clear workspace
var2 <- c(32,64,96,118,126,144,152.5,158)
var3 <- c(99.5,104.8,108.5,100,86,64,35.3,15)
fit1 <- lm(var3 ~ poly(var2,3,raw=TRUE))
plot(var2, var3 , pch=19, ylim=c(0,150))
xx <- seq(30,160, length = 20)
lines(xx, predict(fit1, data.frame(var2 = xx)), col="blue")
这很有效。但是,我在将这种方法应用于数据帧中我自己的数据时遇到了一些困难:
rm(list = ls(all = TRUE))
mydf <- data.frame(var2 = c(32, 64, 96, 118, 126, 144, 152.5, 158), var3 = c(99.5, 104.8, 108.5, 100, 86, 64, 35.3, 15))
fit2 <- lm(mydf$var3 ~ poly(mydf$var2,3,raw=TRUE))
xx <- seq(min(mydf$var2), max(mydf$var2), length = 10)
plot(mydf$var2, mydf$var3 , pch=19, ylim=c(0,150))
lines(xx, predict(fit2, data.frame(var2 = xx)), col="blue")
这会在xy.coordsx,y中产生错误:“x”和“y”长度不同,我在整理时遇到困难。我已经检查了第二段代码的每个部分的属性,仍然没有发现问题。我确信我忽略了一些非常明显的事情 如果您想从模型中进行预测,那么应该使用data参数而不是$syntax,例如
fit2 <- lm(var3 ~ poly(var2,3,raw=TRUE), data=mydf)
lines(xx, predict(fit2, data.frame(var2 = xx)), col="blue")
值得一提的是,正交多项式(即忽略原始值=真值)在数值上更稳定;如果不需要将系数解释为零处的截距/线性/二次/三次趋势,那么从长远来看,这样做会更好
尝试将长度更改为8英寸xx:
mydf <- data.frame(var2 = c(32, 64, 96, 118, 126, 144, 152.5, 158), var3 = c(99.5, 104.8, 108.5, 100, 86, 64, 35.3, 15))
fit2 <- lm(mydf$var3 ~ poly(mydf$var2,3,raw=TRUE))
xx <- seq(min(mydf$var2), max(mydf$var2), length = 8)
plot(mydf$var2, mydf$var3 , pch=19, ylim=c(0,150))
lines(xx, predict(fit2, data.frame(var2 = xx)), col="blue")
虽然不太合适,但它仍然有效。您的答案在某种程度上是有效的,但如果OP想使用结果进行插值,则会令人失望……是的。你的答案很完美。我想我应该删除我的答案。由于我不理解的原因,在这个解决方案中,虽然错误消失了,但与原始示例相比,拟合度非常差。另外,在最初的示例中,设置长度=一个大的数字(例如100)效果非常好……这完全解决了我的问题。除了我不明白为什么另一种方法不起作用——也就是说,这两个例子之间有什么区别。谢谢你提供的关于raw=TRUE@marcel的提示:我还想问@BenBolker同样的问题。为什么mydf$var3等不起作用?