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 tblsummarize()(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
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
splitPlanche hai già creato.
- Compila gli spazi vuoti per
- eseguire
pivot_longerdelle previsioni in un'unica colonnapred. - aggiungere una colonna di residui (risultato effettivo - risultato previsto).
- ottenere l'RMSE delle previsioni di cross-validation per ciascun tipo di modello.
- eseguire
- 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 = ___(___(___)))