学习R语言实战,在回归的交叉验证部分遇到了问题。
shrinkage <- function(fit, k=10){
require(bootstrap)
theta.fit <- function(x,y){lsfit(x,y)}
theta.predict <- function(fit,x){cbind(1,x)%*%fit$coef}
x <- fit$model[,2:ncol(fit$model)]
y <- fit$model[,1]
results <- crossval(x, y, theta.fit, theta.predict, ngroup=k)
r2 <- cor(y, fit$fitted.values)^2
r2cv <- cor(y, results$cv.fit)^2
cat("Original R-square =", r2, "\n")
cat(k, "Fold Cross-Validated R-square =", r2cv, "\n")
cat("Change =", r2-r2cv, "\n")
}
states <- as.data.frame(state.x77[,c("Murder", "Population","Illiteracy", "Income", "Frost")])
fit <- lm(Murder ~ Population + Income + Illiteracy + Frost, data=states)
shrinkage(fit)
----------------------------------------------------------------
这里面主要是搞不懂在shrinkage函数中,x,y还没被定义出来呢就已经在theta.fit、theta.predict中用了,这样也可以吗?
此外cbind(1,x)%*%fit$coef这个语句应该是想计算预测的值,但是我不用函数的方式就是先回归再计算
states <- as.data.frame(state.x77[,c("Murder", "Population","Illiteracy", "Income", "Frost")])
fit <- lm(Murder ~ Population + Income + Illiteracy + Frost, data=states)
x <- fit$model[,2:ncol(fit$model)]
y <- fit$model[,1]
cbind(1,x)%*%fit$coef
就显示
> cbind(1,x)%*%fit$coef
Error in cbind(1, x) %*% fit$coef :
requires numeric/complex matrix/vector arguments
好像cbind(1,x)莫名奇妙的就变成list了,为什按照原来的语句就能顺畅的执行了呢?


雷达卡





京公网安备 11010802022788号







