R代表模型中的循环

时间:2016-04-21 09:23:13

标签: r for-loop model

我想在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)

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)
}