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

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *