Modelowanie interakcji (2)
W tym ćwiczeniu porównasz wydajność modelu z interakcją dopasowanego w poprzednim ćwiczeniu z wydajnością modelu uwzględniającego tylko efekty główne. Ponieważ ten zbiór danych jest mały, do symulowania predykcji na danych spoza próby użyjemy walidacji krzyżowej.
Zaczniesz korzystać z pakietu dplyr do wykonywania obliczeń.
mutate()(docs) dodaje nowe kolumny do tbl (rodzaju ramki danych)group_by()(docs) określa sposób grupowania wierszy w tblsummarize()(docs) oblicza statystyki podsumowujące dla kolumny
Skorzystasz również z funkcji pivot_longer() (docs) z pakietu tidyr, która łączy wiele kolumn w pary klucz–wartość. Ramka danych alcohol oraz formuły fmla_add i fmla_interaction zostały wstępnie załadowane.
To ćwiczenie jest częścią kursu
Nadzorowane uczenie maszynowe w R: regresja
Instrukcje do ćwiczenia
- Użyj funkcji
kWayCrossValidation()(docs), aby utworzyć plan podziału dla 3-krotnej walidacji krzyżowej.- Pierwszy argument to liczba wierszy do podziału.
- Drugi argument to liczba fałd walidacji krzyżowej.
- Trzeci i czwarty argument funkcji możesz ustawić na
NULL.
- Przeanalizuj i uruchom przykładowy kod, aby uzyskać predykcje z 3-krotnej walidacji krzyżowej dla modelu bez interakcji, a następnie przypisz je do kolumny
pred_add. - Uzyskaj predykcje z 3-krotnej walidacji krzyżowej dla modelu z interakcjami. Przypisz predykcje do kolumny
pred_interaction.- Przykładowy kod pokazuje ci tę procedurę.
- Użyj tego samego
splitPlan, który już utworzyłeś/utworzyłaś.
- Uzupełnij puste miejsca, aby:
- za pomocą
pivot_longerzebrać predykcje w jedną kolumnępred, - dodać kolumnę reszt (rzeczywisty wynik – przewidywany wynik),
- obliczyć RMSE predykcji z walidacji krzyżowej dla każdego typu modelu.
- za pomocą
- Porównaj wartości RMSE. Na podstawie tych wyników — który model warto wybrać?
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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 = ___(___(___)))