Regressão Diagnóstico Pressupostos



Introdução

Você não precisa usar o R, mas provavelmente é uma boa ideia.


Os modelos de regressão linear são um dos melhores procedimentos estatísticos quando utilizados corretamente. Quando usados de uma forma ingênua, eles podem ser enganadores ou pouco informativos.

Como todos os métodos úteis, os modelos lineares têm limitações. Eles não podem ser utilizados em toda base de dados que você encontrar ai. Em algum momento você precisa avaliar os seu pressupostos.

Os intervalos de confiança e os testes estatísticos só serão válidos se essas premissas forem verdadeiras para os dados que estão sendo analisados. Isso porque que todos os testes e intervalos baseiam-se, nas suas equações, em erros e resíduos. Portanto, é necessário verificar se essas premissas estão presentes antes de analisar a regressão

Quando as pressuposições são violadas, a confiabilidade de todos os testes paramétricos ficam comprometidas podendo levar a falsas conclusões.

A função lm()

Os comandos lm() e summary() são uma combinação útil para produzir valores agregados ou resumidos de um bancos de dados.

Usaremos o banco de dados CARROS para essas atividades.

source('https://raw.githubusercontent.com/DATAUNIRIO/Miscellaneous_Functions_Rstats/master/CARROS.R',encoding = "UTF-8")
library(DT)
CARROS %>% datatable(options = list(pageLength = 5, dom = 'tip'),fillContainer = FALSE,
caption = 'Tabela 1: Base de dados CARROS.')

O modelo

fit <- lm(Kmporlitro~+HP+Peso+Amperagem_circ_eletrico, data=CARROS) 
summary(fit)

Call:
lm(formula = Kmporlitro ~ +HP + Peso + Amperagem_circ_eletrico, 
    data = CARROS)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.3598 -1.8374 -0.5099  0.9681  5.7078 

Coefficients:
                         Estimate Std. Error t value Pr(>|t|)    
(Intercept)             29.394934   6.156303   4.775 5.13e-05 ***
HP                      -0.032230   0.008925  -3.611 0.001178 ** 
Peso                    -3.227954   0.796398  -4.053 0.000364 ***
Amperagem_circ_eletrico  1.615049   1.226983   1.316 0.198755    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 2.561 on 28 degrees of freedom
Multiple R-squared:  0.8369,    Adjusted R-squared:  0.8194 
F-statistic: 47.88 on 3 and 28 DF,  p-value: 3.768e-11

Pressupostos da Regressão

  1. Linearidade
  2. Ausência de outliers e observações influentes
  3. Normalidade
  4. Variancia do erro constante
  5. Independência entre as observações
  6. Multicolinearidade (não é bem um pressuposto, mas deve ser avaliado)

Vou apresentar alguns procedimetos para avaliar um modelo de regressão. Todos os outros procedimentos podem ser vistos aqui. Esse artigo também está muito bom.

Os resíduos são normais

residuos<-residuals(fit)
shapiro.test(residuos)

    Shapiro-Wilk normality test

data:  residuos
W = 0.91718, p-value = 0.01744

Variancia constante

#Computes a score test of the hypothesis of constant error variance against the alternative that the error variance changes with the level of the response (fitted values), or with a linear combination of predictors.
library("lmtest")
bptest(fit, data = CARROS, studentize = TRUE)

    studentized Breusch-Pagan test

data:  fit
BP = 1.5987, df = 3, p-value = 0.6597

Outliers

library(car)
outlierTest(fit) 
No Studentized residuals with Bonferroni p < 0.05
Largest |rstudent|:
               rstudent unadjusted p-value Bonferroni p
Toyota Corolla 2.576771           0.015758      0.50427

Um pacote do para diagnóstico de modelos de regressão

A função gvlma() no pacote gvlma realiza uma validação global dos pressupostos de modelos lineares, bem como avaliações separadas de assimetria, curtose e heterocedasticidade.

# Global test of model assumptions
library(gvlma)
gvmodel <- gvlma(fit)
summary(gvmodel) 

Call:
lm(formula = Kmporlitro ~ +HP + Peso + Amperagem_circ_eletrico, 
    data = CARROS)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.3598 -1.8374 -0.5099  0.9681  5.7078 

Coefficients:
                         Estimate Std. Error t value Pr(>|t|)    
(Intercept)             29.394934   6.156303   4.775 5.13e-05 ***
HP                      -0.032230   0.008925  -3.611 0.001178 ** 
Peso                    -3.227954   0.796398  -4.053 0.000364 ***
Amperagem_circ_eletrico  1.615049   1.226983   1.316 0.198755    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 2.561 on 28 degrees of freedom
Multiple R-squared:  0.8369,    Adjusted R-squared:  0.8194 
F-statistic: 47.88 on 3 and 28 DF,  p-value: 3.768e-11


ASSESSMENT OF THE LINEAR MODEL ASSUMPTIONS
USING THE GLOBAL TEST ON 4 DEGREES-OF-FREEDOM:
Level of Significance =  0.05 

Call:
 gvlma(x = fit) 

                       Value  p-value                   Decision
Global Stat        13.852150 0.007782 Assumptions NOT satisfied!
Skewness            4.280466 0.038553 Assumptions NOT satisfied!
Kurtosis            0.008505 0.926519    Assumptions acceptable.
Link Function       8.802895 0.003008 Assumptions NOT satisfied!
Heteroscedasticity  0.760284 0.383240    Assumptions acceptable.

Duas referências: * https://www.statmethods.net/stats/rdiagnostics.html *http://r-statistics.co/Assumptions-of-Linear-Regression.html

Para fazer o download do banco de dados CARROS (e outros), copie e cole no R um desses dois códigos abaixo.

Código 1 - sem instalação de pacotes (para usuários do windows)

source('https://raw.githubusercontent.com/DATAUNIRIO/aulauniriov2/master/download_das_bases_de_dados_do_curso_de_estatistica.R')

Código 2 - necessário instalar o pacote usethis (para usuários do macOS/apple, linux ou windows)

install.packages("usethis")
usethis::use_course("https://github.com/DATAUNIRIO/Base_de_dados/archive/master.zip")

Para saber sobre outras funções no R e no Python, você pode acessar o meu blog https://blog.metodosquantitativos.com/ ou o meu site pessoal https://steven.metodosquantitativos.com/