Modelování interakce (2)
V tomto cvičení porovnáš výkon modelu s interakcí, který jsi sestavil/a v předchozím cvičení, s výkonem modelu obsahujícího pouze hlavní efekty. Protože je tato datová sada malá, použijeme křížovou validaci k simulaci předpovědí na datech mimo trénovací sadu.
Začneme používat balíček dplyr pro výpočty.
mutate()(docs) přidá do tbl (typ datového rámce) nové sloupcegroup_by()(docs) určuje, jak jsou řádky v tbl seskupenysummarize()(docs) vypočítá souhrnné statistiky sloupce
Použ také funkci pivot_longer() z balíčku tidyr (docs), která sloučí více sloupců do dvojic klíč–hodnota. Datový rámec alcohol a vzorce fmla_add a fmla_interaction jsou již načteny.
Toto cvičení je součástí kurzu
Supervised Learning in R: Regression
Pokyny k cvičení
- Pomocí
kWayCrossValidation()(docs) vytvoř plán rozdělení pro 3násobnou křížovou validaci.- První argument je počet řádků k rozdělení.
- Druhý argument je počet foldů pro křížovou validaci.
- 3. a 4. argument funkce můžeš nastavit na
NULL.
- Prohlédni si a spusť ukázkový kód, který získá předpovědi z 3násobné křížové validace pro model bez interakcí, a přiřaď je do sloupce
pred_add. - Získej předpovědi z 3násobné křížové validace pro model s interakcemi. Předpovědi přiřaď do sloupce
pred_interaction.- Postup ti ukazuje ukázkový kód.
- Použij stejný
splitPlan, který jsi už vytvořil/a.
- Doplň prázdná místa, aby kód:
- pomocí
pivot_longersloučil předpovědi do jediného sloupcepred, - přidal sloupec reziduálů (skutečný výsledek – předpovězený výsledek),
- vypočítal RMSE předpovědí křížové validace pro každý typ modelu.
- pomocí
- Porovnej hodnoty RMSE. Na základě výsledků – který model bys zvolil/a?
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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 = ___(___(___)))