Como remover outliers em r


Um outlier é uma observação anormalmente distante de outros valores em um conjunto de dados. Valores discrepantes podem ser problemáticos porque podem afetar os resultados de uma análise.

Este tutorial explica como identificar e remover outliers em R.

Como identificar outliers em R

Antes de remover valores discrepantes, você deve primeiro decidir o que considera ser um valor discrepante. Existem duas maneiras comuns de fazer isso:

1. Use o intervalo interquartil.

O intervalo interquartil (IQR) é a diferença entre o percentil 75 (Q3) e o percentil 25 (Q1) em um conjunto de dados. Mede a distribuição da média de 50% dos valores.

Você pode definir uma observação como discrepante se ela for 1,5 vezes o intervalo interquartil acima do terceiro quartil (Q3) ou 1,5 vezes o intervalo interquartil abaixo do primeiro quartil (Q1).

Outliers = Observações > Q3 + 1,5*IQR ou < Q1 – 1,5*IQR

2. Use pontuações z.

Uma pontuação z informa quantos desvios padrão um determinado valor está da média. Usamos a seguinte fórmula para calcular uma pontuação z:

z = (X – μ) / σ

Ouro:

  • X é um único valor de dados brutos
  • μ é a média da população
  • σ é o desvio padrão da população

Você pode definir uma observação como discrepante se sua pontuação z for menor que -3 ou maior que 3.

Outliers = Observações com pontuações z > 3 ou < -3

Como remover outliers em R

Depois de decidir o que você considera discrepante, você pode identificá-los e removê-los de um conjunto de dados. Para ilustrar como fazer isso, usaremos o seguinte quadro de dados:

 #make this example reproducible 
set.seed(0)

#create data frame with three columns A', 'B', 'C' 
df <- data.frame(A=rnorm(1000, mean=10, sd=3),
                 B=rnorm(1000, mean=20, sd=3),
                 C=rnorm(1000, mean=30, sd=3))

#view first six rows of data frame
head(df)
         ABC
1 13.78886 19.13945 31.33304
2 9.02130 25.52332 30.03579
3 13.98940 19.52971 29.97216
4 13.81729 15.83059 29.09287
5 11.24392 15.58069 31.47707
6 5.38015 19.79144 28.19184

Podemos então definir e remover valores discrepantes usando o método z-score ou o método do intervalo interquartil:

Método de pontuação Z:

O código a seguir mostra como calcular a pontuação z de cada valor em cada coluna do quadro de dados e, em seguida, remover as linhas que possuem pelo menos uma pontuação z com valor absoluto maior que 3:

 #find absolute value of z-score for each value in each column
z_scores <- as.data.frame (sapply(df, function(df) (abs(df-mean(df))/sd(df))))

#view first six rows of z_scores data frame
head(z_scores)

          ABC
1 1.2813403 0.25350805 0.39419878
2 0.3110243 1.80496734 0.05890232
3 1.3483190 0.12766847 0.08112630
4 1.2908343 1.32044506 0.38824414
5 0.4313316 1.40102642 0.44450451
6 1.5271674 0.04327186 0.70295309

#only keep rows in dataframe with all z-scores less than absolute value of 3 
no_outliers <- z_scores[!rowSums(z_scores>3), ]

#view row and column count of new data frame
dim(no_outliers)

[1] 994 3

O quadro de dados original tinha 1.000 linhas e 3 colunas. O novo quadro de dados possui 994 linhas e 3 colunas, o que nos indica que 6 linhas foram removidas porque tinham pelo menos um escore z com valor absoluto maior que 3 em uma de suas colunas.

Método de intervalo interquartil:

Em alguns casos, podemos querer identificar apenas valores discrepantes em uma coluna de um quadro de dados. Por exemplo, digamos que queremos apenas remover linhas com valores discrepantes na coluna “A” do nosso quadro de dados.

O código a seguir mostra como remover linhas do quadro de dados cujo valor na coluna “A” é 1,5 vezes o intervalo interquartil acima do terceiro quartil (Q3) ou 1,5 vezes o intervalo interquartil abaixo do primeiro quartil (Q1). .

 #find Q1, Q3, and interquartile range for values in column A
Q1 <- quantile(df$A, .25)
Q3 <- quantile(df$A, .75)
IQR <- IQR(df$A)

#only keep rows in dataframe that have values within 1.5*IQR of Q1 and Q3
no_outliers <- subset(df, df$A> (Q1 - 1.5*IQR) & df$A< (Q3 + 1.5*IQR))

#view row and column count of new data frame
dim(no_outliers) 

[1] 994 3

O quadro de dados original tinha 1.000 linhas e 3 colunas. O novo quadro de dados tem 994 linhas e 3 colunas, o que nos indica que 6 linhas foram removidas porque continham pelo menos um valor discrepante na coluna A.

Quando remover valores discrepantes

Se um ou mais valores discrepantes estiverem presentes, você deverá primeiro verificar se eles não são resultado de um erro de entrada de dados. Às vezes, um indivíduo simplesmente insere o valor errado dos dados ao salvar os dados.

Se o valor discrepante for o resultado de um erro de entrada de dados, você pode decidir atribuir a ele um novo valor, como a média ou mediana do conjunto de dados.

Se o valor for realmente atípico, você poderá optar por removê-lo se ele tiver um impacto significativo em sua análise geral. Apenas certifique-se de mencionar em seu relatório ou análise final que você removeu um valor discrepante.

Recursos adicionais

Neste tutorial, usamos rnorm() para gerar vetores de variáveis aleatórias normalmente distribuídas, dado um comprimento de vetor n , uma média populacional μ e um desvio padrão populacional σ . Você pode aprender mais sobre esse recurso aqui .

Também usamos sapply() para aplicar uma função a cada coluna em um quadro de dados que calculava pontuações z. Você pode aprender mais sobre esse recurso aqui .

Add a Comment

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