2016-04-21 53 views
0

我想在R中的模型中運行for loop,這樣我就可以在不輸入每個人的情況下運行一個可能的自由度列表。最後在mse向量中存儲所有可能的50自由度的均方誤差。我不能完全得到正確的語法...R爲模型內的循環

任何幫助將不勝感激。

我想設置

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

您可以使用一個循環,例如

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

謝謝你工作完美! – sharkey32

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