J'ai de petits ensembles de données de taille 40-50 points. Sans supposer que les données sont normalement distribuées, j'ai voulu découvrir les valeurs aberrantes avec une confiance de 90% au moins. Je pensais que le boxplot pourrait être un bon moyen de le faire, mais je ne suis pas sûr.
Toute aide appréciée.
De plus, avec les implémentations boxplot, je n'ai pas pu trouver une implémentation qui en plus de dessiner l'intrigue crache explicitement les valeurs aberrantes.
Réponses:
C'est parce qu'un tel algorithme ne peut pas exister. Vous avez besoin d'une distribution supposée afin de pouvoir classer quelque chose comme étant en dehors de la plage de valeurs attendues.
Même si vous supposez une distribution normale, déclarer des points de données comme des valeurs aberrantes est une entreprise difficile. En général, vous avez non seulement besoin d'une bonne estimation de la vraie distribution, qui n'est souvent pas disponible, mais aussi d'une bonne raison théoriquement appuyée pour prendre votre décision (c'est-à-dire que le sujet a cassé la configuration expérimentale d'une manière ou d'une autre). Un tel jugement est généralement impossible à codifier dans un algorithme.
la source
Cela ne répond pas directement à votre question, mais vous pouvez apprendre quelque chose en regardant l'
outliers
ensemble de données dans leTeachingDemos
package pour R et en travaillant à travers les exemples de la page d'aide. Cela peut vous permettre de mieux comprendre certains des problèmes liés à la détection automatique des valeurs aberrantes.la source
R crachera les valeurs aberrantes comme dans
qui dessinera le boxplot et donnera
la source
2*(1-pnorm(4*qnorm(.75)))
, qui renvoie[1] 0.006976603
, la valeur que vous signalez ci-dessus, mais ensuite je simule comme suit:Set.seed(1); out = c();
for(i in 1:100)
x = rnorm(50)
y = boxplot(x, plot=F)
out[i] = length(y$out)>=1}
sum(out)/100
qui retourne[1] 0.3
. C'est-à-dire, 30% des échantillons w /set.seed(1); out = c(); for(i in 1:100) {x = rnorm(500); y = boxplot(x, plot=F); out[i] = length(y$out)}; sum(out)/50000
donne0.00738
ce qui est plus proche de ce que je décrivaisComme d'autres l'ont dit, vous avez mal posé la question en termes de confiance. Il y a des tests statistiques pour les valeurs aberrantes comme le test de Grubbs et le test de ratio de Dixon que j'ai mentionnés dans un autre post. Ils supposent que la distribution de la population est normale bien que le test de Dixon soit robuste à l'hypothèse de normalité dans de petits échantillons. Un boxplot est un bon moyen informel de repérer les valeurs aberrantes dans vos données. Habituellement, les moustaches sont fixées au 5e et au 95e centile et les observations tracées au-delà des moustaches sont généralement considérées comme des valeurs aberrantes possibles. Cependant, cela n'implique pas de tests statistiques formels.
la source