函数如下:
cv.lm <- function(obj) {
data <- data.frame(y = obj$model[,1], x = obj$model[, -1])
N <- nrow(data)
{
ytest <- data[, 1]
newrsq <- numeric(N)
ypred <- numeric(N)
for(i in 1:N){
newtrain <- data[-i, ]
xtest <- data[i, -1]
newfm <- lm(y ~., data = newtrain)
newrsq <- summary(newfm)$r.squared
ypred <- predict(newfm, xtest)
}
}
q.squared <- 1 - (sum((ytest - ypred)^2) / sum((ytest - mean(ytest))^2))
SDEP <- sqrt(sum((ytest - ypred)^2) / N)
return(list(q.squared = q.squared, SDEP = SDEP, newrsq = newrsq))
}
q.squared我计算出来的一直是负数……