Modelar una interacción (2)
En este ejercicio, vas a comparar el rendimiento del modelo con interacción que ajustaste en el ejercicio anterior con el de un modelo solo con efectos principales. Como este conjunto de datos es pequeño, usaremos validación cruzada para simular predicciones sobre datos fuera de muestra.
Empezarás a usar el paquete dplyr para hacer cálculos.
mutate()(docs) añade nuevas columnas a una tbl (un tipo de data frame)group_by()(docs) indica cómo se agrupan las filas en una tblsummarize()(docs) calcula estadísticas resumen de una columna
También usarás pivot_longer() de tidyr (docs), que toma varias columnas y las convierte en pares clave-valor. El data frame alcohol y las fórmulas fmla_add y fmla_interaction ya están precargados.
Este ejercicio forma parte del curso
Aprendizaje supervisado en R: Regresión
Instrucciones del ejercicio
- Usa
kWayCrossValidation()(docs) para crear un plan de particionado para una validación cruzada de 3 particiones.- El primer argumento es el número de filas a dividir.
- El segundo argumento es el número de particiones para la validación cruzada.
- Puedes establecer el 3.º y 4.º argumentos de la función como
NULL.
- Examina y ejecuta el código de ejemplo para obtener las predicciones de validación cruzada de 3 particiones de un modelo sin interacciones y asígnalas a la columna
pred_add. - Obtén las predicciones de validación cruzada de 3 particiones del modelo con interacciones. Asigna las predicciones a la columna
pred_interaction.- El código de muestra te muestra el procedimiento.
- Usa el mismo
splitPlanque ya creaste.
- Rellena los espacios en blanco para
pivot_longerlas predicciones en una sola columnapred.- añadir una columna de residuos (resultado real - resultado predicho).
- obtener el RMSE de las predicciones de validación cruzada para cada tipo de modelo.
- Compara los RMSE. Con base en estos resultados, ¿qué modelo deberías usar?
ejercicio interactivo práctico
Prueba este ejercicio completando este código de ejemplo.
# 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 = ___(___(___)))