2016-04-21 19 views
0

Ich würde gerne eine for loop innerhalb eines Modells in R laufen, so dass ich durch eine Liste von möglichen Freiheitsgraden laufen kann, ohne jedes Individuum zu tippen. Abschließend wird der mittlere quadratische Fehler aller möglichen 50 Freiheitsgrade in dem Vektor mse gespeichert. Ich kann nicht ganz die Syntax richtig ...R für Schleife innerhalb Modell

Jede Hilfe würde sehr geschätzt werden.

Ich möchte

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) 

Antwort

0

Sie eine Schleife können Sie einstellen, zum Beispiel

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

Danke funktioniert perfekt! – sharkey32

0

Sie könnten diese Schleife versuchen. Es empfiehlt sich, ein separates Modell einzufügen und zu erstellen, anstatt die Variable looping direkt in die Gam-Funktion einzufügen.

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