Vamos a ver un ejemplo con la siguiente base de datos (CEREALES) que contiene datos sobre la composición de diferentes variedades de cereales:
Las variables miden la composición de MANGANESO, CALORIAS, FIBRA, SELENIO y FOSFORO siendo variables medidas en escala continua que toman valores positivos y la variabe CEREAL que es una variable que mide el tipo de cereal.
Importa la base de datos y mira si hay posibles errores e incongruencias o hay que cambiar algún tipo de variable para ello piensa primero en el tipo de variable.
Después realiza un estudio para ver si hay datos atípicos, puedes seguir los siguientes pasos:
Estudia de forma univariada los datos atípicos mediante un boxplot y la obtención de los outliers y extremos.
Estudia de forma bivariada si son realmente atípicos considerando que 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.
Usa las funciones propias outliers(), extreme(), eliminar_outliers() y eliminar_extreme() y presta atención a los porcentajes que representan los outliers en la muestra. Justifica por qué quitas o no los datos atípicos.
Estudia los outliers de forma multivariante.
Detecta si hay datos duplicados.
Lectura y comprobación de errores y declaración de varaibles
Estudio Univariante y Bivariante de los datos atípicos
boxplot(datos)###Solo MANGANESO, SELENIO y FIBRA tienen datos outliers###MANGANESOboxplot(datos$MANGANESO,main="MANGANESO")boxplot(datos$MANGANESO~datos$VARIEDAD,main="MANGANESO~VARIEDAD")##Los outliers por abajo corresponden a la cebada por tanto no los consideramos outliers, ##De los de arriba, vamos a ver si son extremos.##Los valores extremos son:extreme_values <-boxplot.stats(datos$MANGANESO,coef=3)$out # extreme values.extreme_valuesext_ind <-which(datos$MANGANESO %in%c(extreme_values))##Si son extremos. ##Con las funciones vamos a ver cual es el porcentaje de outliers y como se quedan tras la eliminaiónsource("Outliers.R")extreme("datos$MANGANESO")eliminar_extreme("datos$MANGANESO")###FIBRAboxplot(datos$FIBRA,main="FIBRA")boxplot(datos$FIBRA~datos$VARIEDAD,main="FIBRA~VARIEDAD")##La variable FIBRA produce outliers pero no extremos, y además son un 8% de la muestra.##Al representarla por vairedad ya dejan de ser outliers porque pertenecen a la cebada##Por tanto, no vamos a hacer nada con ellos###SELENIO boxplot(datos$SELENIO,main="SELENIO")boxplot(datos$SELENIO~datos$VARIEDAD,main="SELENIO~VARIEDAD")###Los valores atípicos son:outlier_values <-boxplot.stats(datos$SELENIO)$out # outlier values.outlier_valuesout_ind <-which(datos$SELENIO %in%c(outlier_values))###Los valores extremos son:extreme_values <-boxplot.stats(datos$SELENIO,coef=3)$out # extreme values.extreme_valuesext_ind <-which(datos$SELENIO %in%c(extreme_values))##En este caso hay 3 outliers y 2 de ellos son extremos y no hay asociación con el tipo de cerealoutliers("datos$SELENIO")extreme("datos$SELENIO")##Si parece que los 3 outliers podrían ser outliers, en este caso vamos a eliminar los 3.eliminar_outliers("datos$SELENIO")
Estudio Multivariante
library(dbscan)library(class)library(ggplot2)##Si ejecutamos un LOF con datos missing, no nos deja por tanto hay que leer los datos de nuevolof_resultados<-lof(datos[,c(2,3,4,5,6)])lof_resultados[lof_resultados>1.5]datos[lof_resultados>1.5,]# Gráfico de dispersión con colores según las puntuaciones LOFggplot(datos, aes(x = MANGANESO, y = SELENIO, colour = lof_resultados))+geom_point()+scale_color_gradient(low ="blue", high ="red", name ="LOF Score")ggplot(datos, aes(x = SELENIO, y = FIBRA, colour = lof_resultados))+geom_point()+scale_color_gradient(low ="blue", high ="red", name ="LOF Score")