La respuesta depende de lo que se entienda por "valor atípico" y del motivo por el que se quiera identificar los valores atípicos.
En R, genero una muestra aleatoria x
de tamaño 50 de un exponencial con media 1. La media 1,11 de la muestra no es una mala estimación de la media de la población.
set.seed(2020)
x = rexp(50)
mean(x)
[1] 1.117136
En R, boxplot.stats
con $out
lista los valores atípicos. Así que aquí están los valores atípicos del boxplot en x
:
boxplot.stats(x)$out
[1] 5.867519 4.572054 5.645287 3.238821
Decido eliminar los valores atípicos en x
haciendo que el nuevo conjunto de datos x1
:
x1 = x[x < min(boxplot.stats(x)$out)]
La media de la muestra truncada no es una estimación tan buena de la media de la población.
mean(x1)
[1] 0.794198
Pero, ¡espera! Hay más. El conjunto de datos truncado tiene un boxplot propio. ¿Dónde quiere terminar este proceso? En algún sentido que te importe, ¿es 2,6436 también un valor atípico?
boxplot.stats(x1)$out
[1] 2.643577
Boxplots de las muestras originales (izquierda) y truncadas.
Nota: Utilizando R, he simulado $100\,000$ muestras de tamaño $n=50$ de una distribución exponencial con $\mu = \sigma = 1.$ Todos menos 977 tenían valores atípicos en el boxplot.
En las muestras originales, las medias de las muestras eran de media 1,001 y las DE de las muestras eran de media 0,991. Cuando se eliminaron los valores atípicos de los boxplots (casi 5 por muestra de media), las medias de las muestras alcanzaron una media de 0,849 y las DE de las muestras una media de 0,713. El programa R para la simulación se muestra a continuación.
set.seed(1234)
m = 10^5; n = 100
a = s = a1 = s1 = n1 = numeric(m)
for(i in 1:m){
x=rexp(n); a[i]=mean(x); s[i]=sd(x)
x1 = x[x <= boxplot.stats(x)$stats[5]]
n1[i] = length(x1)
if(length(x1)==n){a1[i]=a[i];s1[i]=s[i]
} else {a1[i] = mean(x1); s1[i] = sd(x1)}
}
mean(a); mean(s)
[1] 1.000513
[1] 0.990878
mean(n1); sum(n1==n)
[1] 95.1565
[1] 977
mean(a1); mean(s1)
[1] 0.848945
[1] 0.7130943