Моделювання взаємодії (2)
У цій вправі ви порівняєте якість моделі з взаємодією, яку ви налаштували в попередній вправі, з якістю моделі лише з головними ефектами. Оскільки набір даних невеликий, ми використаємо крос‑валідацію, щоб змоделювати передбачення на позавибіркових даних.
Ви почнете використовувати пакет dplyr для обчислень.
mutate()(docs) додає нові стовпці до tbl (різновид датафрейму)group_by()(docs) задає групування рядків у tblsummarize()(docs) обчислює підсумкові статистики стовпця
Ви також використаєте pivot_longer() з пакета tidyr (docs), який перетворює кілька стовпців у пари ключ–значення. Датафрейм alcohol і формули fmla_add та fmla_interaction уже завантажені.
Ця вправа є частиною курсу
Кероване навчання в R: регресія
Інструкції до вправи
- Використайте
kWayCrossValidation()(docs), щоб створити план розбиття для 3‑фолдної крос‑валідації.- Перший аргумент — це кількість рядків, які потрібно розбити.
- Другий аргумент — це кількість фолдів для крос‑валідації.
- Третій і четвертий аргументи функції можете встановити в
NULL.
- Перегляньте й запустіть зразок коду, щоб отримати 3‑фолдні крос‑валідаційні передбачення моделі без взаємодій і записати їх у стовпець
pred_add. - Отримайте 3‑фолдні крос‑валідаційні передбачення моделі з взаємодіями. Запишіть передбачення до стовпця
pred_interaction.- У зразку коду показано процедуру.
- Використайте той самий
splitPlan, який ви вже створили.
- Заповніть пропуски, щоб
- виконати
pivot_longerдля передбачень в один стовпецьpred. - додати стовпець залишків (фактичний результат − передбачення).
- отримати RMSE крос‑валідаційних передбачень для кожного типу моделі.
- виконати
- Порівняйте RMSE. Виходячи з результатів, яку модель варто використати?
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# 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 = ___(___(___)))