Menu

Regressão Linear no R: lm(), summary() e predict()

Ajuste uma regressão com lm(), leia cada bloco do summary() - coeficientes, erros padrão, p-valores, R-quadrado, a estatística F - e faça previsões com predict().

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

A Ideia: a Reta de Mínimos Quadrados

A regressão linear ajusta uma reta através de uma nuvem de pontos: y = intercepto + inclinação × x. De todas as retas possíveis, lm() escolhe a que minimiza a soma dos resíduos ao quadrado - sendo um resíduo a distância vertical entre um ponto e a reta. Elevar ao quadrado faz erros grandes pesarem desproporcionalmente, e é por isso que um único outlier extremo pode inclinar o ajuste inteiro.

Onde a correlação te dá um número sem unidades para "o quão fortemente eles se movem juntos", a regressão te dá uma equação - com unidades, uma inclinação que você pode interpretar e a maquinaria para prever.

Leia a fórmula como "modele mpg em função de wt". Os dois coeficientes são a reta ajustada: mpg ≈ 37,3 − 5,3 × peso. A inclinação tem unidades reais - cada 1000 lbs a mais de carro (wt está em unidades de 1000 lbs) custa cerca de 5,3 milhas por galão. O intercepto (37,3 mpg com peso zero) é apenas onde a reta cruza o zero; nenhum carro pesa nada, então não interprete demais.

O Passeio pelo summary()

summary(fit) é a saída que todo curso de estatística pede que você interprete. Rode-a e vá bloco a bloco:

Call - ecoa o modelo que você ajustou. Trivial agora, salvador quando você está malabarizando seis objetos de modelo.

Residuals - o resumo de cinco números das sobras (observado − previsto). Você quer a mediana perto de 0 e uma simetria aproximada entre Min/Max e 1Q/3Q; uma assimetria forte sugere que o modelo de reta está deixando algo de fora.

Coefficients - o coração da saída, uma linha por termo:

  • Estimate - o valor ajustado. Para wt, −5,34: cada 1000 lbs adicionais está associado a cerca de 5,3 mpg a menos. Sempre traduza a inclinação em uma frase com unidades; essa frase é todo o conteúdo prático do modelo.
  • Std. Error - o quanto a estimativa oscilaria entre amostras repetidas. Estimativas a poucos erros padrão do zero são frágeis.
  • t value - Estimate ÷ Std. Error: a quantos erros padrão o coeficiente está do zero (−9,56 aqui).
  • Pr(>|t|) - o p-valor para "esse coeficiente poderia realmente ser zero?". Para wt é cerca de 1,3e-10: se o peso realmente não tivesse relação linear com o mpg, uma inclinação tão acentuada praticamente nunca apareceria em uma amostra de 32. P-valor pequeno = evidência de que a associação existe - não prova de que o modelo está correto, e não uma medida de importância (um efeito minúsculo e estimado com precisão também recebe um p-valor minúsculo).
  • Signif. codes / estrelas - uma abreviação visual para a coluna de p-valores. Conveniente; não acrescenta informação.

Residual standard error: 3.05 on 30 degrees of freedom - o tamanho típico de um erro de previsão, nas unidades da própria resposta: as previsões erram tipicamente em cerca de 3 mpg. Julgue isso contra a escala do mpg (que vai de cerca de 10 a 34).

Multiple R-squared: 0.75 - o peso explica cerca de 75% da variância no mpg. O Adjusted R-squared (0,74) recalcula isso com uma penalidade por preditor, porque a versão bruta só pode aumentar conforme você acrescenta variáveis - até ruído aleatório. Ao comparar modelos com números diferentes de preditores, o ajustado é o honesto. E resista ao reflexo de que "bom modelo = R² alto": um efeito genuinamente útil pode viver em um modelo de R² baixo (desfecho ruidoso, um entre muitos determinantes), enquanto um R² alto pode vir de um sobreajuste ou de uma variável vazada.

F-statistic: 91.4 ... p-value: 1.29e-10 - o teste do modelo inteiro: este modelo bate "simplesmente prever a média para todo mundo"? Com um preditor ele duplica o teste t da inclinação (repare que 9,56² ≈ 91,4); com vários preditores ele vira o teste conjunto de que ao menos um coeficiente é diferente de zero. Sua maquinaria é a mesma decomposição de variância da ANOVA.

Regressão Múltipla: Mantendo os Outros Constantes

Adicione preditores com +:

A interpretação muda de uma forma crucial. Cada Estimate agora é o efeito daquele preditor mantendo os demais constantes: o coeficiente de wt (cerca de −3,9, contra −5,3 antes) é o custo em mpg do peso extra comparando carros com a mesma potência. O −5,3 da regressão simples embutia silenciosamente o fato de que carros mais pesados também tendem a ser mais potentes; a regressão múltipla desembrulha isso. É também por isso que coeficientes se deslocam quando você acrescenta variáveis - se o novo preditor se correlaciona com um antigo, a descrição de cargo do antigo muda. O R-quadrado sobe para cerca de 0,83, e aqui a versão ajustada é a comparação justa contra o modelo de um preditor.

Previsões: predict()

O modelo ajustado é uma função; predict() a avalia. Monte um data frame newdata cujos nomes de coluna coincidam exatamente com os preditores:

Os dois tipos de intervalo respondem a perguntas diferentes, e confundi-los é um erro clássico de prova:

  • interval = "confidence" - incerteza sobre a média: "para todos os carros que pesam 2500 lbs, onde está o mpg médio?". Estreito, e encolhe conforme os dados crescem.
  • interval = "prediction" - a faixa em que um novo carro individual daquele peso provavelmente cairá. Muito mais largo, porque um carro isolado carrega sua própria dispersão em torno da reta - dispersão que nenhuma quantidade de dados faz desaparecer na média.

Reportar um intervalo de confiança quando a pergunta é sobre uma nova observação superestima dramaticamente sua precisão.

Diagnósticos e a Armadilha da Extrapolação

summary() te diz o que o modelo estima; os gráficos de resíduos dizem se você deve acreditar. Em uma sessão interativa:

par(mfrow = c(2, 2))
plot(fit)   # four diagnostic plots

O que procurar: Residuals vs Fitted deve ser uma nuvem sem forma - uma curva significa que a relação não é reta; um funil (dispersão crescendo com os valores ajustados) significa variância não constante, e seus erros padrão estão errados. Os pontos do gráfico Q-Q devem abraçar a reta - caudas pesadas indicam que outliers estão distorcendo o ajuste. Scale-Location é a checagem do funil de novo. Residuals vs Leverage sinaliza pontos influentes - observações que, sozinhas, arrastam os coeficientes (no mtcars, carros exóticos como o Chrysler Imperial costumam aparecer aqui). Um gráfico de dispersão rápido dos dados brutos antes do ajuste pega a maior parte disso cedo.

Por fim, a armadilha que nenhum diagnóstico pega: extrapolação. O modelo aprendeu com carros pesando aproximadamente 1500-5400 lbs. Alimente predict() com um wt de 8 e ele alegremente retornará um mpg negativo - a matemática estende a reta para sempre, mas a evidência para na borda dos dados. Preveja apenas dentro (ou perto) da faixa em que você ajustou.

O Que Você Leva Daqui

  • fit <- lm(y ~ x, data = df) ajusta a reta de mínimos quadrados; coef(fit) é a equação, summary(fit) o relatório completo.
  • Leia os Estimates como frases com unidades; Pr(>|t|) pergunta "isso poderia ser zero?", não "isso importa?".
  • O erro padrão residual é o erro típico em unidades reais; o R-quadrado ajustado é o número justo para comparar modelos.
  • Na regressão múltipla todo coeficiente significa "mantendo os demais constantes" - e os coeficientes se deslocam quando preditores correlacionados entram.
  • predict(fit, newdata, interval = ...): "confidence" para a média, "prediction" para um novo caso individual - o mais largo.
  • Verifique plot(fit) em busca de curvas, funis e pontos influentes; nunca confie em previsões fora da faixa dos dados.

A seguir: quando o desfecho é um sim/não em vez de um número - regressão logística com glm().

Perguntas frequentes

Como rodar uma regressão linear no R?

Com lm() e uma fórmula: fit <- lm(mpg ~ wt, data = mtcars) regride mpg sobre o peso. Depois summary(fit) imprime os coeficientes, seus p-valores, o R-quadrado e a estatística F. Adicione mais preditores com +: lm(mpg ~ wt + hp, data = mtcars).

Como interpretar a saída do summary do lm no R?

No bloco Coefficients, cada Estimate é a mudança esperada na resposta para um aumento de uma unidade naquele preditor (mantendo os demais fixos); Pr(>|t|) testa se aquele coeficiente poderia plausivelmente ser zero. O Multiple R-squared é a fração da variância explicada. A estatística F no rodapé testa o modelo como um todo contra um modelo só com intercepto.

Qual é a diferença entre Multiple e Adjusted R-squared?

O Multiple R-squared é a fração bruta da variância explicada, e ele só pode subir quando você acrescenta preditores - até os inúteis. O Adjusted R-squared cobra uma penalidade por preditor, então só sobe quando uma nova variável merece seu lugar. Compare modelos usando a versão ajustada.

Como prever novos valores a partir de uma regressão no R?

Monte um data frame cujos nomes de coluna coincidam com os preditores e depois chame predict(fit, newdata = ...). Acrescente interval = "confidence" para a incerteza sobre a resposta média, ou interval = "prediction" para a faixa (bem mais larga) em que uma nova observação individual provavelmente cairá.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR