我想在R中的模型中运行for loop
,这样我就可以在不输入每个人的情况下浏览可能的自由度列表。最后在 mse 向量中存储所有可能的50个自由度的均方误差。我无法完全理解语法......
非常感谢任何帮助。
我想设置
grid = seq(0,50)
gam.mod = gam(balance~income+ns(age,df=**grid**)+student,data=credit[train,])
pred.mod = predict(gam.mod,newdata=credit[test,])
*mse* = mean((pred.mod-balance[test])^2)
答案 0 :(得分:0)
您可以使用循环,例如
grid <- seq(0, 50)
sapply(grid, function(i){
gam.mod <- gam(balance~income + ns(age, df = i) + student, data = credit[train, ])
pred.mod <- predict(gam.mod, newdata = credit[test,])
mse <- mean((pred.mod - balance[test])^2)
mse
})
答案 1 :(得分:0)
你可以尝试这个循环。建议粘贴并创建一个单独的模型,而不是将循环变量直接放入gam函数中。
mse <- rep(NA, 51)
names(mse) <- 0:50
for(i in 0:50){
gam.form <- as.formula(paste0("balance~income+ns(age,df=", i, ")+student"))
gam.mod <- gam(gam.form,data=credit[train,])
pred.mod <- predict(gam.mod,newdata=credit[test,])
mse[as.character(i)] <- mean((pred.mod-balance[test])^2)
}