A regressão linear em si, é um conjunto de análises que busca avaliar se apenas uma ou mais variáveis ​​preditoras conseguem explicar a variável dependente (critério). A partir de agora veremos os detalhes das suposições de regressão linear e como conduzi-las corretamente. 

As Suposições de regressão linear

Construir um modelo de regressão linear é apenas metade do trabalho. Para ser realmente utilizável na prática, o modelo deve estar em conformidade com os pressupostos da regressão linear. Confira:

Suposição 1O modelo de regressão é linear em parâmetros

O modelo de regressão é linear em parâmetros. Um exemplo de equação do modelo que é linear nos parâmetros:

Y  =  a  + (β1*X1) + (β2*X2²)

Porém, o X2 é elevado à potência 2, a equação ainda é linear nos parâmetros beta. Portanto, a suposição é satisfeita neste caso.

Suposição 2 – A média dos resíduos é zero.

Como verificar? Verifique a média dos resíduos. Se for zero (ou muito próximo), essa suposição é considerada verdadeira para esse modelo. Este é o padrão, a menos que você faça correções explicitamente, como definir o termo de interceptação como zero. Veja:

mod <- lm(dist ~ speed, data=cars)
mean(mod$residuals)
#=> 2.442491e-17

Como a média dos resíduos é aproximadamente zero, esta suposição é verdadeira para este modelo.

Suposição 3 – Homocedasticidade de resíduos ou variância igual.

Como verificar? Uma vez que o modelo de regressão é construído, defina par (mfrow=c(2, 2)), em seguida, plote o modelo usando plot(lm.mod). Isso produz quatro plotagens. Os gráficos superior esquerdo e inferior esquerdo mostram como os resíduos variam conforme os valores ajustados aumentam:

par(mfrow=c(2,2))  # set 2 rows and 2 column plot layout
mod_1 <- lm(mpg ~ disp, data=mtcars)  # linear model
plot(mod_1)
Suposições de regressão linear

No primeiro gráfico (canto superior esquerdo), conforme os valores ajustados ao longo de x aumentam, os resíduos diminuem e, em seguida, aumentam. Esse padrão é indicado pela linha vermelha, que deve ser aproximadamente plana se os distúrbios forem homocedásticos. O gráfico na parte inferior esquerda também verifica isso, e é mais conveniente, pois o termo de perturbação no eixo Y é padronizado.

Nesse caso, há um padrão definido observado. Portanto, existe heterocedasticidade. Vamos verificar isso em um modelo diferente.

mod <- lm(dist ~ speed, data=cars[1:20, ])  #  linear model
plot(mod)
Suposições de regressão linear - Residuais

Agora, os pontos aparecem aleatórios e a linha parece bastante plana, sem tendência de aumento ou diminuição. Assim, a condição de homocedasticidade pode ser aceita.

Suposição 4 – Sem autocorrelação de resíduos

Isso é aplicável especialmente para dados de séries temporais. A autocorrelação é a correlação de uma série temporal com atrasos em si mesma. Quando os resíduos são autocorrelacionados, significa que o valor atual é dependente dos valores anteriores (históricos) e que existe um padrão inexplicável definido na variável Y que aparece nas perturbações.

Como verificar a autocorrelação?
Abaixo, estão 3 maneiras de verificar a autocorrelação de resíduos:

Usando acf plot

# Metodo 1: Visualise com acf plot
library(ggplot2)
data(economics)
lmMod <- lm(pce ~ pop, data=economics)
acf(lmMod$residuals)  # altamente autocorrelacionado da imagem.
Altamente autocorrelacionado da imagem. - acf-plot

O eixo X corresponde às defasagens do residual, aumentando em passos de 1. A primeiríssima linha (à esquerda) mostra a correlação do resíduo consigo mesmo (Lag 0), portanto, será sempre igual a 1.

Se os resíduos não foram autocorrelacionados, a correlação (eixo Y) da próxima linha imediata em diante cairá para um valor próximo de zero abaixo da linha azul tracejada (nível de significância). Claramente, este não é o caso aqui. Portanto, podemos concluir que os resíduos são autocorrelacionados.

Usando o teste de execução:

# Metodo 2: Executa o teste para testar a aleatoriedade
lawstat::runs.test(lmMod$residuals)
#=>   Runs Test - Two sided

#=> data:  lmMod$residuals
#=> Standardized Runs Statistic = -23.812, p-value < 2.2e-16

Com um valor de p <2,2e-16, rejeitamos a hipótese nula de que é aleatório. Isso significa que há um padrão definido nos resíduos.

Usando o teste Durbin-Watson:

# Metodo 3: Durbin-Watson test
e
lmtest::dwtest(lmMod)
#=>   Durbin-Watson test
e

#=> data:  lmMod
#=> DW = 0.0021559, p-value < 2.2e-16
#=> hipótese alternativa: a autocorrelação verdadeira é maior que 0

Portanto, dwtest também confirma nosso achado.

Como retificar?
Adicione lag1 de residual como uma variável X ao modelo original. Isso pode ser feito de forma conveniente usando a função slide no pacote DataCombine.

library(DataCombine)
econ_data <- data.frame(economics, resid_mod1=lmMod$residuals)
econ_data_1 <- slide(econ_data, Var="resid_mod1", NewVar = "lag1", slideBy = -1)
econ_data_2 <- na.omit(econ_data_1)
lmMod2 <- lm(pce ~ pop + lag1, data=econ_data_2)

Vamos verificar se o problema de autocorrelação de resíduos é resolvido usando este método.

Verifique 1

acf(lmMod2$residuals)
acf-plot2 - verificação

Ao contrário do gráfico acf de lmMod, os valores de correlação caem abaixo da linha azul tracejada do próprio lag1. Portanto, a autocorrelação não pode ser confirmada.

Verificar 2

runs.test(lmMod2$residuals)  # runs test
#=>   Runs Test - Two sided
#=> 
#=> data:  lmMod2$residuals
#=> Standardized Runs Statistic = 0.96176, p-value = 0.3362

valor de p = 0.3362. Não se pode rejeitar a hipótese nula de que é aleatório. Com um valor de p = 0.3362, não podemos rejeitar a hipótese nula. Portanto, podemos assumir com segurança que os resíduos não são autocorrelacionados.

Verificar 3

lmtest::dwtest(lmMod2)
#=>   Durbin-Watson test
e
#=> 
#=> data:  lmMod2
#=> DW = 2.0431, p-value = 0.6672
#=> hipótese alternativa: a autocorrelação verdadeira é maior que 0

Com um valor alto de p de 0,667, não podemos rejeitar a hipótese nula de que a verdadeira autocorrelação é zero. Portanto, a suposição de que os resíduos não devem ser autocorrelacionados é satisfeita por este modelo.

Se, mesmo depois de adicionar lag1 como uma variável X, não satisfizer a suposição de autocorrelação de resíduos, você pode tentar adicionar lag2 ou ser criativo ao criar variáveis ​​explicativas derivadas ou termos de interação significativos. Isso é mais como arte do que um algoritmo.

Suposição 5 – As variáveis ​​X e resíduos não estão correlacionados

Como verificar? Faça um teste de correlação na variável X e os resíduos:

mod.lm <- lm(dist ~ speed, data=cars)
cor.test(cars$speed, mod.lm$residuals)  # do correlation test 
#=>   Pearson's product-moment correlation
#=> 
#=> data:  cars$speed and mod.lm$residuals
#=> t = -8.1225e-17, df = 48, p-value = 1
#=> hipótese alternativa: a correlação verdadeira não é igual a 0
#=> Intervalo de confiança de 95 por cento:
#=> -0.2783477  0.2783477
#=> estimativas de amostra:
#=>           cor 
#=> -1.172376e-17

O valor p é alto, portanto, a hipótese nula de que a correlação verdadeira é 0 não pode ser rejeitada. Portanto, a suposição é verdadeira para este modelo.

Suposição 6

O número de observações deve ser maior que o número de Xs. Isso pode ser observado diretamente olhando os dados.

Suposição 7

A variabilidade nos valores de X é positiva. Isso significa que os valores X em uma determinada amostra não devem ser todos iguais (ou quase iguais).

Como verificar?

var(cars$speed)  
#=> [1] 27.95918

A variância na variável X acima é muito maior do que 0. Portanto, essa suposição é satisfeita.

Conclusão

Como disse na introdução, do meu ponto de vista, As suposições de regressão linear mais importantes são os da independência e da homogeneidade dos resíduos porque têm uma forte influência na estatística do teste de declive. A suposição de linearidade também é importante, mas acho que alguma flexibilidade pode ser mantida, assim como a suposição de normalidade.

Espero que este artigo seja útil para você e que lhe permita realizar suas regressões lineares nas melhores condições possíveis e que você saiba o que fazer e como fazer quando uma ou mais hipóteses não forem satisfeitas.