Conceitos Básicos da Regressão linear em R!

Neste tutorial, você aprenderá o básico por trás de um modelo estatístico muito popular; a regressão linear em R.

O que é uma regressão linear?

Uma regressão linear é um modelo estatístico que analisa a relação entre uma variável de resposta (geralmente chamada y) e uma ou mais variáveis ​​e suas interações (geralmente chamadas x ou variáveis ​​explicativas). 

Você faz esse tipo de relacionamento em sua mente o tempo todo, por exemplo, quando calcula a idade de uma criança com base na altura dela, você está assumindo que, quanto mais velha ela for, mais alta ela será. 

A regressão linear é um dos modelos estatísticos mais básicos existentes, seus resultados podem ser interpretados por quase todos e existe desde o século XIX. É exatamente isso que torna a regressão linear tão popular. É simples e sobreviveu por centenas de anos. 

Mesmo que não seja tão sofisticado quanto outros algoritmos, como redes neurais artificiais ou florestas aleatórias, de acordo com uma pesquisa feita pela empresa KD Nuggets em 2016 e 2017. Previu-se que ainda será usado no ano 2118!

Criando uma regressão linear em R.

Nem todo problema pode ser resolvido com o mesmo algoritmo. Nesse caso, a regressão linear supõe que exista uma relação linear entre a variável de resposta e as variáveis ​​explicativas. Isso significa que você pode ajustar uma linha entre as duas (ou mais variáveis). No exemplo anterior, é claro que existe uma relação entre a idade das crianças e a sua altura.

Regressão linear em R - Exemplos

Neste exemplo em particular, você pode calcular a altura de uma criança se souber a idade dela:

Altura = a + Idade ∗ b
Nesse caso, “a” e “b” são chamados de interceptação e inclinação, respectivamente. Com o mesmo exemplo, “a” ou a interceptação, é o valor de onde você começa a medir. Os bebês recém-nascidos com zero mês não são necessariamente zero centímetros; essa é a função do intercepto. A inclinação mede a mudança de altura em relação à idade em meses. Em geral, a cada mês que a criança fica mais velha, sua altura aumenta com “b”.

Uma regressão linear pode ser calculada em R com o comando lm. No próximo exemplo, use este comando para calcular a altura com base na idade da criança.

Primeiro, importe a biblioteca readxl para ler arquivos do Microsoft Excel, pois pode ser de qualquer tipo, desde que R o leia. 

Os dados a serem usados ​​neste tutorial podem ser baixados aqui:

Baixar Arquivo 1

Baixar Arquivo 2

Faça o download dos dados para um objeto chamado ageandheighte crie a regressão linear na terceira linha. O comando lm pega as variáveis ​​no formato:

lm([target variable] ~ [predictor variables], data = [data source])

Com o comando, summary(lmHeight)você pode ver informações detalhadas sobre o desempenho e os coeficientes do modelo.

library(readxl)
ageandheight <- read_excel("ageandheight.xls", sheet = "Hoja2") #Carregar os dados
lmHeight = lm(height~age, data = ageandheight) #Crie o resumo da regressão linear(lmHeight) #Revise os resultados
Dados do exemplo 1

Coeficientes

No quadrado vermelho, você pode ver os valores da interceptação (valor “a”) e a inclinação (valor “b”) da idade. Esses valores “a” e “b” traçam uma linha entre todos os pontos dos dados. Portanto, neste caso, se houver uma criança com 20,5 meses de idade, “a” tiver 64,92 e “b” 0,635, o modelo prevê (em média) que sua altura em centímetros é de cerca de 64,92 + (0,635 * 20,5) = 77,93 cm.

Quando uma regressão leva em consideração dois ou mais preditores para criar a regressão linear em R, isso é chamado de regressão linear múltipla. Pela mesma lógica que você usou no exemplo simples antes, a altura da criança será medida por:

Altura = a + Idade × b 1 + (Número de irmãos} × b 2

Agora você está olhando para a altura em função da idade em meses e do número de irmãos que a criança tem. Na imagem acima, o retângulo vermelho indica os coeficientes (b1 e b2). Você pode interpretar esses coeficientes da seguinte maneira:

“Ao comparar crianças com o mesmo número de irmãos, a altura média prevista aumenta em 0,63 cm para cada mês que a criança tem. Da mesma forma, ao comparar crianças com a mesma idade, a altura diminui (porque o coeficiente é negativo) em -0,01 cm para cada aumento no número de irmãos”.

Em R, para adicionar outro coeficiente, adicione o símbolo “+” para cada variável adicional que você deseja adicionar ao modelo.

lmHeight2 = lm(height~age + no_siblings, data = ageandheight) #Crie uma regressão linear com duas variáveis
resumo(lmHeight2) #Revise os resultados
Dados de exemplo 2

Como você já deve ter notado, observar o número de irmãos é uma maneira boba de prever a altura de uma criança. Outro aspecto a prestar atenção aos seus modelos lineares é o valor “p” dos coeficientes. No exemplo anterior, o retângulo azul indica os valores de “p” para a idade dos coeficientes e o número de irmãos.

Em termos simples, um valor “p” indica se você pode ou não rejeitar ou aceitar uma hipótese. A hipótese, neste caso, é que o preditor não é significativo para o seu modelo.

O valor de “p” para a idade é 4,34 * e-10 ou 0,000000000434. Um valor muito pequeno significa que a idade é provavelmente uma excelente adição ao seu modelo.

O valor de “p” para o número de irmãos é 0,85. Em outras palavras, há 85% de chance de que esse preditor não seja significativo para a regressão.
Uma maneira padrão de testar se os preditores não são significativos é procurar se os valores de “p” forem menores que 0,05.

Residuos

Uma boa maneira de testar a qualidade do ajuste do modelo é observar os resíduos ou as diferenças entre os valores reais e os valores previstos. A linha reta na imagem abaixo representa os valores previstos. A linha vertical vermelha da linha reta até o valor dos dados observados é o residual.

valores residuais

A ideia aqui é que a soma dos resíduos seja aproximadamente zero ou o mais baixo possível. Na vida real, a maioria dos casos não segue uma linha perfeitamente reta; portanto, são esperados resíduos.

No resumo R da função lm, você pode ver estatísticas descritivas sobre os resíduos do modelo, seguindo o mesmo exemplo, o quadrado vermelho na imagem abaixo mostra como os resíduos são aproximadamente zero.

residuos de lm - Regressão linear em R

Como testar se o seu modelo linear tem um bom ajuste?

Uma medida muito usada para testar quão bom é o seu modelo é o coeficiente de determinação (R²). Essa medida é definida pela proporção da variabilidade total explicada pelo modelo de regressão.

variação de modelo r2

Isso pode parecer um pouco complicado, mas, em geral, para modelos que se ajustam bem aos dados, R² é próximo a 1. Modelos que se encaixam mal aos dados têm R² próximo de 0. Nos exemplos abaixo, o primeiro tem um R² de 0,02; isso significa que o modelo explica apenas 2% da variabilidade dos dados. O segundo tem um R² de 0,99 e o modelo pode explicar 99% da variabilidade total.

variabilidade dos dados R2 - modo 1
variabilidade dos dados R2 - modo 2

No entanto, é essencial ter em mente que, às vezes, um R² alto não é necessariamente bom todas as vezes (veja as parcelas residuais abaixo) e um R² baixo nem sempre é necessariamente ruim. Na vida real, os eventos não se encaixam em uma linha perfeitamente reta o tempo todo. Por exemplo, você pode ter em seus dados filhos mais altos ou menores com a mesma idade. Em alguns campos, um R² de 0,5 é considerado bom.

Com o mesmo exemplo acima, veja o resumo do modelo linear para ver seu R².

modelo linear para ver seu R²

No retângulo azul, observe que há dois R² diferentes, um múltiplo e um ajustado. O múltiplo é o R² que você viu anteriormente. Um problema com esse R² é que ele não pode diminuir à medida que você adiciona mais variáveis ​​independentes ao seu modelo, ele continua aumentando à medida que você torna o modelo mais complexo, mesmo que essas variáveis ​​não adicionem nada às suas previsões (como o exemplo do número de irmãos).

Por esse motivo, é provável que o R² ajustado seja melhor se você estiver adicionando mais de uma variável ao modelo, pois só aumenta se reduzir o erro geral das previsões.

Não se esqueça de olhar para os resíduos!

Você pode ter um R² muito bom no seu modelo, mas não vamos tirar conclusões precipitadas aqui. Vamos ver um exemplo. Você vai prever a pressão de um material em um laboratório com base em sua temperatura.

Vamos plotar os dados (em um gráfico de dispersão simples) e adicionar a linha que você construiu com seu modelo linear. Neste exemplo, deixe R ler os dados primeiro, novamente com o comando read_excel para criar um quadro de dados com os dados e, em seguida, criar uma regressão linear em R com seus novos dados. 

O comando plotpega um quadro de dados e plota as variáveis ​​nele. Nesse caso, ele plota a pressão contra a temperatura do material. Em seguida, adicione a linha feita pela regressão linear com o comando abline.

pressure <- read_excel("pressure.xlsx") #Carregar os dados
lmTemp = lm(Pressure~Temperature, data = pressure) #Crie a regressão linear
plot(pressure, pch = 16, col = "blue") #Plotar os resultados
abline(lmTemp) #Adicionar uma linha de regressão
Plotar regressão linear - exemplo

Se você vir o resumo do seu novo modelo, poderá ver que ele tem resultados muito bons (veja o R² e o R² ajustado)

summary(lmTemp)
Call:
lm(formula = Pressure ~ Temperature, data = pressure)

Residuals:
   Min     1Q Median     3Q    Max
-41.85 -34.72 -10.90  24.69  63.51

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -81.5000    29.1395  -2.797   0.0233 *  
Temperature   4.0309     0.4696   8.583 2.62e-05 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 42.66 on 8 degrees of freedom
Multiple R-squared:  0.902,    Adjusted R-squared:  0.8898
F-statistic: 73.67 on 1 and 8 DF,  p-value: 2.622e-05

Idealmente, quando você traça os resíduos, eles devem parecer aleatórios. Caso contrário, significa que talvez haja um padrão oculto que o modelo linear não está considerando. Para plotar os resíduos, use o comando plot(lmTemp$residuals).

plot(lmTemp$residuals, pch = 16, col = "red")
Tempresiduais

Isto pode ser um problema. Se você tiver mais dados, seu modelo linear simples não poderá generalizar bem. Na figura anterior, observe que existe um padrão (como uma curva nos resíduos). Isso não é aleatório.

O que você pode fazer é uma transformação da variável. Muitas transformações possíveis podem ser executadas em seus dados, como adicionar um termo quadrático $ (x ^ 2) $, $ cúbico (x ^ 3) $ ou ainda mais complexo, como ln (X), ln (X + 1), sqrt (X), 1 / x, Exp (X).

A escolha da transformação correta virá com algum conhecimento de funções algébricas, prática, tentativa e erro. (x2), um cúbico (x3) ou ainda mais complexo, como ln (X), ln (X + 1), sqrt (X), 1 / x, Exp (X). A escolha da transformação correta virá com algum conhecimento de funções algébricas, prática, tentativa e erro.

Vamos tentar com um termo quadrático. Para isso, adicione o termo “I” (“I” maiúsculo) antes da sua transformação, por exemplo, esta será a fórmula de regressão linear normal:

lmTemp2 = lm(Pressure~Temperature + I(Temperature^2), data = pressure) #Crie uma regressão linear com um coeficiente quadrático
summary(lmTemp2) #Revisar os resultados
Call:
lm(formula = Pressure ~ Temperature + I(Temperature^2), data = pressure)

Residuals:
    Min      1Q  Median      3Q     Max
-4.6045 -1.6330  0.5545  1.1795  4.8273

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)      33.750000   3.615591   9.335 3.36e-05 ***
Temperature      -1.731591   0.151002 -11.467 8.62e-06 ***
I(Temperature^2)  0.052386   0.001338  39.158 1.84e-09 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 3.074 on 7 degrees of freedom
Multiple R-squared:  0.9996,    Adjusted R-squared:  0.9994
F-statistic:  7859 on 2 and 7 DF,  p-value: 1.861e-12

Observe que o modelo melhorou significativamente. Se você traçar os resíduos do novo modelo, eles ficarão assim:

plot(lmTemp2$residuals, pch = 16, col = "red")
regressão linear em R - Tempresuduais numero 2

Agora você não vê padrões claros em seus resíduos, o que é bom!

Detectar pontos influentes

Nos seus dados, você pode ter pontos influentes que podem distorcer seu modelo, às vezes desnecessariamente. Pense em um erro na entrada de dados e, em vez de escrever “2.3”, o valor foi “23”. O tipo mais comum de ponto de influência são os outliers, que são pontos de dados em que a resposta observada não parece seguir o padrão estabelecido pelo restante dos dados.

Você pode detectar pontos influentes observando o objeto que contém o modelo linear, usando a função cooks.distance e, em seguida, plota essas distâncias. Altere um valor de propósito para ver como fica no gráfico de distâncias de cozinheiros. Para alterar um valor específico, você pode apontar diretamente para ele com ageandheight[row number, column number] = [new value]. Nesse caso, a altura é alterada para 7,7 do segundo exemplo:

ageandheight[2, 2] = 7.7
head(ageandheight)
Modelo linear geral

Você cria novamente o modelo e vê como o resumo está dando um mau ajuste e, em seguida, plota as distâncias dos cooks. Para isso, depois de criar a regressão linear, use o comando cooks.distance([linear model] e, em seguida, se você quiser, pode traçar estas distâncias com o comando plot.

lmHeight3 = lm(height~age, data = ageandheight)#Criar uma linha de regrassão linear
summary(lmHeight3)#Review the results
plot(cooks.distance(lmHeight3), pch = 16, col = "blue") #Plotar as distãncias dos Cooks.
Call:
lm(formula = height ~ age, data = ageandheight)

Residuals:
    Min      1Q  Median      3Q     Max
-53.704  -2.584   3.609   9.503  17.512

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)    7.905     38.319   0.206    0.841
age            2.816      1.613   1.745    0.112

Residual standard error: 19.29 on 10 degrees of freedom
Multiple R-squared:  0.2335,    Adjusted R-squared:  0.1568
F-statistic: 3.046 on 1 and 10 DF,  p-value: 0.1115
regressão linear em R - distancia dos cooks

Observe que há um ponto que não segue o padrão e pode estar afetando o modelo. Aqui você pode tomar decisões sobre esse ponto, em geral, há três razões pelas quais um ponto é tão influente:

1 – Alguém cometeu um erro de gravação;
2 – Alguém cometeu um erro fundamental ao coletar a observação;
3 – O ponto de dados é perfeitamente válido; nesse caso, o modelo não pode explicar o comportamento.

Se o caso for 1 ou 2, você poderá remover o ponto (ou corrigi-lo). Se for 3, não vale a pena excluir um ponto válido; talvez você possa experimentar um modelo não linear em vez de um modelo linear como a regressão linear em R.

Lembre-se de que um ponto influente pode ser válido, verifique os dados e sua origem antes de excluí-los. É comum ver nos livros de estatística esta citação: “Às vezes lançamos dados perfeitamente bons quando devemos lançar modelos questionáveis”.

Conclusão

Ufa, chegamos ao ao fim! A regressão linear em R é um grande tópico e veio para ficar. Aqui, apresentei alguns truques que podem ajudar a ajustar e tirar o máximo proveito de um algoritmo tão poderoso, mas tão simples.

Você também aprendeu a entender o que está por trás desse modelo estatístico simples e como modificá-lo de acordo com suas necessidades. Você também pode explorar outras opções digitando “? Lm” no console do R e observando os diferentes parâmetros não abordados aqui.

Até a próxima!

Compartilhe

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn
Share on whatsapp
WhatsApp
Share on print
imprimir
Share on facebook
Share on twitter
Share on linkedin
Share on whatsapp
Share on print

O que achou deste artigo?

Leia também