Análise de Resíduos em Modelos de Regressão Usando o R

Assim como a maioria dos usuários mais antigos do R, eu comecei a criar gráficos na linguagem utilizando suas funções padrão, como plot, hist e boxplot. Assim, a análise de resíduos que eu fazia seguia o mesmo estilo dos gráficos que eu construía.

library(palmerpenguins)

# estimacao do modelo linear

ajuste <- lm(body_mass_g ~ flipper_length_mm, data = penguins)

# analise exploratoria e modelo ajustado

plot(body_mass_g ~ flipper_length_mm, data = penguins)
abline(ajuste)

# analise dos residuos

par(mfrow = c(2, 2))
plot(ajuste)

Entretanto, desde que mudei o estilo dos meus gráficos para adaptá-los ao uso do tidyverse, eu passei a procurar uma ferramenta que me permitisse analisar os resíduos dos modelos que ajusto, de maneira que o estilo dos gráficos da análise exploratória e da análise de resíduos ficassem similares.

A primeira destas tentativas foi com o pacote ggfortify:

library(palmerpenguins)
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5     ✓ purrr   0.3.4
## ✓ tibble  3.1.5     ✓ dplyr   1.0.7
## ✓ tidyr   1.1.4     ✓ stringr 1.4.0
## ✓ readr   2.0.2     ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
theme_set(theme_bw())
library(ggfortify)

# estimacao do modelo linear

ajuste <- lm(body_mass_g ~ flipper_length_mm, data = penguins)

# analise exploratoria e modelo ajustado

ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g)) +
  geom_point() + 
  geom_smooth(method = "lm", se = FALSE)
## `geom_smooth()` using formula 'y ~ x'
## Warning: Removed 2 rows containing non-finite values (stat_smooth).
## Warning: Removed 2 rows containing missing values (geom_point).

# analise dos residuos

autoplot(ajuste)

Usei esta solução durante muito tempo, apesar dela me desagradar um pouco. Meu principal problema com ela é o fato de não mostrar os limites da Distância de Cook, o que inviabiliza a fácil detecção de pontos de influência.

Até que, em um determinado momento, conheci o pacote performance. Com ele, consegui gerar os gráficos no estilo do ggplot, como sempre quis, além de ter os limites da Distância de Cook. E, para melhorar, cada gráfico vem com uma pequena descrição do que é possível avaliar em cada um deles, facilitando a vida de quem é iniciante.

library(palmerpenguins)
library(tidyverse)
theme_set(theme_bw())
library(performance)

# estimacao do modelo linear

ajuste <- lm(body_mass_g ~ flipper_length_mm, data = penguins)

# analise exploratoria e modelo ajustado

ggplot(penguins, aes(x = flipper_length_mm, y = body_mass_g)) +
  geom_point() + 
  geom_smooth(method = "lm", se = FALSE)
## `geom_smooth()` using formula 'y ~ x'
## Warning: Removed 2 rows containing non-finite values (stat_smooth).
## Warning: Removed 2 rows containing missing values (geom_point).

# analise dos residuos

check_model(ajuste, 
            check = c("linearity", "qq", "homogeneity", "outliers"))