# Ejemplo de un análisis descriptivo básico para detectar errores e incongruencias

Para este apartado vamos a utilizar el conjunto de datos "Wine Quality" utilizado en Cortez et al. (2009).&#x20;

{% file src="<https://content.gitbook.com/content/rM42Q5mZztagDRQM9E7z/blobs/rh6a9owjjTbnkj6hZ7wV/DatosVino.xlsx>" %}

Las variables son las siguientes:

<figure><img src="https://content.gitbook.com/content/rM42Q5mZztagDRQM9E7z/blobs/KVOcMifgY4iuKVWS6mxz/image.png" alt="" width="563"><figcaption></figcaption></figure>

Lo primero que haremos es leer los datos. Seguidamente verificamos que los tipos de variables se hayan asignado correctamente con <mark style="color:green;">**`str()`**</mark>

```r
#install.packages("readxl")
library(readxl)
datos<-read_excel("DatosVino.xlsx")
str(datos)
```

<figure><img src="https://content.gitbook.com/content/rM42Q5mZztagDRQM9E7z/blobs/mBEKfAQICi12LCaKVqsR/image.png" alt="" width="563"><figcaption></figcaption></figure>

No todas las variables categóricas han sido asignadas a factores, por lo que debemos modificarlo. Para ello usamos <mark style="color:green;">**`as.factor()`**</mark>. Podemos hacerlo en combinación con <mark style="color:green;">**`lapply()`**</mark> que nos permite aplicar la misma función a varios objetos.&#x20;

```r
datos[,c("Compra","Etiqueta","Clasificacion","Region")]<-
    lapply(datos[,c("Compra","Etiqueta","Clasificacion","Region")],as.factor)
str(datos)
```

Ahora podemos ver un resumen de todas las variables para poder detectar errores iniciales usando la función <mark style="color:green;">**`summary()`**</mark>

```r
summary(datos)
```

<figure><img src="https://content.gitbook.com/content/rM42Q5mZztagDRQM9E7z/blobs/kppuo8X5NdLaIf64pVwr/image.png" alt="" width="563"><figcaption></figcaption></figure>

Con estos resultados, podemos analizar las variables del conjunto de datos y detectar errores que deben ser tratados posteriormente:

* 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 *Clasificacion* tiene valores representados por el símbolo ?, lo que también suele representar valores ausentes.&#x20;
* La variable *Etiqueta* tiene más categorías de las que necesita debido al uso de mayúsculas y minúsculas.&#x20;

Para verificar si los valores 999 de la variable CloruroSodio son efectivamente ausentes, podemos representar su histograma

```r
hist(datos$CloruroSodico,xlab="CloruroSodico",main="")
```

<figure><img src="https://content.gitbook.com/content/rM42Q5mZztagDRQM9E7z/blobs/nM1aWbIq6nB9uYlHswDo/image.png" alt="" width="375"><figcaption></figcaption></figure>

```r
datos$CloruroSodico<-replace(datos$CloruroSodico,datos$CloruroSodico==999,NA)
hist(datos$CloruroSodico,xlab="CloruroSodico",main="")
```

Para la variable *Clasificacion* vamos a usar la libreria **`questionr`** que contiene la funcion <mark style="color:green;">**`recode.na()`**</mark> para recodificar por NAs los valores de esa variable.&#x20;

```r
#install.packages("questionr")
library(questionr)
datos$Clasificacion<-recode.na(datos$Clasificacion,"?")
```

En el caso de la variable *Alcohol*, vamos a declarar como NAs los valores fuera de rango

```r
datos$Alcohol<-replace(datos$Alcohol,which((datos$Alcohol<0) | (datos$Alcohol>100)),NA)
```

Finalmente vamos a corregir los errores de escritura de la variable Etiqueta, para ello podemos usar la funcion <mark style="color:green;">**`recode()`**</mark> del paquete **`car`**

```r
datos$Etiqueta<-car::recode(datos$Etiqueta,"'b'='B';'m'='M';'mb'='MB';'mm'='MM';'r'='R'")
```

Vamos a ver que efectivamente todos los errores se han corregido

```r
summary(datos)

#install.packages("writexl")
library(writexl)
write_xlsx(datos,"DatosVino_corregido.xlsx")
```

<figure><img src="https://content.gitbook.com/content/rM42Q5mZztagDRQM9E7z/blobs/QKQDMioXxaym9DDOli7p/image.png" alt="" width="563"><figcaption></figcaption></figure>
