Transformaciones de entrada: la "hockey stick" (2)
En el ejercicio anterior, viste que un modelo cuadrático parece ajustarse mejor a los datos de houseprice que un modelo lineal.
En este ejercicio, confirmarás si el modelo cuadrático funcionaría mejor con datos fuera de muestra.
Como este conjunto de datos es pequeño, usarás validación cruzada. La fórmula cuadrática fmla_sqr que creaste en el ejercicio anterior y el data frame houseprice están disponibles para que los uses.
Para comparar, el código de ejemplo calculará predicciones de validación cruzada de un modelo lineal price ~ size.
Este ejercicio forma parte del curso
Aprendizaje supervisado en R: Regresión
Instrucciones del ejercicio
- Usa
kWayCrossValidation()para crear un plan de particionado para una validación cruzada de 3 particiones.- Puedes establecer el 3.º y 4.º argumentos de la función en
NULL.
- Puedes establecer el 3.º y 4.º argumentos de la función en
- Revisa y ejecuta el código de ejemplo para obtener las predicciones de validación cruzada de 3 particiones del modelo
price ~ sizey añádelas a la columnapred_lin. - Obtén las predicciones de validación cruzada para
pricecomo función del tamaño al cuadrado. Asígnalas a la columnapred_sqr.- El código de ejemplo te da el procedimiento.
- Puedes usar el plan de particionado que ya creaste.
- Rellena los espacios en blanco para pivotar las predicciones y calcular los residuos.
- Rellena los espacios en blanco para comparar el RMSE de los dos modelos. ¿Cuál se ajusta mejor?
ejercicio interactivo práctico
Prueba este ejercicio completando este código de ejemplo.
# houseprice is available
summary(houseprice)
# fmla_sqr is available
fmla_sqr
# Create a splitting plan for 3-fold cross validation
set.seed(34245) # set the seed for reproducibility
splitPlan <- ___
# Sample code: get cross-val predictions for price ~ size
houseprice$pred_lin <- 0 # initialize the prediction vector
for(i in 1:3) {
split <- splitPlan[[i]]
model_lin <- lm(price ~ size, data = houseprice[split$train,])
houseprice$pred_lin[split$app] <- predict(model_lin, newdata = houseprice[split$app,])
}
# Get cross-val predictions for price as a function of size^2 (use fmla_sqr)
houseprice$pred_sqr <- 0 # initialize the prediction vector
for(i in 1:3) {
split <- ___
model_sqr <- lm(___, data = houseprice[split$train, ])
houseprice$___[split$app] <- predict(___, newdata = houseprice[split$app, ])
}
# Pivot the predictions and calculate the residuals
houseprice_long <- houseprice %>%
pivot_longer(cols = c('pred_lin', 'pred_sqr'), names_to = 'modeltype', values_to = 'pred') %>%
mutate(residuals = ___)
# Compare the cross-validated RMSE for the two models
houseprice_long %>%
group_by(modeltype) %>% # group by modeltype
summarize(rmse = ___)