2016-04-21 5 views
0

Я хотел бы запустить for loop в рамках модели в R, чтобы я мог просматривать список возможных степеней свободы, не набирая каждого человека. Наконец, сохраняя среднеквадратичную ошибку всех возможных 50 степеней свободы в векторе mse. Я не могу получить правильный синтаксис ...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) 
} 
Смежные вопросы