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.
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.
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.
# 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>
#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.
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:
# 3. CONVERSIÓN CLAVE: Transformar Customer_Segment a Factor (Variable Categórica)
BD_Wine$Customer_Segment <- factor(BD_Wine$Customer_Segment)
# 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.
#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.
# 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.
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.
Extraemos únicamente las 13 columnas numérocas (excluyendo el factor Customer_Segment) para calcular las medidas descriptivas globales.
#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>
# 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.
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
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.
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).
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).
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
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).
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).
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.
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
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.
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")
| 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.
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))
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.
Tras realizar el análisis exploratorio de la base de datos de vinos, se identificaron los siguientes patrones clave:
Distribución y Atípicos: Al observar los histogramas, la variable Alcohol muestra una distribución relativamente simétrica, sugiriendo normalidad. Sin embargo, el Ácido málico presenta un sesgo positivo (cola hacia la derecha), indicando que la mayoría de los vinos tienen concentraciones bajas, con unas pocas muestras de alta acidez. En el diagrama de cajas escalado, se detectaron algunos valores atípicos, particularmente en Ácido málico y Color_intensidad, los cuales deberán tenerse en cuenta para el posterior análisis multivariado para evitar distorsiones.
Variabilidad y Promedios: Al analizar el vector de promedios, destaca la Prolina con un valor medio de 746.89, mostrando además la mayor varianza absoluta según la matriz de covarianzas. Esto es esperado debido a la escala de medición de esta variable frente al resto de los químicos.
Correlaciones: La matriz de correlación térmica revela asociaciones significativas. Existe una fuerte correlación positiva entre los Fenoles Totales y los Flavanoides (0.86), lo cual es lógicamente congruente ya que los flavanoides son un subgrupo de los fenoles. Asimismo, hay una fuerte correlación negativa entre la Intensidad de Color y el Matiz (Hue) (-0.52). Estas altas correlaciones sugieren que hay información redundante que puede ser condensada.
Diferencias por Grupo (Cultivar): El análisis segmentado muestra diferencias claras entre los tres tipos de planta. Por ejemplo, el Cultivar 1 tiene el mayor promedio de Prolina (1115.7) y Alcohol (13.74%), mientras que el Cultivar 3 destaca por tener el Ácido málico más alto (3.33) pero los niveles más bajos de Flavanoides (0.78).
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:
1. Reducción de Redundancia (Alta Correlación): La presencia de fuertes relaciones entre variables (como Flavanoides, Total_fenoles y OD280) indica que las 13 variables comparten información repetida. El ACP nos permitirá resumir esa variabilidad en unos pocos Componentes Principales incorrelacionados entre sí.
2. Separación de Poblaciones (Diferencias por Cultivar): Como muestra el gráfico de Prolina por Cultivar, las concentraciones químicas varían drásticamente según el origen botánico (por ejemplo, el Cultivar 1 exhibe niveles de prolina significativamente superiores a los Cultivares 2 y 3). Esto garantiza que las primeras dimensiones del ACP capturarán suficiente varianza para separar visualmente los grupos en un plano bidimensional (Biplot).
3. Estandarización Obligatoria: Dado el comportamiento de la prolina y las diferencias de escala analizadas en la sección univariada, la aplicación del ACP a través de la Matriz de Correlaciones asegurará que cada variable aporte en igualdad de condiciones matemáticas a la discriminación de los cultivares.
. . . .