Um guia completo para regressão passo a passo em r
A regressão passo a passo é um procedimento que podemos usar para construir um modelo de regressão a partir de um conjunto de variáveis preditoras, inserindo e removendo preditores passo a passo no modelo até que n Não haja mais uma razão estatisticamente válida para inserir ou exclua mais.
O objetivo da regressão stepwise é criar um modelo de regressão que inclua todas as variáveis preditoras que estão estatisticamente relacionadas de forma significativa à variável de resposta .
Este tutorial explica como realizar os seguintes procedimentos de regressão passo a passo em R:
- Seleção passo a passo
- Seleção retroativa passo a passo
- Seleção passo a passo em ambas as direções
Para cada exemplo, usaremos o conjunto de dados integrado mtcars :
#view first six rows of mtcars
head(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3,460 20.22 1 0 3 1
Ajustaremos um modelo de regressão linear múltipla usando mpg (milhas por galão) como variável de resposta e as outras 10 variáveis no conjunto de dados como possíveis variáveis preditoras.
Para cada exemplo, usaremos a função step() integrada do pacote stats para realizar uma seleção passo a passo, que usa a seguinte sintaxe:
estágio (apenas modelo de interceptação, direção, alcance)
Ouro:
- apenas modelo original : apenas a fórmula do modelo original
- Direção: O modo de pesquisa passo a passo pode ser “ambos”, “retroceder” ou “avançar”.
- escopo: uma fórmula que especifica os preditores que gostaríamos de tentar inserir no modelo
Exemplo 1: Seleção passo a passo
O código a seguir mostra como realizar uma seleção passo a passo:
#define intercept-only model intercept_only <- lm(mpg ~ 1, data=mtcars) #define model with all predictors all <- lm(mpg ~ ., data=mtcars) #perform forward stepwise regression forward <- step(intercept_only, direction=' forward ', scope= formula (all), trace=0) #view results of forward stepwise regression forward$anova Step Df Deviance Resid. Df Resid. Dev AIC 1 NA NA 31 1126.0472 115.94345 2 + wt -1 847.72525 30 278.3219 73.21736 3 + cyl -1 87.14997 29 191.1720 63.19800 4 + hp -1 14.55145 28 176.6205 62.66456 #view final model forward$coefficients (Intercept) wt cyl hp 38.7517874 -3.1669731 -0.9416168 -0.0180381
Nota: O argumento trace=0 diz ao R para não exibir os resultados completos da seleção passo a passo. Isso pode ocupar muito espaço se houver um grande número de variáveis preditoras.
Veja como interpretar os resultados:
- Primeiro, ajustamos o modelo somente de interceptação. Este modelo tinha um AIC de 115,94345 .
- Em seguida, ajustamos todos os modelos possíveis a um preditor. O modelo que produziu o AIC mais baixo e também teve uma redução estatisticamente significativa no AIC em comparação com o modelo apenas de linha de base utilizou o preditor de peso . Este modelo tinha um AIC de 73,21736 .
- A seguir, ajustamos todos os modelos possíveis com dois preditores. O modelo que produziu o AIC mais baixo e também teve uma redução estatisticamente significativa no AIC em comparação com o modelo de preditor único adicionou o preditor cil . Este modelo tinha um AIC de 63,19800 .
- A seguir, ajustamos todos os modelos possíveis a três preditores. O modelo que produziu o menor AIC e também teve uma redução estatisticamente significativa no AIC em comparação ao modelo de dois preditores adicionou o preditor hp . Este modelo tinha um AIC de 62,66456 .
- A seguir, ajustamos todos os modelos possíveis a quatro preditores. Descobriu-se que nenhum desses modelos produziu uma redução significativa no AIC, por isso interrompemos o procedimento.
O modelo final acabou sendo:
mpg ~ 38,75 – 3,17 * peso – 0,94 * cil – 0,02 * hip
Exemplo 2: Seleção retroativa passo a passo
O código a seguir mostra como retroceder:
#define intercept-only model intercept_only <- lm(mpg ~ 1, data=mtcars) #define model with all predictors all <- lm(mpg ~ ., data=mtcars) #perform backward stepwise regression backward <- step(all, direction=' backward ', scope= formula (all), trace=0) #view results of backward stepwise regression backward$anova Step Df Deviance Resid. Df Resid. Dev AIC 1 NA NA 21 147.4944 70.89774 2 - cyl 1 0.07987121 22 147.5743 68.91507 3 - vs 1 0.26852280 23 147.8428 66.97324 4 - carb 1 0.68546077 24 148.5283 65.12126 5 - gear 1 1.56497053 25 150.0933 63.45667 6 - drat 1 3.34455117 26 153.4378 62.16190 7 - available 1 6.62865369 27 160.0665 61.51530 8 - hp 1 9.21946935 28 169.2859 61.30730 #view final model backward$coefficients (Intercept) wt qsec am 9.617781 -3.916504 1.225886 2.935837
Veja como interpretar os resultados:
- Primeiro, ajustamos um modelo usando todos os preditores p . Defina isso como M p .
- Então, para k = p, p-1,…1, ajustamos todos os k modelos que contêm todos, exceto um preditor em M k , para um total de k-1 variáveis preditoras. Em seguida, escolha o melhor entre esses k modelos e chame-o de M k-1 .
- Finalmente, escolhemos o melhor modelo de M 0 … M p usando AIC.
O modelo final acabou sendo:
mpg ~ 9,62 – 3,92*peso + 1,23*qsec + 2,94*am
Exemplo 3: Seleção passo a passo em ambas as direções
O código a seguir mostra como realizar uma seleção passo a passo em ambas as direções:
#define intercept-only model intercept_only <- lm(mpg ~ 1, data=mtcars) #define model with all predictors all <- lm(mpg ~ ., data=mtcars) #perform backward stepwise regression both <- step(intercept_only, direction=' both ', scope= formula (all), trace=0) #view results of backward stepwise regression both$anova Step Df Deviance Resid. Df Resid. Dev AIC 1 NA NA 31 1126.0472 115.94345 2 + wt -1 847.72525 30 278.3219 73.21736 3 + cyl -1 87.14997 29 191.1720 63.19800 4 + hp -1 14.55145 28 176.6205 62.66456 #view final model both$coefficients (Intercept) wt cyl hp 38.7517874 -3.1669731 -0.9416168 -0.0180381
Veja como interpretar os resultados:
- Primeiro, ajustamos o modelo somente de interceptação.
- Em seguida, adicionamos preditores ao modelo sequencialmente, assim como fizemos para a seleção passo a passo. No entanto, após adicionar cada preditor, também removemos quaisquer preditores que não proporcionavam mais melhorias no ajuste do modelo.
- Repetimos esse processo até termos um modelo final.
O modelo final acabou sendo:
mpg ~ 9,62 – 3,92*peso + 1,23*qsec + 2,94*am
Observe que a seleção do passo para frente e a seleção do passo em ambas as direções produziram o mesmo padrão final, enquanto a seleção do passo para trás produziu um padrão diferente.
Recursos adicionais
Como testar a significância de uma inclinação de regressão
Como ler e interpretar uma tabela de regressão
Um guia para multicolinearidade na regressão