Modelando uma interação (2)
Neste exercício, você vai comparar o desempenho do modelo com interação que ajustou no exercício anterior com o desempenho de um modelo apenas com efeitos principais. Como este conjunto de dados é pequeno, vamos usar validação cruzada para simular previsões em dados fora da amostra.
Você começará a usar o pacote dplyr para fazer cálculos.
mutate()(docs) adiciona novas colunas a um tbl (um tipo de data frame)group_by()(docs) define como as linhas são agrupadas em um tblsummarize()(docs) calcula estatísticas de resumo de uma coluna
Você também usará o pivot_longer() do tidyr (docs), que pega várias colunas e as transforma em pares chave-valor. O data frame alcohol e as fórmulas fmla_add e fmla_interaction já foram pré-carregados.
Este exercício faz parte do curso
Aprendizado Supervisionado em R: Regressão
Instruções do exercício
- Use
kWayCrossValidation()(docs) para criar um plano de divisão para uma validação cruzada com 3 dobras.- O primeiro argumento é o número de linhas a serem divididas.
- O segundo argumento é o número de dobras para a validação cruzada.
- Você pode definir o 3º e 4º argumentos da função como
NULL.
- Examine e execute o código de exemplo para obter as previsões da validação cruzada de 3 dobras de um modelo sem interações e atribuí-las à coluna
pred_add. - Obtenha as previsões da validação cruzada de 3 dobras do modelo com interações. Atribua as previsões à coluna
pred_interaction.- O código de exemplo mostra o procedimento.
- Use o mesmo
splitPlanque você já criou.
- Preencha as lacunas para
pivot_longeras previsões em uma única colunapred.- adicionar uma coluna de resíduos (resultado real - resultado previsto).
- obter o RMSE das previsões da validação cruzada para cada tipo de modelo.
- Compare os RMSEs. Com base nesses resultados, qual modelo você usaria?
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
# 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 = ___(___(___)))