Pasos para la detección inicial de errores
Para este apartado vamos a utilizar el conjunto de datos "Wine Quality" utilizado en Cortez et al. (2009).
Las variables son las siguientes:
1. Leer los datos
Lo primero que haremos es leer los datos. Seguidamente verificamos que los tipos de variables se hayan asignado correctamente con str()
Copy #install.packages("readxl")
library(readxl)
datos<-read_excel("DatosVino.xlsx")
str(datos)
Copy tibble [6,365 × 16] (S3: tbl_df/tbl/data.frame)
$ ID : num [1:6365] 13606 3119 1190 5261 2871 ...
$ Beneficio : num [1:6365] 0 0 0 0 0 0 0 0 0 0 ...
$ Compra : num [1:6365] 0 0 0 0 0 0 0 0 0 0 ...
$ Acidez : num [1:6365] 0.39 2.19 1.44 0.5 -0.1 1.26 0.85 0.34 0.46 -0.555 ...
$ AcidoCitrico : num [1:6365] 0.14 2.58 -1.54 0.3 0.3 1.26 0.14 -1.04 -0.74 0.27 ...
$ pH : num [1:6365] 4.99 5.54 5.1 5.23 5.75 5.3 5.74 5.12 5.37 4.96 ...
$ CloruroSodico : num [1:6365] 0.073 0.205 0.058 0.276 0.048 0.305 0.169 -0.345 0.064 0.315 ...
$ Densidad : num [1:6365] 1.022 0.954 0.993 0.996 1.027 ...
$ Azucar : num [1:6365] 5.9 6.4 7.1 3.5 7.2 3.7 7.4 6.2 1.5 4 ...
$ Sulfatos : num [1:6365] 0.12 0.49 0.39 -0.81 0.44 1.92 -0.99 -0.26 1.91 NA ...
$ Alcohol : num [1:6365] 6.6 112 10.2 4.4 10.1 14 10.1 9.3 11 10 ...
$ Etiqueta : chr [1:6365] "B" "b" "B" "R" ...
$ CalifProductor: num [1:6365] 5 4 2 4 2 3 4 2 5 4 ...
$ Clasificacion : chr [1:6365] "?" "?" "?" "?" ...
$ Region : num [1:6365] 1 NA 1 3 1 NA 1 3 2 1 ...
$ PrecioBotella : num [1:6365] 4.56 3.01 1 1.85 1.28 7 2.1 5.21 2.95 1 ...
2. Declarar bien las variables
No todas las variables categóricas han sido asignadas a factores, por lo que debemos modificarlo. Para ello usamos as.factor()
. Podemos hacerlo en combinación con lapply()
que nos permite aplicar la misma función a varios objetos.
Copy columns_to_factor<-c("Compra","Etiqueta","Clasificacion","Region")
datos[,columns_to_factor]<-
lapply(datos[,columns_to_factor],as.factor)
str(datos)
Mira los niveles de los factores. ¿Crees que algo no va bien?
3. Resumen de todas las variables para detectar bien los errores iniciales
Ahora podemos ver un resumen de todas las variables para poder detectar errores iniciales usando la función summary()
Copy ID Beneficio Compra Acidez AcidoCitrico pH CloruroSodico Densidad Azucar
Min. : 2 Min. : 0.0 0:1367 Min. :-2.7900 Min. :-3.2400 Min. :4.800 Min. : -1.171 Min. :0.8881 Min. : 0.000
1st Qu.: 3980 1st Qu.: 236.0 1:4998 1st Qu.: 0.1300 1st Qu.: 0.0200 1st Qu.:6.820 1st Qu.: -0.004 1st Qu.:0.9882 1st Qu.: 6.700
Median : 8065 Median : 480.0 Median : 0.2800 Median : 0.3100 Median :7.920 Median : 0.048 Median :0.9944 Median : 8.900
Mean : 8011 Mean : 452.4 Mean : 0.3312 Mean : 0.3144 Mean :7.529 Mean : 46.978 Mean :0.9942 Mean : 8.851
3rd Qu.:12027 3rd Qu.: 671.0 3rd Qu.: 0.6500 3rd Qu.: 0.5800 3rd Qu.:8.400 3rd Qu.: 0.224 3rd Qu.:1.0006 3rd Qu.:11.000
Max. :16128 Max. :1568.0 Max. : 3.6800 Max. : 3.8600 Max. :9.300 Max. :999.000 Max. :1.0992 Max. :21.000
Sulfatos Alcohol Etiqueta CalifProductor Clasificacion Region PrecioBotella
Min. :-3.1200 Min. : -4.50 R :2380 Min. :0.000 ? :1680 1 :2059 Min. : 1.000
1st Qu.: 0.2800 1st Qu.: 9.90 M :1357 1st Qu.:2.000 * :1535 2 :2067 1st Qu.: 1.420
Median : 0.5000 Median : 11.60 B :1282 Median :3.000 ** :1754 3 :2132 Median : 2.190
Mean : 0.5267 Mean : 17.46 r : 420 Mean :2.759 *** :1074 NA's: 107 Mean : 2.611
3rd Qu.: 0.8800 3rd Qu.: 14.00 m : 230 3rd Qu.:3.000 ****: 322 3rd Qu.: 3.440
Max. : 4.2100 Max. :150.00 MM : 216 Max. :9.000 Max. :11.440
Con estos resultados, podemos analizar las variables del conjunto de datos y detectar errores que deben ser tratados posteriormente
Comenta todas las variables y sus posibles errores
La variable CloruroSodico
tiene un valor máximo de 999, lo que suele representar valores ausentes.
La variable Alcohol
toma valores fuera del intervalo 0-100.
La variable Etiqueta
tiene más categorías de las que necesita debido al uso de mayúsculas y minúsculas.
La variable Clasificacion
tiene valores representados por el símbolo ?, lo que también suele representar valores ausentes.
4. Corregir errores
Variable CloruroSodico
Para verificar si los valores 999 de la variable CloruroSodico
son efectivamente ausentes, podemos representar su histograma
Copy hist(datos$CloruroSodico,xlab="CloruroSodico")
Queda claro que ese dato es erróneo, lo convertimos en NA
Copy datos$CloruroSodico<-replace(datos$CloruroSodico,datos$CloruroSodico==999,NA)
hist(datos$CloruroSodico,main="CloruroSodico")
Variable Alcohol
En el caso de la variable Alcohol
, vamos a declarar como NA los valores fuera de rango
Copy datos$Alcohol<-replace(datos$Alcohol,which((datos$Alcohol<0) | (datos$Alcohol>100)),NA)
hist(datos$Alcohol,main="Alcohol")
Variable Etiqueta
Finalmente vamos a corregir los errores de escritura de la variable Etiqueta
, para ello podemos usar la funcion recode()
del paquete car
Copy table(datos$Etiqueta)
datos$Etiqueta<-car::recode(datos$Etiqueta,"'b'='B';'m'='M';'mb'='MB';'mm'='MM';'r'='R'")
table(datos$Etiqueta)
Variable Clasificacion
Para la variable Clasificacion
vamos a recodificar ? por NA
Copy
table(datos$Clasificacion)
datos$Clasificacion<-car::recode(datos$Clasificacion,"'?'= NA")
table(datos$Clasificacion)
Vamos a ver que efectivamente todos los errores se han corregido y guardamos el fichero corregido
Copy summary(datos)
#install.packages("writexl")
library(writexl)
write_xlsx(datos,"DatosVino_corregido.xlsx")
Copy ID Beneficio Compra Acidez AcidoCitrico pH CloruroSodico Densidad Azucar Sulfatos
Min. : 2 Min. : 0.0 0:1367 Min. :-2.7900 Min. :-3.2400 Min. :4.800 Min. :-1.17100 Min. :0.8881 Min. : 0.000 Min. :-3.1200
1st Qu.: 3980 1st Qu.: 236.0 1:4998 1st Qu.: 0.1300 1st Qu.: 0.0200 1st Qu.:6.820 1st Qu.:-0.03275 1st Qu.:0.9882 1st Qu.: 6.700 1st Qu.: 0.2800
Median : 8065 Median : 480.0 Median : 0.2800 Median : 0.3100 Median :7.920 Median : 0.04600 Median :0.9944 Median : 8.900 Median : 0.5000
Mean : 8011 Mean : 452.4 Mean : 0.3312 Mean : 0.3144 Mean :7.529 Mean : 0.05135 Mean :0.9942 Mean : 8.851 Mean : 0.5267
3rd Qu.:12027 3rd Qu.: 671.0 3rd Qu.: 0.6500 3rd Qu.: 0.5800 3rd Qu.:8.400 3rd Qu.: 0.14675 3rd Qu.:1.0006 3rd Qu.:11.000 3rd Qu.: 0.8800
Max. :16128 Max. :1568.0 Max. : 3.6800 Max. : 3.8600 Max. :9.300 Max. : 1.35100 Max. :1.0992 Max. :21.000 Max. : 4.2100
NA's :299 NA's :604
Alcohol Etiqueta CalifProductor Clasificacion Region PrecioBotella
Min. : 0.80 B :1491 Min. :0.000 * :1535 1 :2059 Min. : 1.000
1st Qu.: 9.90 M :1587 1st Qu.:2.000 ** :1754 2 :2067 1st Qu.: 1.420
Median :11.50 MB: 231 Median :3.000 *** :1074 3 :2132 Median : 2.190
Mean :11.92 MM: 256 Mean :2.759 ****: 322 NA's: 107 Mean : 2.611
3rd Qu.:13.60 R :2800 3rd Qu.:3.000 NA's:1680 3rd Qu.: 3.440
Max. :26.50 Max. :9.000 Max. :11.440