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!
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)
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 !