Een interactie modelleren (2)
In deze oefening vergelijk je de prestaties van het interactiemodel dat je in de vorige oefening hebt gefit met de prestaties van een model met alleen hoofdeffecten. Omdat deze gegevensset klein is, gebruiken we cross-validation om te simuleren dat we voorspellingen maken op out-of-sample data.
Je gaat het dplyr-pakket gebruiken om berekeningen te doen.
mutate()(docs) voegt nieuwe kolommen toe aan een tbl (een type data frame)group_by()(docs) bepaalt hoe rijen in een tbl worden gegroepeerdsummarize()(docs) berekent samenvattende statistieken van een kolom
Je gebruikt ook pivot_longer() uit tidyr (docs), dat meerdere kolommen samenvoegt tot key-valueparen. Het alcohol-data frame en de formules fmla_add en fmla_interaction zijn al vooraf geladen.
Deze oefening maakt deel uit van de cursus
Supervised Learning in R: Regressie
Oefeninstructies
- Gebruik
kWayCrossValidation()(docs) om een splitsingsplan te maken voor een 3-fold cross-validation.- Het eerste argument is het aantal rijen dat je wilt splitsen.
- Het tweede argument is het aantal folds voor de cross-validation.
- Je kunt het 3e en 4e argument van de functie op
NULLzetten.
- Bekijk en voer de voorbeeldcode uit om de 3-fold cross-validation-voorspellingen te krijgen van een model zonder interacties en wijs ze toe aan de kolom
pred_add. - Haal de 3-fold cross-validation-voorspellingen op van het model met interacties. Wijs de voorspellingen toe aan de kolom
pred_interaction.- De voorbeeldcode laat je de procedure zien.
- Gebruik dezelfde
splitPlandie je al hebt gemaakt.
- Vul de lege plekken in om
- de voorspellingen met
pivot_longerin één kolompredte zetten. - een kolom met residuen toe te voegen (werkelijke uitkomst - voorspelde uitkomst).
- de RMSE van de cross-validation-voorspellingen per modeltype te berekenen.
- de voorspellingen met
- Vergelijk de RMSE's. Op basis van deze resultaten, welk model zou je gebruiken?
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# alcohol is available
summary(alcohol)
# Both the formulae are available
fmla_add
fmla_interaction
# Create the splitting plan for 3-fold cross validation
set.seed(34245) # set the seed for reproducibility
splitPlan <- ___(___(___), ___, ___, ___)
# Sample code: Get cross-val predictions for main-effects only model
alcohol$pred_add <- 0 # initialize the prediction vector
for(i in 1:3) {
split <- splitPlan[[i]]
model_add <- lm(fmla_add, data = alcohol[split$train, ])
alcohol$pred_add[split$app] <- predict(model_add, newdata = alcohol[split$app, ])
}
# Get the cross-val predictions for the model with interactions
alcohol$pred_interaction <- 0 # initialize the prediction vector
for(i ___ ___) {
split <- ___
model_interaction <- lm(___, data = alcohol[split$train, ])
alcohol$___[split$app] <- predict(___, newdata = alcohol[split$app, ])
}
# Get RMSE
alcohol %>%
pivot_longer(cols=c('pred_add', 'pred_interaction'), names_to='modeltype', values_to='pred') %>%
mutate(residuals = ____) %>%
group_by(modeltype) %>%
summarize(rmse = ___(___(___)))