我正在尝试对非线性回归进行交叉验证并绘制最佳拟合。我觉得我的 locv 和 plot 函数是完全错误的。有人可以澄清我做错了什么吗?
data(Boston, package='MASS')
y <- Boston$nox
x <- Boston$dis
n <- length(x)
nla <- n
las <- seq(0, .85, length=nla)
cvs <- rep(0, nla)
for(j in 1:nla) {
prs <- rep(0,n)
for(i in 1:n) {
yi <- y[-i]
xi <- x[-i]
d <- nls(y~ A + B * exp(C * x), start=list(A=0.5, B=0.5, C=-0.5))
prs[i] <- predict(d, newdata=data.frame(xi=x[i]))
}
cvs[j] <- mean( (y - prs)^2 )
}
cvs[j]
plot(y~x, pch=19, col='gray', cex=1.5,xlab='dis', ylab='nox')
d <- nls(y~ A + B * exp(C * x), start=list(A=0.5, B=0.5, C=-0.5))
lines(predict(d)[order(x)]~sort(x), lwd=4, col='black')