IniziaInizia gratis

Modeling an interaction (2)

In questo esercizio confronterai le performance del modello con interazione che hai stimato nell'esercizio precedente con quelle di un modello solo a effetti principali. Poiché questo insieme di dati è piccolo, useremo la cross-validation per simulare previsioni su dati fuori campione.

Inizierai a usare il pacchetto dplyr per fare calcoli.

  • mutate() (docs) aggiunge nuove colonne a una tbl (un tipo di data frame)
  • group_by() (docs) specifica come sono raggruppate le righe in una tbl
  • summarize() (docs) calcola statistiche riassuntive di una colonna

Userai anche pivot_longer() di tidyr (docs) che prende più colonne e le comprime in coppie chiave-valore. Il data frame alcohol e le formule fmla_add e fmla_interaction sono già state caricate.

Questo esercizio fa parte del corso

Supervised Learning in R: Regression

Visualizza il corso

Istruzioni dell'esercizio

  • Usa kWayCrossValidation() (docs) per creare un piano di suddivisione per una cross-validation a 3 fold.
    • Il primo argomento è il numero di righe da suddividere.
    • Il secondo argomento è il numero di fold per la cross-validation.
    • Puoi impostare il 3° e il 4° argomento della funzione a NULL.
  • Esamina ed esegui il codice di esempio per ottenere le previsioni della cross-validation a 3 fold di un modello senza interazioni e assegnale alla colonna pred_add.
  • Ottieni le previsioni della cross-validation a 3 fold del modello con interazioni. Assegna le previsioni alla colonna pred_interaction.
    • Il codice di esempio ti mostra la procedura.
    • Usa lo stesso splitPlan che hai già creato.
  • Compila gli spazi vuoti per
    • eseguire pivot_longer delle previsioni in un'unica colonna pred.
    • aggiungere una colonna di residui (risultato effettivo - risultato previsto).
    • ottenere l'RMSE delle previsioni di cross-validation per ciascun tipo di modello.
  • Confronta gli RMSE. In base a questi risultati, quale modello dovresti usare?

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

# 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 = ___(___(___)))
Modifica ed esegui il codice