1. Introducción y descripción de los datos

Base de datos Wine(Vino)

Esta base de datos contiene los resultados de un análisis quimico y fisicoquimicos realizado a vinos cultivados en una misma región de Italia, pero derivados de tres cultivares (tipos de plantas) diferentes.

  • Total de observaciones (muestras): 178
  • Total de variables: 14 (13 variables numéricas continuas/químicas y 1 variable categórica/grupo)

Descripción de variables numéricas:

  • Alcohol: Concentración de etanol producto de la fermentación (ususalmente expresada en % v/v).

  • Ácido málico: Uno de los principales ácidos orgánicos naturales de la uva, responsable de la acidez característica y el sabor agrio (astringente) del vino.

  • Ceniza (Ash): Representa el residuo inorgánico que queda después de calcinar la muestra. Básicamente, es la medida de los minerales totales extraídos del suelo por la planta.

  • Alcalinidad de la ceniza: Un indicador del equilibrio mineral y del pH. Da pistas sobre las condiciones del suelo donde creció el cultivar.

  • Magnesio: Un catión metálico esencial, vital tanto para la nutrición de la planta original como para el metabolismo de las levaduras durante la fermentación.

  • Total de fenoles: La suma de todos los compuestos fenólicos en la muestra. Estos metabolitos secundarios son responsables del cuerpo, la astringencia y la capacidad antioxidante del líquido.

  • Flavanoides: Un subgrupo importante de fenoles que contribuye a la pigmentación, sabor y protección oxidativa.

  • Fenoles no flavanoides: Compuestos fenólicos de estructura más simple (como los ácidos hidroxicinámicos) que también aportan al perfil aromático y gustativo.

  • Proantocianinas: También conocidas como taninos condensados. Son polímeros que reaccionan con las proteínas de la saliva, causando la sensación de “sequedad” en la boca al beber.

  • Intensidad de color: Medición óptica de qué tan profundo o concentrado es el pigmento del líquido.

  • Matiz (Hue): La tonalidad exacta de la muestra (por ejemplo, si el rojo tiende hacia tonos violáceos o hacia tonos ladrillo).

  • OD280: Medición obtenida mediante espectrofotometría UV-Vis a una longitud de onda de 280 nm. A esta frecuencia absorben las proteínas y los anillos aromáticos, utilizándose como un indicador general de la pureza y concentración de compuestos.

  • Prolina: El aminoácido libre más abundante en el jugo de uva y en el vino; sirve como marcador de madurez y estrés de la planta.

Variable cualitativa de agrupación

  • Customer_Segment: Es la estiqueta o categoría final (1,2 ó 3). Representa a cuál de los 3 cultivares genéticos pertenecía la planta a la que se extrajo la muestra.

2.Carga preparación y limpieza de datos

En esta sección realizamos la verificación de la estructura técnica de los datos, la gestión de datos faltantes y la asignación correcta del tipo de variable.

——–> Insertar la base de datos

# 1.Llamar a la libreria que lee el tipo de archivo que es la base de datos (csv ó excel)

library(readr)

# 2. Importar los datos(pegas la ruta exacta que te dió RStudio)

BD_Wine <- read_csv("BD_Wine.xlsx - Wine.csv")

View(BD_Wine)
# 3. Mostrar las primeras 6 filas para confirmar que cargó bien (En lugar de View)

head(BD_Wine)
## # A tibble: 6 × 14
##   Alcohol Acido_malico Ceniza Ceniza_Alcalinidad Magnesio Total_fenoles
##     <dbl>        <dbl>  <dbl>              <dbl>    <dbl>         <dbl>
## 1    14.2         1.71   2.43               15.6      127          2.8 
## 2    13.2         1.78   2.14               11.2      100          2.65
## 3    13.2         2.36   2.67               18.6      101          2.8 
## 4    14.4         1.95   2.5                16.8      113          3.85
## 5    13.2         2.59   2.87               21        118          2.8 
## 6    14.2         1.76   2.45               15.2      112          3.27
## # ℹ 8 more variables: Flavanoides <dbl>, Noflavanoides_fenoles <dbl>,
## #   Proantocianinas <dbl>, intensidad_color <dbl>, Matiz <dbl>, OD280 <dbl>,
## #   Prolina <dbl>, Customer_Segment <dbl>

Revisión de la estructura de los datos

#Revisar estructura: Muestra la "radiografía" de las variables (si son numéricas o texto) para evitar errores matemáticos.

str(BD_Wine)
## spc_tbl_ [178 × 14] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ Alcohol              : num [1:178] 14.2 13.2 13.2 14.4 13.2 ...
##  $ Acido_malico         : num [1:178] 1.71 1.78 2.36 1.95 2.59 1.76 1.87 2.15 1.64 1.35 ...
##  $ Ceniza               : num [1:178] 2.43 2.14 2.67 2.5 2.87 2.45 2.45 2.61 2.17 2.27 ...
##  $ Ceniza_Alcalinidad   : num [1:178] 15.6 11.2 18.6 16.8 21 15.2 14.6 17.6 14 16 ...
##  $ Magnesio             : num [1:178] 127 100 101 113 118 112 96 121 97 98 ...
##  $ Total_fenoles        : num [1:178] 2.8 2.65 2.8 3.85 2.8 3.27 2.5 2.6 2.8 2.98 ...
##  $ Flavanoides          : num [1:178] 3.06 2.76 3.24 3.49 2.69 3.39 2.52 2.51 2.98 3.15 ...
##  $ Noflavanoides_fenoles: num [1:178] 0.28 0.26 0.3 0.24 0.39 0.34 0.3 0.31 0.29 0.22 ...
##  $ Proantocianinas      : num [1:178] 2.29 1.28 2.81 2.18 1.82 1.97 1.98 1.25 1.98 1.85 ...
##  $ intensidad_color     : num [1:178] 5.64 4.38 5.68 7.8 4.32 6.75 5.25 5.05 5.2 7.22 ...
##  $ Matiz                : num [1:178] 1.04 1.05 1.03 0.86 1.04 1.05 1.02 1.06 1.08 1.01 ...
##  $ OD280                : num [1:178] 3.92 3.4 3.17 3.45 2.93 2.85 3.58 3.58 2.85 3.55 ...
##  $ Prolina              : num [1:178] 1065 1050 1185 1480 735 ...
##  $ Customer_Segment     : num [1:178] 1 1 1 1 1 1 1 1 1 1 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Alcohol = col_double(),
##   ..   Acido_malico = col_double(),
##   ..   Ceniza = col_double(),
##   ..   Ceniza_Alcalinidad = col_double(),
##   ..   Magnesio = col_double(),
##   ..   Total_fenoles = col_double(),
##   ..   Flavanoides = col_double(),
##   ..   Noflavanoides_fenoles = col_double(),
##   ..   Proantocianinas = col_double(),
##   ..   intensidad_color = col_double(),
##   ..   Matiz = col_double(),
##   ..   OD280 = col_double(),
##   ..   Prolina = col_double(),
##   ..   Customer_Segment = col_double()
##   .. )
##  - attr(*, "problems")=<pointer: 0x0000019fcdffdce0>

Se verificó que la base de datos cuenta con 178 filas y 14 columnas.

IMPORTANTE

Conversión de Variable Cualitativa a Tipo Factor

En el archivo original, la variable Customer_Segment está registrada con los valores 1, 2 y 3. Al importar la base de datos, R la interpreta por defecto como una variable numérica continua (dbl).

Sin embargo, las variables cualitativas siempre deben ser definidas de tipo Factor en R, debido a las siguientes razones:

  1. Significado del Dato: Los valores 1, 2 y 3 no representan magnitudes continuas ni cantidades medibles, sino categorías o etiquetas cualitativas que identifican el origen genético del vino (Cultivar 1, Cultivar 2 y Cultivar 3).
  2. Evitar Errores Matemáticos: Si se conserva como numérica, el sistema intentará calcular estadísticos sin sentido (como un promedio de grupo de 1.93) o asumir relaciones cuantitativas inexistentes (como asumir que el Cultivar 3 es el triple del Cultivar 1).
  3. Correcta Integración Multivariada: Al definirla como Factor, la aislamos para que no contamine la matriz de covarianzas ni el Análisis de Componentes Principales (ACP), utilizándola exclusivamente como la variable cualitativa de agrupación que solicita la rúbrica para comparar el comportamiento químico entre los distintos grupos.

Cambió de tipo variable

# 3. CONVERSIÓN CLAVE: Transformar Customer_Segment a Factor (Variable Categórica)
BD_Wine$Customer_Segment <- factor(BD_Wine$Customer_Segment)

Revisión de la estructura actualizada

# 4. Revisión de la estructura técnica actualizada
str(BD_Wine)
## spc_tbl_ [178 × 14] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ Alcohol              : num [1:178] 14.2 13.2 13.2 14.4 13.2 ...
##  $ Acido_malico         : num [1:178] 1.71 1.78 2.36 1.95 2.59 1.76 1.87 2.15 1.64 1.35 ...
##  $ Ceniza               : num [1:178] 2.43 2.14 2.67 2.5 2.87 2.45 2.45 2.61 2.17 2.27 ...
##  $ Ceniza_Alcalinidad   : num [1:178] 15.6 11.2 18.6 16.8 21 15.2 14.6 17.6 14 16 ...
##  $ Magnesio             : num [1:178] 127 100 101 113 118 112 96 121 97 98 ...
##  $ Total_fenoles        : num [1:178] 2.8 2.65 2.8 3.85 2.8 3.27 2.5 2.6 2.8 2.98 ...
##  $ Flavanoides          : num [1:178] 3.06 2.76 3.24 3.49 2.69 3.39 2.52 2.51 2.98 3.15 ...
##  $ Noflavanoides_fenoles: num [1:178] 0.28 0.26 0.3 0.24 0.39 0.34 0.3 0.31 0.29 0.22 ...
##  $ Proantocianinas      : num [1:178] 2.29 1.28 2.81 2.18 1.82 1.97 1.98 1.25 1.98 1.85 ...
##  $ intensidad_color     : num [1:178] 5.64 4.38 5.68 7.8 4.32 6.75 5.25 5.05 5.2 7.22 ...
##  $ Matiz                : num [1:178] 1.04 1.05 1.03 0.86 1.04 1.05 1.02 1.06 1.08 1.01 ...
##  $ OD280                : num [1:178] 3.92 3.4 3.17 3.45 2.93 2.85 3.58 3.58 2.85 3.55 ...
##  $ Prolina              : num [1:178] 1065 1050 1185 1480 735 ...
##  $ Customer_Segment     : Factor w/ 3 levels "1","2","3": 1 1 1 1 1 1 1 1 1 1 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Alcohol = col_double(),
##   ..   Acido_malico = col_double(),
##   ..   Ceniza = col_double(),
##   ..   Ceniza_Alcalinidad = col_double(),
##   ..   Magnesio = col_double(),
##   ..   Total_fenoles = col_double(),
##   ..   Flavanoides = col_double(),
##   ..   Noflavanoides_fenoles = col_double(),
##   ..   Proantocianinas = col_double(),
##   ..   intensidad_color = col_double(),
##   ..   Matiz = col_double(),
##   ..   OD280 = col_double(),
##   ..   Prolina = col_double(),
##   ..   Customer_Segment = col_double()
##   .. )
##  - attr(*, "problems")=<pointer: 0x0000019fcdffdce0>

Ahora, notemos que la variables cualtitativas ya está en tipo factor.

Identificación y manejo de datos faltantes (NA)

#Busacra datos faltantes: Escane y suma los datos faltantes (NA) por cada columna en lugar de  borrar a ciegas

colSums(is.na(BD_Wine))
##               Alcohol          Acido_malico                Ceniza 
##                     0                     0                     0 
##    Ceniza_Alcalinidad              Magnesio         Total_fenoles 
##                     0                     0                     0 
##           Flavanoides Noflavanoides_fenoles       Proantocianinas 
##                     0                     0                     0 
##      intensidad_color                 Matiz                 OD280 
##                     0                     0                     0 
##               Prolina      Customer_Segment 
##                     0                     0

Vemos que nuestra bases de datos no contiene datos faltantes por lo cuál no se eliminara nada.

En caso de que tener datos faltantes hacemos la limpieza de datos y los eliminamos

# Limpiar datos: Filtra filas con celdas vacías y crea un clon limpio para no sobreescribir la matriz original.
#Limpieza de datos(creación de base de datos limpia)
#BD_Wine_limpia <- na.omit(BD_Wine)


#Después revisamos nuevamente las 6 filas para confirmar la carga correcta de la base nueva
#head(BD_Wine_limpia)

#Para verificar nuevamente si se eliminaron los datos faltantes se utiliza 
#colSums(is.na(BD_Wine_limpia))

Se verificó que la base de datos cuenta con 178 filas y 14 columnas de las cuales 13 son de tipo numerico y 1 de tipo factor. Tras la inspección con colSums(is.na()), se confirmó que no existen valores faltantes (0 NAs) en ninguna de las variables. La base de datos se encuentra completamente limpia y estructurada para el análisis.

3. Análisis univariados y descriptivo:

En esta sección evaluamos la tendencia central, la dispersión, la presencia de valores atípicos y las formas de distribución (normalidad, sesgo, curtosis y modas múltiples) para las 13 variables químicas de la base de datos.

Vector de promedios, medianas y resumen estadístico

Extraemos únicamente las 13 columnas numérocas (excluyendo el factor Customer_Segment) para calcular las medidas descriptivas globales.

Separamos variables cuantitativas

#Separamos las variables cuantitativas(quimicas)

vinos_num <- BD_Wine[, 1:13]
vinos_num
## # A tibble: 178 × 13
##    Alcohol Acido_malico Ceniza Ceniza_Alcalinidad Magnesio Total_fenoles
##      <dbl>        <dbl>  <dbl>              <dbl>    <dbl>         <dbl>
##  1    14.2         1.71   2.43               15.6      127          2.8 
##  2    13.2         1.78   2.14               11.2      100          2.65
##  3    13.2         2.36   2.67               18.6      101          2.8 
##  4    14.4         1.95   2.5                16.8      113          3.85
##  5    13.2         2.59   2.87               21        118          2.8 
##  6    14.2         1.76   2.45               15.2      112          3.27
##  7    14.4         1.87   2.45               14.6       96          2.5 
##  8    14.1         2.15   2.61               17.6      121          2.6 
##  9    14.8         1.64   2.17               14         97          2.8 
## 10    13.9         1.35   2.27               16         98          2.98
## # ℹ 168 more rows
## # ℹ 7 more variables: Flavanoides <dbl>, Noflavanoides_fenoles <dbl>,
## #   Proantocianinas <dbl>, intensidad_color <dbl>, Matiz <dbl>, OD280 <dbl>,
## #   Prolina <dbl>

Vector de promedios

# 2. Vector de Promedios
 colMeans(vinos_num)
##               Alcohol          Acido_malico                Ceniza 
##            13.0006180             2.3363483             2.3665169 
##    Ceniza_Alcalinidad              Magnesio         Total_fenoles 
##            19.4949438            99.7415730             2.2951124 
##           Flavanoides Noflavanoides_fenoles       Proantocianinas 
##             2.0292697             0.3618539             1.5908989 
##      intensidad_color                 Matiz                 OD280 
##             5.0580899             0.9574494             2.6116854 
##               Prolina 
##           746.8932584
  • Alcohol: En promedio, los vinos tienen una concentración de 13.00% v/v de etanol, lo cual es característico de un vino tinto seco tradicional.

  • Ácido málico: En promedio, se registran 2.34 unidades de ácido málico, el cual le otorga acidez a la bebida.

  • Ceniza y alcalinidad: En promedio, el vino conserva 2.37 unidades de residuo mineral (ceniza) y una alcalinidad de la ceniza de 19.49, reflejando las características minerales de la muestra.

  • Magnesio: En promedio, se presentan 99.74 mg/L de magnesio.

  • Compuestos fenólicos: En promedio, el vino contiene 2.30 unidades de fenoles totales, de los cuales una gran parte corresponde a flavonoides (2.03), mientras que los fenoles no flavonoides presentan un promedio de 0.36. Las proantocianinas promedian 1.59, aportando características relacionadas con el cuerpo y la estructura del vino.

  • Color y pureza: En promedio, los vinos muestran una intensidad de color de 5.06 con un matiz (hue) de 0.96. Además, presentan un indicador promedio de OD280 de 2.61.

  • Prolina: En promedio, se registran 746.89 mg/L de prolina, siendo una de las variables con valores promedio más elevados dentro de la base de datos.

En general, se observa una concentración moderada de alcohol, una importante presencia de compuestos fenólicos y flavonoides, así como diferencias en variables relacionadas con el color, los minerales y la composición química.

También observar, las escalas de los promedios son enormemente distintas (van desde \(0.36\) en fenoles no flavanoides hasta \(746.89\) en prolina). Esta diferencia tan grande de números justifica por qué debemos estandarizar los datos antes de hacer el ACP, para evitar que la prolina le gane a las demás variables solo por tener números más grandes.

Resumen estadístico completo (Mínimos, Cuartiles, Medianas, Medias, Máximos)

summary(vinos_num)
##     Alcohol       Acido_malico       Ceniza      Ceniza_Alcalinidad
##  Min.   :11.03   Min.   :0.740   Min.   :1.360   Min.   :10.60     
##  1st Qu.:12.36   1st Qu.:1.603   1st Qu.:2.210   1st Qu.:17.20     
##  Median :13.05   Median :1.865   Median :2.360   Median :19.50     
##  Mean   :13.00   Mean   :2.336   Mean   :2.367   Mean   :19.49     
##  3rd Qu.:13.68   3rd Qu.:3.083   3rd Qu.:2.558   3rd Qu.:21.50     
##  Max.   :14.83   Max.   :5.800   Max.   :3.230   Max.   :30.00     
##     Magnesio      Total_fenoles    Flavanoides    Noflavanoides_fenoles
##  Min.   : 70.00   Min.   :0.980   Min.   :0.340   Min.   :0.1300       
##  1st Qu.: 88.00   1st Qu.:1.742   1st Qu.:1.205   1st Qu.:0.2700       
##  Median : 98.00   Median :2.355   Median :2.135   Median :0.3400       
##  Mean   : 99.74   Mean   :2.295   Mean   :2.029   Mean   :0.3619       
##  3rd Qu.:107.00   3rd Qu.:2.800   3rd Qu.:2.875   3rd Qu.:0.4375       
##  Max.   :162.00   Max.   :3.880   Max.   :5.080   Max.   :0.6600       
##  Proantocianinas intensidad_color     Matiz            OD280      
##  Min.   :0.410   Min.   : 1.280   Min.   :0.4800   Min.   :1.270  
##  1st Qu.:1.250   1st Qu.: 3.220   1st Qu.:0.7825   1st Qu.:1.938  
##  Median :1.555   Median : 4.690   Median :0.9650   Median :2.780  
##  Mean   :1.591   Mean   : 5.058   Mean   :0.9574   Mean   :2.612  
##  3rd Qu.:1.950   3rd Qu.: 6.200   3rd Qu.:1.1200   3rd Qu.:3.170  
##  Max.   :3.580   Max.   :13.000   Max.   :1.7100   Max.   :4.000  
##     Prolina      
##  Min.   : 278.0  
##  1st Qu.: 500.5  
##  Median : 673.5  
##  Mean   : 746.9  
##  3rd Qu.: 985.0  
##  Max.   :1680.0

IMPORTANTE

Simetría: Ocurre cuando la Media y la Mediana coinciden o son prácticamente iguales (\(\text{Media} \approx \text{Mediana}\)). Significa que los datos se distribuyen de forma equilibrada a ambos lados del centro, sin valores extremos que distorsionen el promedio.

Sesgo Positivo (o a la Derecha): Ocurre cuando la Media es mayor que la Mediana (\(\text{Media} > \text{Mediana}\)). Indica que la mayoría de los datos se concentran en valores bajos, pero existen algunos valores inusualmente altos (en la cola derecha) que elevan el promedio.

Escala o Magnitud: Corresponde al rango numérico de medición. Si las variables tienen magnitudes enormemente distintas (por ejemplo, valores de \(0.3\) frente a \(1600\)), aquellas con magnitudes grandes dominarán artificialmente el análisis multivariado si no se estandarizan.

Interpretación

Variables Simétricas (Alcohol, Ceniza y Alcalinidad de la Ceniza):

Compuestos como el Alcohol (\(\text{Media} = 13.00\) vs \(\text{Mediana} = 13.05\)), la Ceniza (\(\text{Media} = 2.37\) vs \(\text{Mediana} = 2.36\)) y la Alcalinidad de la Ceniza (\(\text{Media} = 19.49\) vs \(\text{Mediana} = 19.50\)) presentan valores casi idénticos entre su media y su mediana. Esto indica distribuciones simétricas y libres de grandes distorsiones.

Variables con Sesgo Positivo (Ácido Málico e Intensidad de Color):

En variables como el Ácido Málico (\(\text{Media} = 2.34\) vs \(\text{Mediana} = 1.87\)) y la Intensidad de Color (\(\text{Media} = 5.06\) vs \(\text{Mediana} = 4.69\)), la media supera a la mediana debido a la presencia de un grupo de muestras con concentraciones altas (colas a la derecha).

Justificación de Estandarización por Escala (Prolina):

La Prolina destaca por sus elevadas magnitudes (\(\text{Media} = 746.89\), \(\text{Máximo} = 1680.0\)). Esta fuerte diferencia de escala con respecto a los otros químicos justifica técnicamente la necesidad de estandarizar los datos antes de aplicar el Análisis de Componentes Principales (ACP).

Visualización gráfica: media vs. mediana y disparidad de escalas

Para no quedarnos solo con la tabla numérica de summary(), representamos visualmente el vector de promedios frente a las medianas para evaluar la simetría y la diferencia de magnitudes entre variables.

promedios <- colMeans(vinos_num)
medianas <- apply(vinos_num, 2, median)


# --- : Disparidad de Escalas 
colores_escala <- rep("#7570b3", 13)
colores_escala[which(names(promedios) == "Prolina")] <- "#d95f02" # Resaltar Prolina en naranja

barplot(promedios, 
        main = "C. Disparidad de Escalas (Promedios)", 
        col = colores_escala, 
        las = 2, 
        cex.names = 0.6)

Al comparar gráficamente el Magnesio (con una media cercana a \(99.74\text{ mg/L}\)) frente a la Prolina (con una media sobresaliente de \(746.89\text{ mg/L}\) y valores máximos que superan los \(1600\text{ mg/L}\)), se evidencia visualmente una disparidad extrema en las escalas de medición.

Lo que causa un sesgo ya que no entienden que compuesto es quimicamente más importante ; solo leen números . Como la prolina se mide en cientos o miles de unidades y otras variables (como los Fenoles) se mide en decimales (0.3 a 2.0).

## 3.1.2. Demostración Visual Directa de Simetría vs. Sesgo

# Configuración para mostrar 2 gráficos lado a lado
par(mfrow = c(1, 2), mar = c(4, 4, 3, 1))

# --- 1. VARIABLE SIMÉTRICA: ALCOHOL
hist(vinos_num$Alcohol, 
     probability = TRUE, 
     main = "1. Variable Simétrica (Alcohol)", 
     xlab = "Alcohol (% v/v)", 
     col = "#e0f3f8", 
     border = "white")
lines(density(vinos_num$Alcohol), col = "#2b5b84", lwd = 2.5)

# Líneas de Media y Mediana (coinciden)
abline(v = mean(vinos_num$Alcohol), col = "red", lwd = 2, lty = 1)
abline(v = median(vinos_num$Alcohol), col = "blue", lwd = 2, lty = 2)

legend("topright", 
       legend = c(paste("Media:", round(mean(vinos_num$Alcohol), 2)), 
                  paste("Mediana:", round(median(vinos_num$Alcohol), 2))), 
       col = c("red", "blue"), lty = c(1, 2), lwd = 2, bty = "n", cex = 0.8)

# --- 2. VARIABLE CON SESGO POSITIVO: ÁCIDO MÁLICO
hist(vinos_num$Acido_malico, 
     probability = TRUE, 
     main = "2. Variable con Sesgo (Ácido Málico)", 
     xlab = "Ácido Málico", 
     col = "#fee090", 
     border = "white")
lines(density(vinos_num$Acido_malico), col = "#d73027", lwd = 2.5)

# Líneas de Media y Mediana (se separan)
abline(v = mean(vinos_num$Acido_malico), col = "red", lwd = 2, lty = 1)
abline(v = median(vinos_num$Acido_malico), col = "blue", lwd = 2, lty = 2)

legend("topright", 
       legend = c(paste("Media:", round(mean(vinos_num$Acido_malico), 2)), 
                  paste("Mediana:", round(median(vinos_num$Acido_malico), 2))), 
       col = c("red", "blue"), lty = c(1, 2), lwd = 2, bty = "n", cex = 0.8)

# Restaurar la ventana gráfica original
par(mfrow = c(1, 1))
  • Alcohol (Simétrico): La Media (13.00) y la Mediana (13.05) coinciden casi de forma exacta. La curva es equilibrada y con forma de campana, confirmando una distribución normal y libre de valores extremos.

  • Ácido Málico (Sesgo Positivo): La Media (2.34) se desplaza hacia la derecha de la Mediana (1.87). Esto ocurre porque la mayoría de los vinos tienen niveles bajos de acidez, pero unos pocos valores inusualmente altos elevan el promedio general (cola a la derecha).

Detección global de valores atípicos (Boxplot escalado)

Para evaluar la presencia de valores atípicos (outliers) manteniendo la visualización en una misma escala, estandarizamos las variables mediante la función scale()

# Boxplot general con datos estandarizados
boxplot(scale(vinos_num),
        main = "Detección global de valores atípicos (Variables escaladas)",
        col = "lightblue",
        las = 2,
        cex.axis = 0.8)

Vemos que :

  • La mayor parte de los datos se concentran en el rango de \(-2\) a \(+2\) desviaciones estándar ( indica qué tanto se alejan o dispersan los datos respecto a su promedio (media)).

  • Se observan valores atípicos moderados en Ácido málico, Magnesio, Proantocianinas e Intensidad de color

Distribución univariada completa (Histogramas)

Graficamos los histogramas de las 13 variables cuantitativas para analizar la normalidad, curtosis, sesgos y la presencia de modas múltiples.

par(mfrow = c(4, 4), mar = c(2, 2, 2, 1))

for(i in 1:13) {
  hist(vinos_num[[i]], 
       probability = TRUE, # Cambia frecuencia a densidad para superponer la curva
       main = names(vinos_num)[i], 
       col = "darkred", 
       border = "black",
       xlab = "")
  lines(density(vinos_num[[i]]), col = "blue", lwd = 2)
}

par(mfrow = c(1, 1))

  • Normalidad y Simetría: Variables como Alcohol, Ceniza y Ceniza_Alcalinidad muestran formas acampanadas con sesgos mínimos, aproximándose a una distribución normal.

  • Ácido málico, Intensidad_color y Proantocianinas exhiben un claro sesgo positivo (a la derecha) y comportamiento leptocúrtico (alta concentración de datos en valores bajos con colas largas). Por el contrario, la Prolina presenta una fuerte platicurtosis (distribución extendida y chata)..

  • Variables como Flavanoides, Total_fenoles y OD280 muestran distribuciones bimodales o de forma irregular (se observan jorobas principales).

3.Variabilidad y correlaciones globales

En esta sección evaluamos la estructura de covarianza y correlación entre las 13 variables cuantitativas del vino, justificando la estandarización previa al Análisis de Componentes Principales (ACP) e identificando las variables altamente correlacionadas (redundantes).

Matriz de covarianzas y Justificación de estandarización

Calculamos la matriz de covarianzas con las variables en su escala original.

# 1. Matriz de covarianzas de las 13 variables numéricas
 cov(vinos_num)
##                            Alcohol Acido_malico        Ceniza
## Alcohol                 0.65906233   0.08561131  0.0471151590
## Acido_malico            0.08561131   1.24801540  0.0502770393
## Ceniza                  0.04711516   0.05027704  0.0752646353
## Ceniza_Alcalinidad     -0.84109290   1.07633171  0.4062082778
## Magnesio                3.13987812  -0.87077953  1.1229365835
## Total_fenoles           0.14688722  -0.23433772  0.0221455913
## Flavanoides             0.19203322  -0.45863037  0.0315347299
## Noflavanoides_fenoles  -0.01575426   0.04073336  0.0063584714
## Proantocianinas         0.06351752  -0.14114698  0.0015155780
## intensidad_color        1.02828254   0.64483818  0.1646543266
## Matiz                  -0.01331344  -0.14332564 -0.0046821545
## OD280                   0.04169782  -0.29244748  0.0007618358
## Prolina               164.56718498 -67.54886657 19.3197390973
##                       Ceniza_Alcalinidad     Magnesio Total_fenoles
## Alcohol                       -0.8410929    3.1398781    0.14688722
## Acido_malico                   1.0763317   -0.8707795   -0.23433772
## Ceniza                         0.4062083    1.1229366    0.02214559
## Ceniza_Alcalinidad            11.1526862   -3.9747604   -0.67114915
## Magnesio                      -3.9747604  203.9893354    1.91646988
## Total_fenoles                 -0.6711491    1.9164699    0.39168954
## Flavanoides                   -1.1720828    2.7930870    0.54047042
## Noflavanoides_fenoles          0.1504219   -0.4555634   -0.03504512
## Proantocianinas               -0.3771762    1.9328325    0.21937334
## intensidad_color               0.1450242    6.6205206   -0.07999752
## Matiz                         -0.2091181    0.1808513    0.06203888
## OD280                         -0.6562344    0.6693081    0.31102128
## Prolina                     -463.3553450 1769.1586999   98.17105726
##                        Flavanoides Noflavanoides_fenoles Proantocianinas
## Alcohol                 0.19203322          -0.015754260     0.063517520
## Acido_malico           -0.45863037           0.040733362    -0.141146982
## Ceniza                  0.03153473           0.006358471     0.001515578
## Ceniza_Alcalinidad     -1.17208281           0.150421856    -0.377176220
## Magnesio                2.79308703          -0.455563385     1.932832476
## Total_fenoles           0.54047042          -0.035045125     0.219373345
## Flavanoides             0.99771867          -0.066867000     0.373147553
## Noflavanoides_fenoles  -0.06686700           0.015488634    -0.026059868
## Proantocianinas         0.37314755          -0.026059868     0.327594668
## intensidad_color       -0.39916863           0.040120510    -0.033503918
## Matiz                   0.12408197          -0.007471177     0.038664565
## OD280                   0.55826225          -0.044469244     0.210932940
## Prolina               155.44749222         -12.203586301    59.554333778
##                       intensidad_color        Matiz         OD280     Prolina
## Alcohol                     1.02828254 -0.013313443  0.0416978226   164.56718
## Acido_malico                0.64483818 -0.143325638 -0.2924474830   -67.54887
## Ceniza                      0.16465433 -0.004682155  0.0007618358    19.31974
## Ceniza_Alcalinidad          0.14502419 -0.209118054 -0.6562343681  -463.35535
## Magnesio                    6.62052061  0.180851266  0.6693080683  1769.15870
## Total_fenoles              -0.07999752  0.062038876  0.3110212785    98.17106
## Flavanoides                -0.39916863  0.124081969  0.5582622548   155.44749
## Noflavanoides_fenoles       0.04012051 -0.007471177 -0.0444692440   -12.20359
## Proantocianinas            -0.03350392  0.038664565  0.2109329398    59.55433
## intensidad_color            5.37444938 -0.276505801 -0.7058125762   230.76748
## Matiz                      -0.27650580  0.052244961  0.0917662439    17.00022
## OD280                      -0.70581258  0.091766244  0.5040864089    69.92753
## Prolina                   230.76748014 17.000223386 69.9275255507 99166.71736

La varianza de la Prolina va a más de 99,000 unidades, mientras que compuestos clave como los Fenoles, no Flavanoides o la Ceniza tienen varianzas inferiores a 0.1 unidades.

Matriz de correlación

Calculamos la matriz de correlaciones de Pearson y la graficamos utilizando la librería corrplot para identificar las asociaciones lineales y redundancias entre compuestos químicos.

library(corrplot)

# 1. Matriz de correlación de Pearson
matriz_cor <- cor(vinos_num)

# 2. Visualización con corrplot 
matriz_correlacion <- cor(vinos_num)

corrplot(matriz_correlacion,
         method = "color",
         type = "upper",
         addCoef.col = "black", # Muestra los números exactos
         tl.col = "black",
         tl.srt = 45,
         number.cex = 0.5, # Tamaño de los números
         main = "Matriz de Correlaciones de Vinos",
         mar = c(0,0,1,0))

Correlacion positivas altas

  • Flavanoides vs. Total_fenoles (\(r \approx 0.86\)): Existe una correlación positiva lineal muy fuerte. Esto indica una alta redundancia de información: la mayoría de los fenoles totales en estas muestras corresponden a flavanoides, por lo que ambas variables aportan información estructural casi idéntica para clasificar los vinos.

  • Flavanoides vs. OD280 (\(r \approx 0.79\)): La pureza aromática y la concentración de flavanoides están estrechamente ligadas. Vinos con altos flavanoides presentan consistentemente lecturas elevadas de la razón de absorbancia OD280/OD315.

  • Total_fenoles vs. Proantocianinas (\(r \approx 0.68\)): Confirmación del perfil fenólico global: el incremento en fenoles totales se traduce directamente en una mayor presencia de proantocianinas (cuerpo en boca).

Correlaciones Negativas

  • Flavanoides vs. Noflavanoides_fenoles (\(r \approx -0.54\)): Existe una relación inversa moderada; concentraciones altas de flavanoides suelen coincidir con una menor proporción de fenoles no flavanoides.

  • OD280 vs. Alcalinidad de la Ceniza (\(r \approx -0.44\)): Vinos con mayor contenido de minerales alcalinos tienden a presentar menores niveles de pureza aromática OD280.

Variables de Comportamiento Independiente

  • La Ceniza y el Magnesio muestran coeficientes de correlación débiles (\(r < 0.30\)) con la mayoría de los compuestos fenólicos, lo que indica que aportan información ortogonal (independiente) sobre la composición mineral del suelo.

4. Análisis por grupos (Cultivares)

En esta sección segmentamos las 178 muestras de vino según su procedencia (Customer_Segment o Cultivar 1, 2 y 3) para evaluar cómo varían los perfiles químicos entre grupos y verificar si las relaciones de correlación se mantienen constantes entre poblaciones.

Perfil quimico promedio y dispersion por grupo

Calculamos el vector de medias (\(\mu_k\)) y la desviación estándar (\(s_k\)) de las variables más representativas para cada uno de los tres tipos de vino.

library(dplyr)
library(knitr)

#Resumen estadístico por Cultivar (Medias y Desviaciones Estándar)
resumen_grupos <- BD_Wine %>%
  group_by(Customer_Segment) %>%
  summarise(
    N = n(),
    Alcohol_Media = round(mean(Alcohol), 2),
    Alcohol_SD = round(sd(Alcohol), 2),
    Flavanoides_Media = round(mean(Flavanoides), 2),
    Flavanoides_SD = round(sd(Flavanoides), 2),
    Prolina_Media = round(mean(Prolina), 2),
    Prolina_SD = round(sd(Prolina), 2),
    Acido_Malico_Media = round(mean(Acido_malico), 2),
    Acido_Malico_SD = round(sd(Acido_malico), 2)
  )

kable(resumen_grupos, caption = "Tabla 1: Comparación de Promedios y Desviación Estándar por Cultivar")
Tabla 1: Comparación de Promedios y Desviación Estándar por Cultivar
Customer_Segment N Alcohol_Media Alcohol_SD Flavanoides_Media Flavanoides_SD Prolina_Media Prolina_SD Acido_Malico_Media Acido_Malico_SD
1 59 13.74 0.46 2.98 0.40 1115.71 221.52 2.01 0.69
2 71 12.28 0.54 2.08 0.71 519.51 157.21 1.93 1.02
3 48 13.15 0.53 0.78 0.29 629.90 115.10 3.33 1.09
  • Cultivar 1 (Vinos de Alta Calidad/Madurez): Destaca por los niveles más altos de Prolina (1115.7 mg/L), Flavanoides (2.98) y un nivel elevado de Alcohol (13.74%), lo que perfila vinos estructurados y potentes.

  • Cultivar 2 (Vinos Ligeros y Balanceados): Muestra concentraciones moderadas a bajas en casi todos los marcadores; destaca por un nivel inferior de Alcohol (12.28%) y menor intensidad de Prolina (519.5 mg/L).

  • Cultivar 3 (Vinos Secos con Alta Acidez y Bajo Fenol): Presenta la menor concentración de Flavanoides (0.78) y la mayor acidez por Ácido Málico (3.33), diferenciándose drásticamente del Cultivar 1.

Comparación visual por grupos (Boxplot segmentados)

par(mfrow = c(1, 3), mar = c(4, 4, 3, 1))

# Boxplot 1: Alcohol por Cultivar
boxplot(Alcohol ~ Customer_Segment, data = BD_Wine,
        col = c("#1b9e77", "#d95f02", "#7570b3"),
        main = "Alcohol por Cultivar",
        xlab = "Cultivar", ylab = "% v/v")

# Boxplot 2: Flavanoides por Cultivar
boxplot(Flavanoides ~ Customer_Segment, data = BD_Wine,
        col = c("#1b9e77", "#d95f02", "#7570b3"),
        main = "Flavanoides por Cultivar",
        xlab = "Cultivar", ylab = "Unidades")

# Boxplot 3: Prolina por Cultivar
boxplot(Prolina ~ Customer_Segment, data = BD_Wine,
        col = c("#1b9e77", "#d95f02", "#7570b3"),
        main = "Prolina por Cultivar",
        xlab = "Cultivar", ylab = "mg/L")

par(mfrow = c(1, 1))

Matrices de correlacion comparativas por cultivar

Evaluamos si la estructura de correlación interna entre las variables químicas se preserva o cambia drásticamente cuando analizamos los cultivares de forma independiente.

library(corrplot)



# 1. Filtrar las variables cuantitativas por cada grupo
cor_g1 <- cor(BD_Wine[BD_Wine$Customer_Segment == 1, 1:13])
cor_g2 <- cor(BD_Wine[BD_Wine$Customer_Segment == 2, 1:13])
cor_g3 <- cor(BD_Wine[BD_Wine$Customer_Segment == 3, 1:13])

# 2. Panel de 3 matrices de correlación con números
par(mfrow = c(1, 3), mar = c(1, 1, 3, 1))

corrplot(cor_g1, method = "color", type = "lower", tl.cex = 0.6, 
         addCoef.col = "black", number.cex = 0.45,
         title = "Cultivar 1 (N = 59)", mar = c(0, 0, 2, 0))

corrplot(cor_g2, method = "color", type = "lower", tl.cex = 0.6, 
         addCoef.col = "black", number.cex = 0.45,
         title = "Cultivar 2 (N = 71)", mar = c(0, 0, 2, 0))

corrplot(cor_g3, method = "color", type = "lower", tl.cex = 0.6, 
         addCoef.col = "black", number.cex = 0.45,
         title = "Cultivar 3 (N = 48)", mar = c(0, 0, 2, 0))

par(mfrow = c(1, 1))
  • Cultivar 1

    • Muestra la asociación más fuerte entre Total_fenoles y Flavanoides (\(r = 0.80\)), así como una correlación sólida entre Total_fenoles e Intensidad_color (\(r = 0.65\)).

    • La Prolina presenta una correlación positiva moderada-alta con la Intensidad de color (\(r = 0.59\)) y el Alcohol (\(r = 0.36\)), comportamiento característico de vinos estructurados de alta graduación.

  • Cultivar 2

    • La correlación entre Total_fenoles y Flavanoides se reduce a \(r = 0.77\), y la asociación con la Intensidad de color disminuye notablemente (\(r = 0.17\)).

    • El Magnesio y la Prolina muestran una correlación positiva moderada (\(r = 0.50\)), una relación que pasa desapercibida en los demás cultivares.

  • Cultivar 3

    • La relación Flavanoides vs. Total_fenoles cae drásticamente a \(r = 0.24\), demostrando que dentro de este cultivar los flavonoides ya no explican el contenido fenólico total.

    • Destaca la fuerte asociación inversa entre Noflavanoides_fenoles e Intensidad_color (\(r = -0.63\)) y entre la Matriz y la Intensidad_color (\(r = -0.57\)), reflejando la alta presencia de acidez y menor pigmentación de este grupo.

5.”Integración de resultados y conclusiones”

Tras realizar el análisis exploratorio de la base de datos de vinos, se identificaron los siguientes patrones clave:

Pregunta: Con estas diferencias numéricas evidentes entre los tres segmentos y las altas correlaciones detectadas, ¿podremos utilizar un Análisis de Componentes Principales (ACP) para reducir estas 13 dimensiones, eliminar la redundancia y lograr clasificar visualmente a qué cultivar pertenece cada botella de vino?

# Boxplot de Prolina segmentado por Cultivar
boxplot(Prolina ~ Customer_Segment, data = BD_Wine,
        main = "Niveles de Prolina por Cultivar",
        xlab = "Cultivar (Customer_Segment)",
        ylab = "Prolina",
        col = c("lightgreen", "lightpink", "lightblue"))

Si, completamente. El ACP es la herramienta ideal por las siguientes 3 razones fundamentales derivadas de nuestro estudio previo:

. . . .