Page cover

Ejemplo de detección y tratamiento de atípicos y duplicados

Vamos a ver un ejemplo con la siguiente base de datos (CEREALES) que contiene datos sobre la composición de diferentes variedades de cereales:

Importamos la base de datos y miramos posibles errores e incongruencias

datos<-read.csv("CEREALES.csv")
str(datos)
summary(datos)

##Convertimos VARIEDAD en factor
datos$VARIEDAD<-factor(datos$VARIEDAD)
str(datos)
table(datos$VARIEDAD)

Primero haría un boxplot de todas las variables numéricas para ver si efectivamente hay datos atípicos y como son:

boxplot(datos)

Parece que en MANGANESO, FIBRA y SELENIO hay datos atípicos según el boxplot, pero seguramente estos datos atípicos me interese quitarlos o no según las relaciones que queramos buscar. En esta base de datos lo más seguro es que busquemos ver si hay diferencias de la composición entre las distintas variedades de cereal, así que que vamos a ver unos gráficos bivariados

Variable MANGANESO:

par(mfrow=c(1, 2))

boxplot(datos$MANGANESO,main="MANGANESO")

boxplot(datos$MANGANESO~datos$VARIEDAD,main="MANGANESO~VARIEDAD")
dev.off()



Los outliers que aparecían en el boxplot univariado, resulta que perteneces al cereal cebada que parece que tiene bajo contenido en manganeso. Lo que estamos viendo aquí en la variable MANGANESO no son datos atípicos sino una asociación estadística. Lo que si parece datos atípicos son los 3 que se van por arriba y esto además parece que son extremos, por tanto podríamos usar la definición de dato extremo para quitarlo:

##Primero lo comprobamos
extreme_values <- boxplot.stats(datos$MANGANESO,coef=3)$out  

ext_ind <- which(datos$MANGANESO %in% c(extreme_values))
extreme_values

##Después con la función propia outliers (con la definición de extremo) los borramos
outliers("datos$MANGANESO")

summary(datos$MANGANESO)