我正在学习'统计学习简介'来自James等(2015)。在实验部分中,使用k折交叉验证方法计算不同子集的拟合优度的脚本。
当我尝试绘制误差系数时,我得到错误:
Error in UseMethod("predict") : no applicable method for 'predict' applied to an object of class "regsubsets"
这个剧本让我不知道自己做错了什么。任何人都可以帮我解释一下吗?
library(leaps)
library(ISLR)
k=10
set.seed(1)
folds=sample(1:k,nrow(Hitters),replace=TRUE)
cv.errors=matrix(NA,k,19, dimnames=list(NULL, paste(1:19)))
for(j in 1:k){
best.fit=regsubsets(Salary~.,data=Hitters[folds!=j,],nvmax=19)
for(i in 1:19){
pred=predict(best.fit,Hitters[folds==j,],id=i)
cv.errors[j,i]=mean( (Hitters$Salary[folds==j]-pred)^2)
}
}
mean.cv.errors=apply(cv.errors,2,mean)
mean.cv.errors
par(mfrow=c(1,1))
plot(mean.cv.errors,type='b')
reg.best=regsubsets(Salary~.,data=Hitters, nvmax=19)
coef(reg.best,11)
答案 0 :(得分:1)
我也遇到了这个问题。希望你找到答案。如果没有,这就是答案。
我确信您已经创建了以下功能。
predict.regsubsets <- function(object, newdata, id,...) {
form <- as.formula(object$call[[2]])
mat <- model.matrix(form, newdata)
coefi <- coef(object, id = id)
xvars <- names(coefi)
mat[,xvars]%*%coefi
}
现在您必须将pred=predict(best.fit,Hitters[folds==j,],id=i)
更改为pred <- predict.regsubsets(best.fit, hitters[folds == j, ], id = i)
希望它有所帮助。