Introducción

Este reporte presenta un análisis exploratorio de datos (EDA) para el conjunto de datos Wine Quality. Se estudia el comportamiento de las variables fisicoquímicas y su relación con la calidad del vino.

Carga de datos

wine <- read.csv("winequality-red.csv")

head(wine)
##   fixed.acidity volatile.acidity citric.acid residual.sugar chlorides
## 1           7.4             0.70        0.00            1.9     0.076
## 2           7.8             0.88        0.00            2.6     0.098
## 3           7.8             0.76        0.04            2.3     0.092
## 4          11.2             0.28        0.56            1.9     0.075
## 5           7.4             0.70        0.00            1.9     0.076
## 6           7.4             0.66        0.00            1.8     0.075
##   free.sulfur.dioxide total.sulfur.dioxide density   pH sulphates alcohol
## 1                  11                   34  0.9978 3.51      0.56     9.4
## 2                  25                   67  0.9968 3.20      0.68     9.8
## 3                  15                   54  0.9970 3.26      0.65     9.8
## 4                  17                   60  0.9980 3.16      0.58     9.8
## 5                  11                   34  0.9978 3.51      0.56     9.4
## 6                  13                   40  0.9978 3.51      0.56     9.4
##   quality
## 1       5
## 2       5
## 3       5
## 4       6
## 5       5
## 6       5

Dimensiones del dataset

cat("Número de filas:", nrow(wine), "\n")
## Número de filas: 1599
cat("Número de columnas:", ncol(wine), "\n")
## Número de columnas: 12

Estructura de los datos

str(wine)
## 'data.frame':    1599 obs. of  12 variables:
##  $ fixed.acidity       : num  7.4 7.8 7.8 11.2 7.4 7.4 7.9 7.3 7.8 7.5 ...
##  $ volatile.acidity    : num  0.7 0.88 0.76 0.28 0.7 0.66 0.6 0.65 0.58 0.5 ...
##  $ citric.acid         : num  0 0 0.04 0.56 0 0 0.06 0 0.02 0.36 ...
##  $ residual.sugar      : num  1.9 2.6 2.3 1.9 1.9 1.8 1.6 1.2 2 6.1 ...
##  $ chlorides           : num  0.076 0.098 0.092 0.075 0.076 0.075 0.069 0.065 0.073 0.071 ...
##  $ free.sulfur.dioxide : num  11 25 15 17 11 13 15 15 9 17 ...
##  $ total.sulfur.dioxide: num  34 67 54 60 34 40 59 21 18 102 ...
##  $ density             : num  0.998 0.997 0.997 0.998 0.998 ...
##  $ pH                  : num  3.51 3.2 3.26 3.16 3.51 3.51 3.3 3.39 3.36 3.35 ...
##  $ sulphates           : num  0.56 0.68 0.65 0.58 0.56 0.56 0.46 0.47 0.57 0.8 ...
##  $ alcohol             : num  9.4 9.8 9.8 9.8 9.4 9.4 9.4 10 9.5 10.5 ...
##  $ quality             : int  5 5 5 6 5 5 5 7 7 5 ...

Resumen estadístico

summary(wine)
##  fixed.acidity   volatile.acidity  citric.acid    residual.sugar  
##  Min.   : 4.60   Min.   :0.1200   Min.   :0.000   Min.   : 0.900  
##  1st Qu.: 7.10   1st Qu.:0.3900   1st Qu.:0.090   1st Qu.: 1.900  
##  Median : 7.90   Median :0.5200   Median :0.260   Median : 2.200  
##  Mean   : 8.32   Mean   :0.5278   Mean   :0.271   Mean   : 2.539  
##  3rd Qu.: 9.20   3rd Qu.:0.6400   3rd Qu.:0.420   3rd Qu.: 2.600  
##  Max.   :15.90   Max.   :1.5800   Max.   :1.000   Max.   :15.500  
##    chlorides       free.sulfur.dioxide total.sulfur.dioxide    density      
##  Min.   :0.01200   Min.   : 1.00       Min.   :  6.00       Min.   :0.9901  
##  1st Qu.:0.07000   1st Qu.: 7.00       1st Qu.: 22.00       1st Qu.:0.9956  
##  Median :0.07900   Median :14.00       Median : 38.00       Median :0.9968  
##  Mean   :0.08747   Mean   :15.87       Mean   : 46.47       Mean   :0.9967  
##  3rd Qu.:0.09000   3rd Qu.:21.00       3rd Qu.: 62.00       3rd Qu.:0.9978  
##  Max.   :0.61100   Max.   :72.00       Max.   :289.00       Max.   :1.0037  
##        pH          sulphates         alcohol         quality     
##  Min.   :2.740   Min.   :0.3300   Min.   : 8.40   Min.   :3.000  
##  1st Qu.:3.210   1st Qu.:0.5500   1st Qu.: 9.50   1st Qu.:5.000  
##  Median :3.310   Median :0.6200   Median :10.20   Median :6.000  
##  Mean   :3.311   Mean   :0.6581   Mean   :10.42   Mean   :5.636  
##  3rd Qu.:3.400   3rd Qu.:0.7300   3rd Qu.:11.10   3rd Qu.:6.000  
##  Max.   :4.010   Max.   :2.0000   Max.   :14.90   Max.   :8.000

Valores faltantes

colSums(is.na(wine))
##        fixed.acidity     volatile.acidity          citric.acid 
##                    0                    0                    0 
##       residual.sugar            chlorides  free.sulfur.dioxide 
##                    0                    0                    0 
## total.sulfur.dioxide              density                   pH 
##                    0                    0                    0 
##            sulphates              alcohol              quality 
##                    0                    0                    0

Función para analizar cada variable

analizar_variable <- function(data, variable){

  print(summary(data[[variable]]))

  par(mfrow = c(1,2))

  hist(
    data[[variable]],
    main = paste("Histograma de", variable),
    xlab = variable,
    col = "skyblue",
    border = "white"
  )

  boxplot(
    data[[variable]],
    main = paste("Boxplot de", variable),
    col = "orange"
  )

  par(mfrow = c(1,1))
}

Análisis de todas las variables

for(v in names(wine)){
  cat("\n====================================\n")
  cat("Variable:", v, "\n")
  cat("====================================\n")

  analizar_variable(wine, v)
}
## 
## ====================================
## Variable: fixed.acidity 
## ====================================
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    4.60    7.10    7.90    8.32    9.20   15.90

## 
## ====================================
## Variable: volatile.acidity 
## ====================================
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.1200  0.3900  0.5200  0.5278  0.6400  1.5800

## 
## ====================================
## Variable: citric.acid 
## ====================================
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   0.090   0.260   0.271   0.420   1.000

## 
## ====================================
## Variable: residual.sugar 
## ====================================
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.900   1.900   2.200   2.539   2.600  15.500

## 
## ====================================
## Variable: chlorides 
## ====================================
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.01200 0.07000 0.07900 0.08747 0.09000 0.61100

## 
## ====================================
## Variable: free.sulfur.dioxide 
## ====================================
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00    7.00   14.00   15.87   21.00   72.00

## 
## ====================================
## Variable: total.sulfur.dioxide 
## ====================================
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    6.00   22.00   38.00   46.47   62.00  289.00

## 
## ====================================
## Variable: density 
## ====================================
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.9901  0.9956  0.9968  0.9967  0.9978  1.0037

## 
## ====================================
## Variable: pH 
## ====================================
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   2.740   3.210   3.310   3.311   3.400   4.010

## 
## ====================================
## Variable: sulphates 
## ====================================
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.3300  0.5500  0.6200  0.6581  0.7300  2.0000

## 
## ====================================
## Variable: alcohol 
## ====================================
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    8.40    9.50   10.20   10.42   11.10   14.90

## 
## ====================================
## Variable: quality 
## ====================================
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   3.000   5.000   6.000   5.636   6.000   8.000

Distribución de la calidad

ggplot(wine, aes(x = factor(quality))) +
  geom_bar(fill = "steelblue") +
  labs(
    title = "Distribución de la Calidad del Vino",
    x = "Calidad",
    y = "Frecuencia"
  ) +
  theme_minimal()

Matriz de correlaciones

correlaciones <- cor(wine)

corrplot(
  correlaciones,
  method = "color",
  type = "upper",
  tl.cex = 0.8
)

Variables relacionadas con la calidad

cor_quality <- cor(wine)[,"quality"]

cor_quality <- sort(cor_quality)

cor_df <- data.frame(
  Variable = names(cor_quality),
  Correlacion = cor_quality
)

kable(cor_df)
Variable Correlacion
volatile.acidity volatile.acidity -0.3905578
total.sulfur.dioxide total.sulfur.dioxide -0.1851003
density density -0.1749192
chlorides chlorides -0.1289066
pH pH -0.0577314
free.sulfur.dioxide free.sulfur.dioxide -0.0506561
residual.sugar residual.sugar 0.0137316
fixed.acidity fixed.acidity 0.1240516
citric.acid citric.acid 0.2263725
sulphates sulphates 0.2513971
alcohol alcohol 0.4761663
quality quality 1.0000000

Gráfico de correlación con calidad

ggplot(
  cor_df,
  aes(
    x = reorder(Variable, Correlacion),
    y = Correlacion
  )
) +
  geom_bar(
    stat = "identity",
    fill = "darkgreen"
  ) +
  coord_flip() +
  labs(
    title = "Correlación de Variables con Quality",
    x = "Variables",
    y = "Correlación"
  ) +
  theme_minimal()

Matriz de relaciones entre variables

ggpairs(wine)

Valores atípicos

par(mfrow = c(3,4))

for(v in names(wine)){

  boxplot(
    wine[[v]],
    main = v,
    col = "lightblue"
  )

}

par(mfrow = c(1,1))

Conclusiones

#El conjunto de datos está compuesto por 1.599 observaciones y 12 variables, correspondientes a características fisicoquímicas del vino y una variable de calidad. Esto proporciona una cantidad suficiente de información para realizar análisis exploratorios y posteriores modelos predictivos.

#No se encontraron valores faltantes en ninguna de las variables analizadas, por lo que no fue necesario realizar procesos de imputación o limpieza de datos relacionados con datos ausentes.

#La calidad de los vinos presenta valores entre 3 y 8, con una media de 5.64 y una mediana de 6. Esto indica que la mayoría de los vinos evaluados poseen una calidad media, concentrándose principalmente entre las categorías 5 y 6.

#Las variables presentan diferentes niveles de dispersión. Por ejemplo, la acidez fija (fixed acidity) oscila entre 4.6 y 15.9, mientras que el azúcar residual (residual sugar) alcanza valores de hasta 15.5, lo que evidencia una variabilidad considerable en algunas características químicas.

#A partir de los histogramas y diagramas de caja se observan posibles valores atípicos en variables como residual sugar, chlorides, sulphates, free sulfur dioxide y total sulfur dioxide. Estos valores extremos podrían influir en análisis estadísticos posteriores y deberían considerarse en etapas de modelado.

#Las variables de densidad (density) y pH presentan una menor variabilidad en comparación con otras características, mostrando distribuciones más concentradas alrededor de sus valores centrales.

#El análisis de correlaciones permite identificar relaciones entre las variables fisicoquímicas y la calidad del vino. Algunas variables muestran asociaciones positivas con la calidad, mientras que otras presentan asociaciones negativas, lo que sugiere que la calidad del vino depende de una combinación de múltiples factores químicos.

#El análisis exploratorio permitió comprender la estructura general de los datos, identificar posibles valores extremos y visualizar las relaciones entre variables, proporcionando una base adecuada para futuros análisis predictivos o de clasificación de la calidad del vino.