Como identificar pontos de dados influentes usando a distância de cook


A distância de Cook , muitas vezes denotada como Di , é usada na análise de regressão para identificar pontos de dados influentes que podem afetar negativamente seu modelo de regressão.

A fórmula para a distância de Cook é:

d i = (r i 2 / p*MSE) * (h ii / (1-h ii ) 2 )

Ouro:

  • ri é o i- ésimo resíduo
  • p é o número de coeficientes no modelo de regressão
  • MSE é o erro quadrático médio
  • h ii é o i- ésimo valor de alavancagem

Mesmo que a fórmula pareça um pouco complicada, a boa notícia é que a maioria dos softwares estatísticos pode calculá-la facilmente para você.

Essencialmente, a distância de Cook faz uma coisa: mede o quanto todos os valores ajustados do modelo mudam quando o i -ésimo ponto de dados é removido.

Um ponto de dados com um valor alto para a distância de Cook indica que ele influencia fortemente os valores ajustados. Uma regra geral é que qualquer ponto com distância de Cook maior que 4/n ( onde n é o número total de pontos de dados ) é considerado um valor discrepante.

É importante notar que a distância de Cook é frequentemente usada para identificar pontos de dados influentes. Só porque um ponto de dados é influente não significa necessariamente que deva ser removido. Você deve primeiro verificar se o ponto de dados foi simplesmente registrado incorretamente ou se há algo estranho nele que possa indicar uma descoberta interessante.

Como calcular a distância de Cook em R

O exemplo a seguir ilustra como calcular a distância de Cook em R.

Primeiro, carregaremos duas bibliotecas necessárias para este exemplo:

 library(ggplot2)
library(gridExtra)

A seguir, definiremos dois quadros de dados: um com dois outliers e outro sem outliers.

 #create data frame with no outliers
no_outliers <- data.frame(x = c(1, 2, 2, 3, 4, 5, 7, 3, 2, 12, 11, 15, 14, 17, 22),
                          y = c(22, 23, 24, 23, 19, 34, 35, 36, 36, 34, 32, 38, 41,
                                42, 44))

#create data frame with two outliers
outliers <- data.frame(x = c(1, 2, 2, 3, 4, 5, 7, 3, 2, 12, 11, 15, 14, 17, 22),
                       y = c( 190 , 23, 24, 23, 19, 34, 35, 36, 36, 34, 32, 38, 41,
                             42, 180 ))

A seguir, criaremos um gráfico de dispersão para exibir os dois quadros de dados lado a lado:

 #create scatterplot for data frame with no outliers
no_outliers_plot <- ggplot(data = no_outliers, aes(x = x, y = y)) +
  geom_point() +
  geom_smooth(method = lm) +
  ylim(0, 200) +
  ggtitle("No Outliers")

#create scatterplot for data frame with outliers
outliers_plot <- ggplot(data = outliers, aes(x = x, y = y)) +
  geom_point() +
  geom_smooth(method = lm) +
  ylim(0, 200) +
  ggtitle("With Outliers")

#plot the two scatterplots side by side
gridExtra::grid.arrange(no_outliers_plot, outliers_plot, ncol=2)

Podemos ver como os outliers influenciam negativamente o ajuste da linha de regressão no segundo gráfico.

Para identificar pontos influentes no segundo conjunto de dados, podemos calcular a distância de Cook para cada observação no conjunto de dados e, em seguida, traçar essas distâncias para ver quais observações estão acima do limite tradicional de 4/n:

 #fit the linear regression model to the dataset with outliers
model <- lm(y ~ x, data = outliers)

#find Cook's distance for each observation in the dataset
cooksD <- cooks.distance(model)

# Plot Cook's Distance with a horizontal line at 4/n to see which observations
#exceed this threshold
n <- nrow(outliers)
plot(cooksD, main = "Cooks Distance for Influential Obs")
abline(h = 4/n, lty = 2, col = "steelblue") # add cutoff line

Podemos ver claramente que a primeira e a última observação no conjunto de dados excedem o limite de 4/n. Assim, identificaríamos essas duas observações como pontos de dados influentes que impactam negativamente o modelo de regressão.

Se quisermos remover todas as observações que excedem o limite de 4/n, podemos fazer isso usando o seguinte código:

 #identify influential points
influential_obs <- as.numeric(names(cooksD)[(cooksD > (4/n))])

#define new data frame with influential points removed
outliers_removed <- outliers[-influential_obs, ]

Então podemos comparar dois gráficos de dispersão: um mostra a linha de regressão com os pontos de influência presentes e o outro mostra a linha de regressão com os pontos de influência removidos:

 #create scatterplot with outliers present
outliers_present <- ggplot(data = outliers, aes(x = x, y = y)) +
  geom_point() +
  geom_smooth(method = lm) +
  ylim(0, 200) +
  ggtitle("Outliers Present")

#create scatterplot with outliers removed
outliers_removed <- ggplot(data = outliers_removed, aes(x = x, y = y)) +
  geom_point() +
  geom_smooth(method = lm) +
  ylim(0, 200) +
  ggtitle("Outliers Removed")

#plot both scatterplots side by side
gridExtra::grid.arrange(outliers_present, outliers_removed, ncol = 2)

Podemos ver claramente quão melhor a linha de regressão se ajusta aos dados depois que os dois pontos de dados influentes são removidos.

Notas técnicas

  • A maioria dos softwares estatísticos tem a capacidade de calcular facilmente a distância de Cook para cada observação em um conjunto de dados.
  • Tenha em mente que a Distância de Cook é simplesmente uma forma de identificar pontos de influência.
  • Há muitas maneiras de lidar com pontos influentes, incluindo: remover esses pontos, substituí-los por um valor como a média ou mediana, ou simplesmente manter os pontos no modelo, mas anotá-los cuidadosamente ao relatar a regressão dos resultados.

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *