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 1 – O 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)

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)

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.

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)

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.