Tengo algunos datos multivariados de belleza frente a edades. Las edades van de 20 a 40 a intervalos de 2 (20, 22, 24 ... 40), y para cada registro de datos, se les asigna una edad y una calificación de belleza de 1 a 5. Cuando hago diagramas de caja de estos datos (edades en el eje X, calificaciones de belleza en el eje Y), hay algunos valores atípicos trazados fuera de los bigotes de cada caja.
Quiero eliminar estos valores atípicos del marco de datos en sí, pero no estoy seguro de cómo R calcula los valores atípicos para sus diagramas de caja. A continuación se muestra un ejemplo de cómo podrían verse mis datos.
r
statistics
outliers
Dan Q
fuente
fuente
boxplot
función devuelve los valores atípicos (entre otras estadísticas) de forma invisible. Intentefoo <- boxplot(...); foo
leer?boxplot
para comprender el resultado.Respuestas:
Bien, deberías aplicar algo como esto a tu conjunto de datos. ¡No reemplace ni guarde o destruirá sus datos! Y, por cierto, (casi) nunca debe eliminar los valores atípicos de sus datos:
Para verlo en acción:
Y una vez más, nunca debe hacer esto por su cuenta, ¡los valores atípicos están destinados a ser! =)
EDITAR: agregué
na.rm = TRUE
por defecto.EDIT2:
quantile
función eliminada , subíndice agregado, ¡por lo tanto, hizo que la función sea más rápida! =)fuente
boxplot
. Eso es manejable, y debe marcar la respuesta de @ Prasad entonces, ya que respondió a su pregunta. Si desea excluir valores atípicos mediante el uso de una "regla de valores atípicos"q +/- (1.5 * H)
, ejecute un análisis y utilice esta función. Por cierto, hice esto desde cero, sin buscar en Google, así que existe la posibilidad de que haya reinventado la rueda con esta función mía ...Nadie ha publicado la respuesta más simple:
Vea también esto: http://www.r-statistics.com/2011/01/how-to-label-all-the-outliers-in-a-boxplot/
fuente
result = x[!x %in% boxplot.stats(x)$out]
Úselo
outline = FALSE
como una opción cuando haga el diagrama de caja (¡lea la ayuda!)fuente
out
ygroup
en la lista).La función de diagrama de caja devuelve los valores utilizados para realizar el trazado (que en realidad se realiza mediante bxp ():
A propósito, no respondí a la pregunta específica porque considero que eliminar los "valores atípicos" es una mala práctica estadística. Considero que es una práctica aceptable no trazarlos en un diagrama de caja, pero eliminarlos solo porque exceden cierto número de desviaciones estándar o cierto número de anchos intercuartiles es una alteración sistemática y poco científica del registro de observación.
fuente
Busqué paquetes relacionados con la eliminación de valores atípicos y encontré este paquete (¡sorprendentemente llamado "outliers"!): Https://cran.r-project.org/web/packages/outliers/outliers.pdf
si lo revisa, vea diferentes formas de eliminar valores atípicos y entre ellos encontré la
rm.outlier
más conveniente de usar y, como dice en el enlace anterior: "Si el valor atípico se detecta y confirma mediante pruebas estadísticas, esta función puede eliminarlo o reemplazarlo por la media o mediana de la muestra" y también aquí está la parte de uso de la misma fuente:" Uso
Argumentos
x un conjunto de datos, con mayor frecuencia un vector. Si el argumento es un marco de datos, sapply elimina los valores atípicos de cada columna. El mismo comportamiento se aplica aplicando cuando se da la matriz.
llenar Si se establece en VERDADERO, la mediana o media se coloca en lugar de un valor atípico. De lo contrario, los valores atípicos simplemente se eliminan.
mediana Si se establece en VERDADERO, se usa la mediana en lugar de la media en el reemplazo de valores atípicos. opuesto si se establece en VERDADERO, da el valor opuesto (si el valor más grande tiene la diferencia máxima de la media, da el más pequeño y viceversa) "
fuente
Encuentro esto muy fácil de eliminar los valores atípicos. En el ejemplo anterior, solo estoy extrayendo del percentil 2 al percentil 98 de los valores de los atributos.
fuente
No lo haría:
realizar esta tarea con bastante facilidad?
fuente
Agregando a la sugerencia de @sefarkas y usando cuantil como puntos de corte, se podría explorar la siguiente opción:
Esto eliminará los puntos más allá del cuantil 99. Se debe tener cuidado como lo que decía aL3Xa acerca de mantener valores atípicos. Debe eliminarse solo para obtener una vista conservadora alternativa de los datos.
fuente
0.91
o0.99
? como enmydata$var < quantile(mydata$var, probs=c(.01, .91))[1])
omydata$var < quantile(mydata$var, probs=c(.01, .99))[1])
1 forma de hacerlo es
o
fuente
Los valores atípicos son bastante similares a los picos, por lo que un detector de picos puede ser útil para identificar valores atípicos. El método descrito aquí tiene un rendimiento bastante bueno usando puntuaciones z. La animación en la parte inferior de la página ilustra el método que señala valores atípicos o picos.
Los picos no siempre son los mismos que los valores atípicos, pero son similares con frecuencia.
A continuación se muestra un ejemplo: este conjunto de datos se lee desde un sensor a través de comunicaciones en serie. Los errores ocasionales de comunicación en serie, errores del sensor o ambos conducen a puntos de datos repetidos y claramente erróneos. No hay valor estadístico en estos puntos. Podría decirse que no son valores atípicos, son errores. El detector de picos de puntuación z pudo señalar en puntos de datos falsos y generó un conjunto de datos resultante limpio:
fuente
Prueba esto. Alimente su variable en la función y guarde el o / p en la variable que contendría valores atípicos eliminados
fuente