ver univariate test sacar outliertest multivariate grubbs detectar como r statistics outliers

test - univariate outliers in r



Cómo eliminar valores atípicos de un conjunto de datos (8)

Tengo algunos datos multivariantes de belleza vs. edades. Las edades van desde 20-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-5. Cuando hago diagramas de caja de estos datos (edades en todo el eje X, clasificaciones de belleza en el eje Y), hay algunos valores atípicos trazados fuera de los bigotes de cada casilla.

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 se verían mis datos.


Añadiendo a la sugerencia de @sefarkas y usando quantile como puntos de corte, se podría explorar la siguiente opción:

newdata <- subset(mydata,!(mydata$var > quantile(mydata$var, probs=c(.01, .99))[2] | mydata$var < quantile(mydata$var, probs=c(.01, .99))[1]) )

Esto eliminará los puntos de puntos más allá del 99. ° cuantil. Se debe tener cuidado como lo que aL3Xa estaba diciendo acerca de mantener valores atípicos. Debe eliminarse solo para obtener una vista alternativa conservadora de los datos.


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 rm.outlier verás diferentes maneras de eliminar los valores atípicos y entre ellos encontré el más conveniente para usar y como dice en el enlace de arriba: "Si el valor atípico es detectado y confirmado por pruebas estadísticas, esta función puede eliminar o reemplazar por medio o mediana de muestra "y también aquí está la parte de uso de la misma fuente:
" Uso

rm.outlier(x, fill = FALSE, median = FALSE, opposite = FALSE)

Argumentos
x un conjunto de datos, con mayor frecuencia un vector. Si el argumento es un marco de datos, se elimina el valor atípico de cada columna de forma sapitada. El mismo comportamiento se aplica cuando se aplica la matriz.
fill Si se establece en TRUE, la mediana o la media se coloca en lugar de valores atípicos. 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 valor opuesto (si el valor más grande tiene la diferencia máxima de la media, da el más pequeño y viceversa) "


De acuerdo, debe aplicar algo como esto a su conjunto de datos. ¡No reemplace y guarde, o destruirá sus datos! Y, por cierto, usted debe (casi) nunca eliminar valores atípicos de sus datos:

remove_outliers <- function(x, na.rm = TRUE, ...) { qnt <- quantile(x, probs=c(.25, .75), na.rm = na.rm, ...) H <- 1.5 * IQR(x, na.rm = na.rm) y <- x y[x < (qnt[1] - H)] <- NA y[x > (qnt[2] + H)] <- NA y }

Para verlo en acción:

set.seed(1) x <- rnorm(100) x <- c(-10, x, 10) y <- remove_outliers(x) ## png() par(mfrow = c(1, 2)) boxplot(x) boxplot(y) ## dev.off()

¡Y una vez más, nunca debes hacer esto por tu cuenta, los outliers están destinados a ser! =)

EDITAR: na.rm = TRUE por defecto.

EDIT2: eliminó la función de quantile , agregó la subscripción, por lo tanto hizo la función más rápida! =)


La función de diagrama de caja devuelve los valores utilizados para hacer el trazado (que en realidad realiza bxp ():

bstats <- boxplot(count ~ spray, data = InsectSprays, col = "lightgray") #need to "waste" this plot bstats$out <- NULL bstats$group <- NULL bxp(bstats) # this will plot without any outlier points

A propósito no contesté la pregunta específica porque considero que es una mala práctica estadística eliminar los "valores atípicos". Considero que es una práctica aceptable no trazarlos en un diagrama de caja, pero eliminarlos es una alteración sistemática e injustificada del registro de observación.



No lo haría:

z <- df[df$x > quantile(df$x, .25) - 1.5*IQR(df$x) & df$x < quantile(df$x, .75) + 1.5*IQR(df$x)]

lograr esta tarea con bastante facilidad?


Utilice outline = FALSE como una opción cuando haga el diagrama de caja (¡lea la ayuda!).

> m <- c(rnorm(10),5,10) > bp <- boxplot(m, outline = FALSE)


x<-quantile(retentiondata$sum_dec_incr,c(0.01,0.99)) data_clean <- data[data$attribute >=x[1] & data$attribute<=x[2],]

Encuentro esto muy fácil de eliminar valores atípicos. En el ejemplo anterior, estoy extrayendo 2 percentiles a 98 percentiles de valores de atributos.