我的函数应返回一个data.frame
对象,该对象给出以下多项式的K倍误差估计:多项式回归,三次样条和平滑样条,其自由度范围为df.min
至df.max
。但是,我的平滑样条曲线不能像其他两个模型那样工作,它显示了以下错误:data $ y [-train]-preds2中的错误:二进制运算符的非数字参数。
I wonder why poly and cubic spline is working but not smoothing spline?
有人知道如何解决这个问题吗?
# This part is working fine
smoothCV_1 <- function(x,y,K = 10,df.min = 1,df.max = 10) {
train=sample (c(TRUE,FALSE),nrow(spline.data),rep=TRUE)
cv.error2 <- rep(0,10)
for (i in 1:10) {
if(i >= 3) {
spline.fit <- lm(y ~ bs(x,i),data = spline.data,subset = train)
preds1 <- predict(spline.fit,data)[-train]
cv.error[i]= mean((data$y[-train] - preds1)^2)
glm.fit = glm(y ~ poly(x,data=spline.data,subset = train)
preds2 <- predict(glm.fit,data)[-train]
cv.error2[i]= mean((data$y[-train] - preds2)^2)
} else {
cv.error[i]= NA
glm.fit = glm(y ~ poly(x,data)[-train]
cv.error2[i]= mean((data$y[-train] - preds2)^2)
}
}
cv.df <- data.frame(degree = 1:10,cv.error = cv.error,cv.error2 = cv.error2)
return(cv.df)
}
smoothCV_1(x,10,1,10)
# This part is problematic
smoothCV_3 <- function(x,10)
for (i in 1:10) {
if(i >= 1) {
fit2 <- with(smooth.spline(x,df=i),subset = train)
preds2 <- predict(fit2,data)[-train]
#This part shows error:
#Error in data$y[-train] - preds2 : non-numeric argument to binary operator
cv.error2[i]= mean((data$y[-train] - preds2)^2)
print(cv.error[i])
} else {
cv.error2[i]= NA
}
}
cv.df <- data.frame(degree = 1:10,cv.error2 = cv.error2)
return(cv.df)
}
smoothCV_3(x,10)