我的代码如下:
#1
library(MASS)
data(Boston)
l1=lm(nox~poly(dis,3),data=Boston
l1
nox=Boston$nox
dis=Boston$dis
x_lim=range(dis)
x_simu=seq(from=x_lim[1],to=x_lim[2],by=0.1)
l1_pred=predict(l1,newdata=data.frame(dis=x_simu),se=TRUE)
plot(dis,nox,main="fitted line and two-times std band")
lines(x_simu,l1_pred$fit,col="red",lwd=2)
#2
pl=pl_pred=sse=rep(NA,10)
for(i in 1:10){
pl=lm(nox~poly(dis,i))
pl_pred=predict(pl,newdata=list(dis=x_simu))
lines(x_simu,pl_pred$fit,col=i)
sse=(pl_pred$residuals)^2
}
plot(1:10,sse,lty=2,pch=16)
三个问题:
一、为什么newdata要求data.frame形式,写newdata=list()也行?
二、“l1_pred=predict(l1,newdata=data.frame(dis=x_simu),se=TRUE)”一句中dis改为其他,为什么就会报错?
三、lines不是在现有图上加线吗?为什么向量长度必须和plot一致?
四、第二问我的代码会如下报错,应该怎么讲十条拟合曲线画进一张图?
Error in UseMethod("predict") : "predict"没有适用于"list"目标对象的方法
此外: Warning message:
In pl <- lm(nox ~ poly(dis, i)) : 被替换的项目不是替换值长度的倍数


雷达卡


京公网安备 11010802022788号







