Aan de slagGa gratis aan de slag

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 gegroepeerd
  • summarize() (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

Cursus bekijken

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 NULL zetten.
  • 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 splitPlan die je al hebt gemaakt.
  • Vul de lege plekken in om
    • de voorspellingen met pivot_longer in één kolom pred te zetten.
    • een kolom met residuen toe te voegen (werkelijke uitkomst - voorspelde uitkomst).
    • de RMSE van de cross-validation-voorspellingen per modeltype te berekenen.
  • 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 = ___(___(___)))
Code bewerken en uitvoeren