Podemos usar um desvio médio e desvio padrão para revelar os valores extremos?

17

Suponha que eu tenha distribuído dados normalmente. Para cada elemento dos dados, quero verificar quantos SDs estão longe da média. Pode haver um erro nos dados (provavelmente apenas um, mas também pode haver dois ou três) ou não, mas esse erro é basicamente o que estou procurando. Faz sentido excluir temporariamente o elemento que estou vendo atualmente do cálculo da média e do DP? Meu pensamento é que, se estiver próximo da média, não terá nenhum impacto. Se for um erro externo, pode influenciar o cálculo da média e do desvio padrão e diminuir a probabilidade de detecção. Eu não sou estatístico, então qualquer ajuda é apreciada!

Oliver
fonte
7
Faz todo o sentido e é a base de muitas técnicas de detecção de outlier. Mas, em vez de inventar seu próprio método, que pode ou não funcionar (e este último é muito mais provável, mesmo com métodos recentemente inventados por estatísticos, e é por isso que eles precisam de um estudo cuidadoso), por que você não usa um que tenha sido teoricamente verificado e empiricamente testado?
whuber
Obrigado por apontar isso. Vou procurar essas técnicas e ver se elas têm um bom desempenho nos meus dados!
Oliver
1
Confira esta página em regressão de exclusão Diagnostics em R: stat.ethz.ch/R-manual/R-patched/library/stats/html/...
Ben Ogórek
.... E esta resposta para ilustrar por que eles não podem depender de encontrar mais do que um único desvio.
user603
Excelentes pensamentos acima sobre a idéia de sinalizar outliers. Algum tempo atrás, eu havia escrito um artigo sobre a idéia de filtros de perda-passagem na identificação de anomalias. Espero que isso ajude a estender a ideia apresentada acima. Link para o artigo: datascience.com/blog/python-anomaly-detection
Pramit

Respostas:

25

Pode parecer contra-intuitivo, mas usar a abordagem que você descreve não faz sentido (para sua redação, prefiro escrever "pode ​​levar a resultados muito diferentes dos pretendidos") e nunca se deve fazê-lo: os riscos de isso não funciona é conseqüente e, além disso, existe uma alternativa mais simples, muito mais segura e melhor estabelecida, disponível sem nenhum custo extra.

Primeiro, é verdade que, se houver um único erro, você poderá encontrá-lo usando o procedimento sugerido. Mas, em geral (quando pode haver mais do que um único erro externo nos dados), o algoritmo que você sugere quebra completamente, no sentido de potencialmente fazer com que você rejeite um bom ponto de dados como um erro ou mantenha os valores como bons pontos de dados. com conseqüências potencialmente catastróficas.

Abaixo, dou um exemplo numérico simples em que a regra que você propõe quebra e, em seguida, proponho uma alternativa muito mais segura e estabelecida, mas, antes disso, explicarei a) o que há de errado com o método proposto e b) o que geralmente é preferido alternativa a isso é.

Em essência, você não pode usar a distância de uma observação do desvio médio e desvio padrão de seus dados para detectar valores discrepantes de maneira confiável, porque as estimativas que você usa (deixe um desvio médio e desvio padrão) ainda podem ser puxadas para o restante outliers: isso é chamado de efeito de mascaramento.

Em poucas palavras, uma maneira simples de detectar de maneira confiável os valores discrepantes é usar a ideia geral que você sugeriu (distância da estimativa de localização e escala), mas substituir os estimadores que você usou (deixe um valor médio, sd) por outros robustos - ou seja, estimativas projetado para ser muito menos suscetível a ser influenciado por discrepantes.

Considere este exemplo, onde adiciono 3 valores extremos a 47 observações genuínas extraídas de um 0,1 normal:

n    <- 50
set.seed(123)  # for reproducibility
x    <- round(rnorm(n,0,1), 1)
x[1] <- x[1]+1000
x[2] <- x[2]+10
x[3] <- x[3]+10

O código abaixo calcula o índice de periferia com base na média e desvio padrão omitidos (por exemplo, a abordagem sugerida).

out_1 <- rep(NA,n)
for(i in 1:n){  out_1[i] <- abs( x[i]-mean(x[-i]) )/sd(x[-i])  }

e esse código produz o gráfico que você vê abaixo.

plot(x, out_1, ylim=c(0,1), xlim=c(-3,20))
points(x[1:3], out_1[1:3], col="red", pch=16)

A Figura 1 mostra o valor do seu índice de periferia em função do valor das observações (a maior distância dos valores extremos está fora do intervalo desse gráfico, mas os outros dois são mostrados como pontos vermelhos). Como você pode ver, exceto o mais extremo, um índice de periferia construído como você sugere não revelaria os valores extremos: de fato, o segundo e o terceiro (mais brandos) valores extremos agora têm um valor (no seu índice de periferia) menor que todos o genuíno observações! ... Sob a abordagem que você sugere, manteríamos esses dois valores extremos extremos no conjunto de observações genuínas, levando-o a usar as 49 observações restantes como se elas viessem do mesmo processo homogêneo, fornecendo uma estimativa final de a média e o dp com base nesses 49 pontos de dados de 0,45 e 2,32, uma descrição muito ruim de qualquer parte da sua amostra!

image2

xEuX

O(xEu,X)=|xEu-med(X)|louco(X)

med(X)Xlouco(X)

Em R, este segundo índice de periferia pode ser calculado como:

out_2 <- abs( x-median(x) )/mad(x)

e plotados (como antes) usando:

plot(x, out_2, ylim=c(0,15), xlim=c(-3,20))
points(x[1:3], out_2[1:3], col="red", pch=16)

image2

A Figura 2 plota o valor desse índice de periferia alternativo para o mesmo conjunto de dados. Como você pode ver, agora todos os três discrepantes são claramente revelados como tal. Além disso, essa regra de detecção de outlier possui algumas propriedades estatísticas estabelecidas. Isso leva, entre outras coisas, a regras de corte utilizáveis. Por exemplo, se for possível supor que a parte genuína dos dados seja extraída de uma distribuição simétrica com um segundo momento finito, você poderá rejeitar todos os pontos de dados para os quais

|xEu-med(X)|louco(X)>3.5

como outliers. No exemplo acima, a aplicação desta regra levaria você a sinalizar corretamente as observações 1,2 e 3. Rejeitando-as, a média e o sd das observações restantes são 0,021 e 0,93 receptivamente, uma descrição muito melhor da parte genuína da amostra !

user603
fonte
2
+1, apesar da primeira frase, que você contradiz imediatamente (a proposta do OP faz sentido quando no máximo um erro é considerado; sua objeção se refere a problemas com esse procedimento quando esse pressuposto é violado).
whuber
1
Obrigado. Enquanto isso, excluí meu comentário anterior, antecipando que ele se tornará obsoleto após as edições.
whuber
3
O fenômeno em que vários discrepantes tornam a detecção única de discrepante cega para qualquer um deles é freqüentemente chamada de mascaramento . Isso pode ajudar as pessoas a localizar mais informações relacionadas ao problema.
Glen_b -Reinstala Monica
1
@ user603 Bom trabalho criando um cenário ilustrativo, mas acho que você está jogando fora o bebê com a água do banho. Os diagnósticos de exclusão de regressão não são perfeitos, mas são amplamente aplicáveis ​​e resistiram ao teste do tempo. Aceitar a mediana é bom, mas eu me pergunto como você estenderia sua abordagem a modelos baseados em probabilidade mais complexos.
Ben Ogorek 23/10
2
+6, Esta é uma ótima resposta - explicada de forma clara e completa, ilustrada com código, figuras e fórmulas. Ajustei ligeiramente a formatação do código para facilitar a leitura. Se você não gostar, reverta-o com minhas desculpas.
gung - Restabelece Monica