Detectando outliers em dados de contagem


21

Eu tenho o que eu ingenuamente pensei ser um problema bastante direto que envolve a detecção de valores extremos para muitos conjuntos diferentes de dados de contagem. Especificamente, quero determinar se um ou mais valores em uma série de dados de contagem são maiores ou menores que o esperado em relação ao restante das contagens na distribuição.

O fator de confusão é que eu preciso fazer isso para 3.500 distribuições e é provável que algumas delas se encaixem em um poisson superdisperso inflado com zero, enquanto outras podem se encaixar melhor em um binômio negativo ou ZINB, enquanto outras ainda podem ser normalmente distribuídas. Por esse motivo, pontuações Z simples ou plotagem da distribuição não são apropriadas para grande parte do conjunto de dados. Aqui está um exemplo dos dados de contagem para os quais desejo detectar valores discrepantes.

counts1=[1 1 1 0 2 1 1 0 0 1 1 1 1 1 0 0 0 0 1 2 1 1 2 1 1 1 1 0 0 1 0 1 1 1 1 0 
         0 0 0 0 1 2 1 1 1 1 1 1 0 1 1 2 0 0 0 1 0 1 2 1 1 0 2 1 1 1 0 0 1 0 0 0 
         2 0 1 1 0 2 1 0 1 1 0 0 2 1 0 1 1 1 1 2 0 3]
counts2=[0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 
         0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
         0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 
         1 1 0 0 0]
counts3=[14 13 14 14 14 14 13 14 14 14 14 14 15 14 14 14 14 14 14 15 14 13 14 14 
         15 12 13 17 13 14 14 14 14 15 14 14 13 14 13 14 14 14 14 13 14 14 14 15 
         15 14 14 14 14 14 15 14 1414 14 15 14 14 14 14 14 14 14 14 14 14 14 14 13 16]
counts4=[0 3 1.......]
and so on up to counts3500.

Inicialmente, pensei que precisaria escrever um loop em Python ou R que aplicasse um conjunto de modelos a cada distribuição e selecionasse o melhor modelo de acordo com a AIC ou outra (talvez o fitdistrplus em R?). Eu poderia então perguntar o que eram extremos para a distribuição dada (as contagens que caem nas caudas, por exemplo, uma contagem de "4" seria um desvio na distribuição de contagens1 acima?). No entanto, não tenho certeza se essa é uma estratégia válida e me ocorreu que pode haver uma metodologia simples para determinar discrepâncias nos dados de contagem dos quais eu não estava ciente. Eu pesquisei bastante e não encontrei nada que pareça apropriado para o meu problema, dado o número de distribuições que quero examinar.

Meu objetivo final é detectar aumentos ou diminuições significativas em uma contagem para cada distribuição de contagens, usando a metodologia mais estatisticamente apropriada.

Respostas:


23

Você não pode usar a distância de uma observação a partir de um ajuste clássico de seus dados para detectar valores discrepantes de maneira confiável, porque o procedimento de ajuste usado é propenso a ser puxado em direção aos valores discrepantes (isso é chamado de efeito de mascaramento). Uma maneira simples de detectar de maneira confiável os outliers é usar a ideia geral que você sugeriu (distância do ajuste), mas substituir os estimadores clássicos por estimadores clássicos por robustos e muito menos suscetíveis de serem influenciados por outliers. A seguir, apresento uma ilustração geral da idéia e, em seguida, discuto a solução para o seu problema específico.

N(0 0,1)

x<-c(-2.21,-1.84,-.95,-.91,-.36,-.19,-.11,-.1,.18,
.3,.31,.43,.51,.64,.67,.72,1.22,1.35,8.1,17.6)

(os dois últimos realmente deveriam ser 0,81 e 1,76, mas foram acidentalmente mal digitados).

Usando uma regra de detecção de outlier baseada na comparação da estatística

|xEu-ave(xEu)|SD(xEu)

SDSD

Você já usou uma estatística robusta:

|xEu-med(xEu)|louco(xEu)

zSD

(no interesse da perfeição, devo salientar que algumas pessoas, mesmo nesta idade e nos dias de hoje, preferem se apegar à estimativa bruta - sem limites - de 4,35, em vez de usar a estimativa mais precisa baseada no corte, mas isso é ininteligível para mim )

Para outras distribuições, a situação não é tão diferente, apenas que você terá que pré-transformar seus dados primeiro. Por exemplo, no seu caso:

X

Y=2X

Y>med(Y)+3

X

YN(med(Y),1)

λ

λλ=3

p

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.