Détection des valeurs aberrantes dans les données de comptage

21

J'ai ce que je pensais naïvement être un problème assez simple qui implique la détection de valeurs aberrantes pour de nombreux ensembles différents de données de comptage. Plus précisément, je veux déterminer si une ou plusieurs valeurs dans une série de données de comptage sont supérieures ou inférieures aux attentes par rapport au reste des dénombrements dans la distribution.

Le facteur de confusion est que je dois le faire pour 3500 distributions et il est probable que certaines d'entre elles correspondent à un poisson surdispersé gonflé zéro, tandis que d'autres peuvent mieux s'adapter à un binôme négatif ou ZINB, tandis que d'autres peuvent être normalement distribuées. Pour cette raison, les scores Z simples ou le tracé de la distribution ne conviennent pas à la plupart des ensembles de données. Voici un exemple des données de comptage pour lesquelles je souhaite détecter des valeurs aberrantes.

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.

Au début, je pensais que j'aurais besoin d'écrire une boucle en Python ou R qui appliquerait un ensemble de modèles à chaque distribution et sélectionnerait le modèle le mieux adapté selon AIC ou autre (peut-être le fitdistrplus dans R?). Je pourrais alors demander quels étaient les extrêmes pour la distribution donnée (les comptes qui tombent dans les queues, par exemple un compte de "4" serait une valeur aberrante dans la distribution des comptes 1 ci-dessus?). Cependant, je ne suis pas sûr que ce soit une stratégie valable, et il m'est venu à l'esprit qu'il pourrait y avoir une méthodologie simple pour déterminer les valeurs aberrantes dans les données de comptage dont je n'étais pas au courant. J'ai cherché longuement et je n'ai rien trouvé qui semble approprié à mon problème étant donné le nombre de distributions que je veux regarder.

Mon but ultime est de détecter des augmentations ou des diminutions significatives d'un dénombrement pour chaque distribution de dénombrements, en utilisant la méthodologie la plus appropriée statistiquement.

Joe Gomphus
la source

Réponses:

23

Vous ne pouvez pas utiliser la distance d'une observation à partir d'un ajustement classique de vos données pour détecter de manière fiable les valeurs aberrantes car la procédure d'ajustement que vous utilisez est elle-même susceptible d'être tirée vers les valeurs aberrantes (c'est ce qu'on appelle l'effet de masquage). Une façon simple de détecter de manière fiable les valeurs aberrantes consiste à utiliser l'idée générale que vous avez suggérée (distance de l'ajustement), mais en remplaçant les estimateurs classiques par des estimateurs robustes beaucoup moins susceptibles d'être influencés par les valeurs aberrantes. Ci-dessous, je présente une illustration générale de l'idée, puis je discute de la solution à votre problème spécifique.

N(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)

(les deux derniers devraient être 0,81 et 1,76 mais ont été accidentellement mal tapés).

Utilisation d'une règle de détection des valeurs aberrantes basée sur la comparaison des statistiques

|Xje-ave(Xje)|Dakota du Sud(Xje)

Dakota du SudDakota du Sud

Si vous aviez utilisé une statistique robuste à la place:

|Xje-med(Xje)|furieux(Xje)

zDakota du Sud

(dans un souci d'exhaustivité, je dois souligner que certaines personnes, même à cet âge et ce jour, préfèrent s'accrocher à l'estimation brute - non rognée - de 4,35 plutôt que d'utiliser l'estimation plus précise basée sur le rognage, mais cela est inintelligible pour moi )

Pour les autres distributions, la situation n'est pas si différente, simplement que vous devrez d'abord pré-transformer vos données. Par exemple, dans votre cas:

X

Oui=2X

Oui>med(Oui)+3 (cette règle n'est pas symétrique et je serais très prudent quant à l'exclusion des observations de la `` queue '' gauche d'une variable de comptage selon un seuil basé sur des données. Les observations négatives, évidemment, devraient être assez sûres à supprimer)

Ceci est basé sur l'idée que si X

OuiN(med(Oui),1)

Cette approximation fonctionne assez bien pour les données distribuées de poisson lorsque λ

λλ=3

p

user603
la source