En este trabajo se analizan las bases de datos del artículo A climatic classification of the world’s wine regions y del repositorio de UCI Wine Quality para probar la reproducibilidad del experimento realizado.
Para esto se realiza un análisis exploratorio de los datos donde se incluyen estadísticas descriptivas como tablas, diagramas de caja, diagramas de dispersión, histogramas, mapas de calor y demás recursos para exponer los datos con el máximo detalle. Además, se realiza un análisis de componentes principales para determinar las variables que más nos ayudan a representar los datos de forma precisa.
La paquetería principal que se utilizará es una metapaquetería, es decir es un conjunto de distintas librerías agrupadas en una sola. Esta metapaquetería es TidyVerse.
Dentro de esta metapaquetería, esta hecha por paqueterías diseñadas para el análisis de datos, sea limpieza de datos, crear mejores gráficos, o manejar mejor la información.
La base de datos a utilizar se compone de 16 variables climáticas para zonas que representan 813 regiones que cubren el 99% del área vinicultora. A continuación se muestran las variables con su descripción, los hemisferios y las épocas del año cuando se manifiestan.
| Variable | Unidades | Description | Northern Hemisphere | Southern Hemisphere |
|---|---|---|---|---|
| AnnP | (mm) | Annual precipitation | Year | Year |
| GSP | (mm) | Growing season precipitation | April to October | October to April |
| HMP | (mm) | Harvest month precipitation | September | March |
| AnnT | (°C) | Annual average temperature | Year | Year |
| GST | (°C) | Growing season average temperature | April to October | October to April |
| MJT | (°C) | Mean January/July temperature | July | January |
| RPT | (°C) | Ripening period average temperature | August to September | February to March |
| GDD | (°C) | Growing degree days | April to October | October to April |
| HI | (°C) | Huglin Index | April to September | October to March |
| GSDTR | (°C) | Growing season diurnal temperature range | April to October | October to April |
| RPDTR | (°C) | Ripening period diurnal temperature range | August to September | February to March |
| CNI | (°C) | Mean minimum March/September temperature | September | March |
| VPD_GS | (kPa) | Growing season vapour pressure deficit | April to October | October to April |
| VPD_SU | (kPa) | Summer vapour pressure deficit | June to August | December to February |
| SRAD_GS | (\(W/m^{2}\)) | Growing season average day/night downward surface shorwave radiation | April to October | October to April |
| SRAD_SU | (\(W/m^{2}\)) | Summer average day/night downward surface shortwave radiation | June to August | December to February |
Adicionalmente hay variables que contienen información sobre la localización de las regiones, como su nombre, el país donde se encuentra la región, su latitud y longitud. Igualmente, hay dos más variables que son el área en metros cuadrados de la región donde se cultiva la vid y el grupo, que clasifica las regiones de acuerdo a sus características climáticas. Sim embargo, estas variables no se tomarán en cuenta más que para la descripción de los datos, es decir, no se utilizarán para el análisis de componentes principales.
En el marco del análisis, se muestran las primeras y últimas filas de la base de datos.
| Lat | Lon | Location | Country | Region_or_COUNTRY | Area | AnnP | GSP | RipeP | AnnT | GST | MJT | RPT | GDD | HI | GSDTR | RPDTR | CNI | VPD_GS | VPD_SU | SRAD_GS | SRAD_SU | Group | Elevation |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 8.98 | 38.76 | Addis Ababa | ETHIOPIA | ETHIOPIA | 169 | 1099 | 973 | 145 | 17.8 | 17.9 | 17.0 | 17.0 | 1698 | 2057 | 13.0 | 11.1 | 11.3 | 5.58 | 1.78 | 1488 | 566 | 2 | 2296 |
| 37.31 | 13.59 | Agrigento | ITALY | Agrigento | 16781 | 464 | 181 | 36 | 18.7 | 22.5 | 26.5 | 25.6 | 2676 | 2695 | 7.1 | 6.6 | 21.1 | 6.20 | 3.36 | 1745 | 877 | 3 | 242 |
| 21.89 | -102.29 | Aguascalientes | MEXICO | Aguascalientes | 850 | 494 | 452 | 89 | 18.6 | 20.9 | 21.3 | 20.7 | 2338 | 2832 | 16.7 | 14.5 | 13.3 | 9.72 | 3.81 | 1644 | 724 | 1 | 1879 |
| 50.54 | 7.12 | Ahrweiler | GERMANY | Ahr | 522 | 751 | 443 | 60 | 10.7 | 15.0 | 19.3 | 16.9 | 1082 | 1609 | 9.8 | 9.8 | 10.3 | 4.00 | 2.15 | 1186 | 608 | 2 | 108 |
| -28.55 | -66.82 | Aimogasta | ARGENTINA | Arauco | 5 | 300 | 273 | 45 | 19.9 | 24.3 | 27.5 | 24.9 | 3032 | 3462 | 15.6 | 14.7 | 16.4 | 11.54 | 5.63 | 1646 | 725 | 1 | 845 |
| 43.53 | 5.45 | Aix-en-Provence | FRANCE | Bouches-du-Rhone | 11663 | 626 | 361 | 89 | 15.4 | 20.3 | 25.4 | 23.0 | 2208 | 2597 | 10.6 | 10.9 | 15.8 | 7.14 | 4.15 | 1624 | 841 | 3 | 197 |
| Lat | Lon | Location | Country | Region_or_COUNTRY | Area | AnnP | GSP | RipeP | AnnT | GST | MJT | RPT | GDD | HI | GSDTR | RPDTR | CNI | VPD_GS | VPD_SU | SRAD_GS | SRAD_SU | Group | Elevation | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 808 | 41.65 | -0.89 | Zaragoza | SPAIN | Zaragoza | 35294 | 363 | 230 | 33 | 16.5 | 21.3 | 26.5 | 24.2 | 2428 | 2884 | 12.6 | 12.7 | 16.1 | 9.60 | 5.54 | 1666 | 860 | 1 | 215 |
| 809 | 43.19 | 21.72 | Zitoradja | SERBIA | Toplica | 761 | 664 | 406 | 59 | 12.5 | 18.5 | 23.6 | 20.7 | 1828 | 2431 | 12.9 | 14.0 | 11.3 | 6.58 | 3.79 | 1476 | 770 | 2 | 214 |
| 810 | 39.75 | 20.65 | Zitsa | GREECE | Ipeiros | 153 | 1126 | 428 | 87 | 14.8 | 19.9 | 25.0 | 22.7 | 2126 | 2566 | 11.9 | 12.7 | 14.8 | 7.79 | 4.70 | 1621 | 836 | 3 | 684 |
| 811 | 48.86 | 16.05 | Znojmo | CZECHIA | Jihovýchod | 12800 | 550 | 410 | 50 | 10.6 | 16.4 | 21.6 | 18.5 | 1380 | 2049 | 11.9 | 12.0 | 10.0 | 5.53 | 3.15 | 1287 | 670 | 2 | 285 |
| 812 | 47.17 | 8.52 | Zug | SWITZERLAND | Zug | 2 | 1269 | 845 | 100 | 10.5 | 15.7 | 20.5 | 17.7 | 1232 | 1743 | 9.5 | 9.2 | 11.1 | 4.24 | 2.43 | 1305 | 677 | 2 | 428 |
| 813 | 47.48 | 8.54 | Zürich | SWITZERLAND | Zürich | 607 | 1057 | 674 | 79 | 10.5 | 15.7 | 20.3 | 17.6 | 1218 | 1751 | 9.8 | 9.8 | 10.8 | 4.19 | 2.38 | 1289 | 673 | 2 | 404 |
Así, se observan algunos ejemplos como “Addis Ababa” en Etiopía, que tiene una temperatura media anual de 17.8°C, y “Zürich” en Suiza, con una precipitación anual de 1057 mm.
str(wine.data)
## 'data.frame': 813 obs. of 24 variables:
## $ Lat : num 8.98 37.31 21.89 50.54 -28.55 ...
## $ Lon : num 38.76 13.59 -102.29 7.12 -66.82 ...
## $ Location : chr "Addis Ababa" "Agrigento" "Aguascalientes" "Ahrweiler" ...
## $ Country : chr "ETHIOPIA" "ITALY" "MEXICO" "GERMANY" ...
## $ Region_or_COUNTRY: chr "ETHIOPIA" "Agrigento" "Aguascalientes" "Ahr" ...
## $ Area : int 169 16781 850 522 5 11663 968 0 96745 12328 ...
## $ AnnP : int 1099 464 494 751 300 626 664 1840 373 741 ...
## $ GSP : int 973 181 452 443 273 361 292 1139 219 456 ...
## $ RipeP : int 145 36 89 60 45 89 57 142 39 72 ...
## $ AnnT : num 17.8 18.7 18.6 10.7 19.9 15.4 16.3 21.7 15.5 13.8 ...
## $ GST : num 17.9 22.5 20.9 15 24.3 20.3 20.3 24.7 20.7 19.7 ...
## $ MJT : num 17 26.5 21.3 19.3 27.5 25.4 24.7 26.9 27 24.9 ...
## $ RPT : num 17 25.6 20.7 16.9 24.9 23 23.1 25.7 24.1 22.6 ...
## $ GDD : int 1698 2676 2338 1082 3032 2208 2210 3123 2302 2080 ...
## $ HI : int 2057 2695 2832 1609 3462 2597 2396 3331 2801 2501 ...
## $ GSDTR : num 13 7.1 16.7 9.8 15.6 10.6 7.7 12.5 13.5 9.6 ...
## $ RPDTR : num 11.1 6.6 14.5 9.8 14.7 10.9 8 12.4 14.1 9.7 ...
## $ CNI : num 11.3 21.1 13.3 10.3 16.4 15.8 17.4 18.7 15 15.8 ...
## $ VPD_GS : num 5.58 6.2 9.72 4 11.54 ...
## $ VPD_SU : num 1.78 3.36 3.81 2.15 5.63 4.15 2.88 3.48 5.77 3.24 ...
## $ SRAD_GS : int 1488 1745 1644 1186 1646 1624 1660 1524 1730 1481 ...
## $ SRAD_SU : int 566 877 724 608 725 841 859 724 901 771 ...
## $ Group : int 2 3 1 2 1 3 3 3 1 3 ...
## $ Elevation : int 2296 242 1879 108 845 197 16 126 683 96 ...
names(wine.data)
## [1] "Lat" "Lon" "Location"
## [4] "Country" "Region_or_COUNTRY" "Area"
## [7] "AnnP" "GSP" "RipeP"
## [10] "AnnT" "GST" "MJT"
## [13] "RPT" "GDD" "HI"
## [16] "GSDTR" "RPDTR" "CNI"
## [19] "VPD_GS" "VPD_SU" "SRAD_GS"
## [22] "SRAD_SU" "Group" "Elevation"
any(is.na(wine.data))
## [1] FALSE
La función str() revela la estructura del dataset,
indica que contiene 813 observaciones y 24 variables, mientras que
names() lista los nombres de cada columna para facilitar la
identificación de las variables. Este conjunto de datos es ideal para
análisis multivariado, como el análisis de componentes principales (PCA)
o agrupamientos, que permiten explorar las relaciones entre las
características climáticas y las regiones vinícolas. Por otro lado, la
función any() e is.na() permite asegurarse que
no existen entradas vacías en la base de datos que debamos tratar de
algún modo.
| AnnP | GSP | RipeP | AnnT | GST | MJT | RPT | GDD | HI | GSDTR | RPDTR | CNI | VPD_GS | VPD_SU | SRAD_GS | SRAD_SU | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Min | 0.0000 | 0.0000 | 0.00000 | 3.900000 | 9.900000 | 14.200000 | 12.000000 | 314.0000 | 582.0000 | 5.80000 | 5.000000 | 4.000000 | 2.650000 | 1.320000 | 1028.0000 | 510.00000 |
| Q1.25% | 510.0000 | 222.0000 | 32.00000 | 12.200000 | 17.200000 | 21.500000 | 19.400000 | 1532.0000 | 2079.0000 | 10.60000 | 10.700000 | 11.100000 | 5.400000 | 2.900000 | 1420.0000 | 723.00000 |
| Median | 685.0000 | 396.0000 | 56.00000 | 14.600000 | 19.300000 | 23.600000 | 21.300000 | 1973.0000 | 2447.0000 | 12.10000 | 12.300000 | 13.300000 | 6.490000 | 3.590000 | 1571.0000 | 792.00000 |
| Mean | 730.1119 | 418.9471 | 61.61624 | 14.737638 | 19.362485 | 23.619803 | 21.494342 | 1991.6802 | 2453.4932 | 12.39828 | 12.649693 | 13.587331 | 7.155486 | 3.864932 | 1575.3616 | 790.23616 |
| SD | 361.5505 | 256.6828 | 42.54057 | 3.350577 | 2.839462 | 2.825476 | 2.857475 | 590.7176 | 515.8391 | 2.72018 | 2.953714 | 3.306673 | 2.465005 | 1.321916 | 187.1893 | 86.13961 |
| Q3.75% | 931.0000 | 551.0000 | 85.00000 | 17.200000 | 21.300000 | 25.700000 | 23.500000 | 2383.0000 | 2772.0000 | 14.40000 | 14.500000 | 15.800000 | 8.530000 | 4.500000 | 1724.0000 | 856.00000 |
| Max | 2996.0000 | 1974.0000 | 338.00000 | 29.800000 | 30.800000 | 33.600000 | 32.500000 | 4444.0000 | 4380.0000 | 20.80000 | 23.400000 | 26.200000 | 16.890000 | 8.980000 | 2072.0000 | 996.00000 |
El resumen estadístico de las variables muestra, por ejemplo, que la precipitación anual (AnnP) varía de 0 mm a un máximo de 2996 mm, con una mediana de 685 mm y una media de 730.1 mm. La temperatura media anual (AnnT) oscila entre 3.9°C y 29.8°C, con una mediana de 14.6°C. La radiación solar durante la temporada de crecimiento (SRAD_GS) tiene un rango de 1028 a 2072, con una mediana de 1571. Estos valores dan una idea del amplio rango de condiciones climáticas presentes en las regiones vinícolas analizadas.
plot(df)
Al ejecutar plot() obtenemos una matriz de gráficos de
dispersión que explora las relaciones entre las variables climáticas de
las 813 regiones vinícolas incluidas en el dataset. Cada celda en la
matriz muestra una relación bivariada entre dos variables, permitiendo
identificar posibles correlaciones o patrones de asociación entre ellas.
Por ejemplo, al observar la matriz, se pueden identificar relaciones
lineales claras entre algunas variables, como la temperatura media anual
(AnnT) y la temperatura durante la temporada de crecimiento (GST), lo
que sugiere una fuerte correlación entre ambas. Otras relaciones, como
las que involucran la precipitación anual (AnnP) y la radiación solar
(SRAD_GS), parecen mostrar patrones más dispersos, indicando que la
correlación entre estas variables podría ser débil o no lineal.
Aquí se muestra una matriz de calor que ilustra las correlaciones entre distintas variables climáticas y vitivinícolas presentes en el conjunto de datos “wine.data”. Cada celda de la matriz representa el grado de correlación entre dos variables específicas, donde los tonos azules indican una alta correlación positiva, los tonos rojos denotan una correlación negativa, y las áreas blancas representan correlaciones cercanas a cero.
Al examinar esta matriz, se identifican varias relaciones destacables, por ejemplo, se observa una correlación positiva fuerte entre la temperatura media anual (AnnT) y la temperatura durante la temporada de crecimiento (GST), lo cual sugiere una tendencia común en las variaciones de estas dos variables a lo largo de las regiones vinícolas analizadas. Asimismo, la precipitación anual (AnnP) muestra una correlación negativa con la radiación solar durante la temporada de crecimiento (SRAD_GS), lo que indica que las regiones con mayores niveles de precipitación suelen experimentar una radiación solar más baja. Además, variables como los grados días de crecimiento (GDD) y el índice de calor (HI) presentan una alta correlación entre sí, sugiriendo que ambas capturan de manera efectiva condiciones climáticas similares. No obstante, también se identifican relaciones más débiles, como la existente entre la precipitación anual (AnnP) y la temperatura media anual (AnnT), lo que implica que hay una relación lineal débil entre estas dos variables.
Ahora se muestran los histogramas de cada una de las variables con el objetivo de visualizar su distribución. En el análisis de los histogramas podemos ver diferentes indicadores de distribución, por ejemplo, el histograma de la precipitación anual (AnnP) revela una distribución asimétrica con una cola larga hacia la derecha, indicando que la mayoría de las regiones tienen precipitaciones relativamente bajas, aunque algunas presentan valores significativamente altos, probablemente debido a condiciones más húmedas. En contraste, el histograma de los Grados Sol Anuales (GSP) muestra una distribución más simétrica y concentrada, con un pico alrededor de los 1500 grados sol, sugiriendo niveles similares de radiación solar durante la temporada de crecimiento en la mayoría de las regiones vinícolas, lo que puede influir en la maduración de las uvas.
El histograma de la radiación solar durante la temporada de maduración (RipeP) presenta una distribución sesgada hacia la izquierda, con la mayoría de las regiones ubicadas en el rango de 150 a 250 unidades, sugiriendo que este factor varía considerablemente entre las regiones. Por otro lado, la temperatura media anual (AnnT) muestra una distribución relativamente simétrica con un pico en torno a los 15°C, indicando temperaturas similares en la mayoría de las regiones, lo que es crucial para el cultivo de la vid. El índice de nubosidad (CNI) presenta una distribución bimodal con dos picos principales, sugiriendo que las regiones se agrupan en dos categorías según sus niveles de nubosidad, lo que puede afectar la radiación solar recibida y, por ende, las características del vino.
El histograma de la radiación solar durante la temporada de crecimiento (RPDTR) también muestra una distribución asimétrica con una cola a la derecha, indicando que la mayoría de las regiones tienen niveles relativamente bajos de radiación solar durante esta temporada. El histograma de GSDTR, que mide la radiación solar durante la temporada de crecimiento, muestra una distribución similar a la de RPDTR, con asimetría hacia la derecha, lo que refleja variabilidad en los patrones de radiación solar entre regiones. El Índice de Calor (HI) presenta una distribución bimodal, con dos picos principales, indicando que las regiones se agrupan en función de sus valores de HI, lo que puede influir en la idoneidad climática para el cultivo de la vid.
El histograma del Déficit de Presión de Vapor durante la temporada de maduración (VPD_SU) muestra una distribución asimétrica con una larga cola hacia la derecha, sugiriendo que la mayoría de las regiones tienen valores bajos de VPD_SU, aunque algunas presentan valores altos. En cambio, el Déficit de Presión de Vapor durante la temporada de crecimiento (VPD_GS) presenta una distribución más uniforme, sin picos pronunciados, lo que indica una distribución más homogénea de los valores entre regiones. La radiación solar durante la temporada de crecimiento (SRAD_GS) muestra una distribución bimodal, con dos picos principales, indicando que las regiones se agrupan en dos categorías en cuanto a sus niveles de radiación solar durante esta temporada. Finalmente, el histograma de la radiación solar durante la temporada de maduración (SRAD_SU) refleja una distribución más uniforme, sin picos prominentes, lo que sugiere que los valores están distribuidos de manera más homogénea entre las regiones vinícolas.
El análisis de los boxplots nos proporciona información sobre la distribución y variabilidad de cada factor en las regiones vinícolas.Como ejemplos relevantes podemos remarcar el boxplot de la precipitación anual (AnnP), que muestra una distribución asimétrica con una larga cola hacia la derecha. Esto indica que, aunque la mayoría de las regiones presentan niveles de precipitación relativamente bajos, hay algunas pocas regiones con valores excepcionalmente altos, lo que sugiere una notable variabilidad en las condiciones de humedad entre las diferentes áreas vitivinícolas. Por otro lado, el boxplot de los Grados Sol Anuales (GSP) revela una distribución más simétrica y concentrada, con la mediana alrededor de las 1500 unidades. Este patrón sugiere que la mayoría de las regiones vinícolas tienen niveles de radiación solar durante la temporada de crecimiento bastante uniformes, lo que puede ser crucial para la maduración de las uvas y la calidad del vino (en concordancia con lo mostrado en el histograma).
En el caso de la radiación solar durante la temporada de maduración de las uvas (RipeP), el boxplot muestra una mediana en torno a las 200 unidades, pero con algunos valores atípicos que alcanzan casi las 350 unidades. Esto indica una variabilidad considerable en la radiación solar recibida durante la maduración entre diferentes regiones. La temperatura media anual (AnnT) presenta un boxplot con una distribución más simétrica y una mediana alrededor de los 15°C, lo que sugiere que la mayoría de las regiones tienen temperaturas medias anuales similares, un factor importante para el cultivo de la vid. Finalmente, el boxplot de la Temperatura Media durante la Temporada de Crecimiento (GST) muestra una distribución simétrica con una mediana cercana a los 20°C. Esto indica que la mayoría de las regiones vinícolas tienen valores de GST relativamente uniformes, lo cual es relevante para el desarrollo y maduración de la vid.
Si realizamos nuestro Análisis de Componentes Principales utilizando el parámetro de escala “True” estamos escalando con el fin de utilizar la matriz de correlación. Ejecutando el código llegamos al siguiente resultado:
pca_res <- prcomp(df, scale. = T)
summary(pca_res)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 2.9185 2.0684 1.21551 0.9209 0.61916 0.44462 0.37553
## Proportion of Variance 0.5324 0.2674 0.09234 0.0530 0.02396 0.01236 0.00881
## Cumulative Proportion 0.5324 0.7997 0.89208 0.9451 0.96904 0.98140 0.99021
## PC8 PC9 PC10 PC11 PC12 PC13 PC14
## Standard deviation 0.22580 0.21464 0.16086 0.12039 0.09214 0.07694 0.04647
## Proportion of Variance 0.00319 0.00288 0.00162 0.00091 0.00053 0.00037 0.00013
## Cumulative Proportion 0.99340 0.99628 0.99789 0.99880 0.99933 0.99970 0.99983
## PC15 PC16
## Standard deviation 0.04055 0.03167
## Proportion of Variance 0.00010 0.00006
## Cumulative Proportion 0.99994 1.00000
El análisis de componentes principales (PCA) aplicado al conjunto de datos revela información clave sobre la varianza explicada por cada componente principal. Según el resumen del PCA, el primer componente principal (PC1) explica el 53.24% de la varianza total, mientras que el segundo componente principal (PC2) añade otro 26.74%, sumando así un total del 79.97% de la varianza explicada por los dos primeros componentes. Los siguientes componentes aportan una menor proporción de varianza, con el tercer componente (PC3) explicando un 9.23%, el cuarto (PC4) un 5.30%, y así sucesivamente.
Los primeros cuatro componentes juntos explican el 94.51% de la varianza total, lo que indica que la mayoría de la información del conjunto de datos puede ser capturada por estos componentes principales. Los componentes adicionales (PC5 a PC16) contribuyen con proporciones de varianza cada vez menores, y su acumulado alcanza el 100% con una suma muy pequeña en las últimas componentes.
Este scree plot, utilizado como gráfico de sedimentación, nos indica algo muy similar a lo analizado en el paso anterior, indicando que un 89% de la varianza total es representada en los primeros 3 componentes principales.
eigenvalues <- pca_res$sdev^2
eigenvalues
## [1] 8.517695869 4.278144022 1.477465440 0.848002091 0.383352921 0.197682706
## [7] 0.141019180 0.050984813 0.046068589 0.025874664 0.014493073 0.008490580
## [13] 0.005919355 0.002159513 0.001644461 0.001002722
| PC1 | PC2 | PC3 | PC4 | |
|---|---|---|---|---|
| AnnP | -0.1586973 | 0.2851803 | -0.3549222 | 0.4062253 |
| GSP | -0.1603012 | 0.3318002 | -0.4215084 | 0.1354349 |
| RipeP | -0.1214341 | 0.3733331 | -0.3688080 | 0.1021955 |
| AnnT | 0.2777739 | 0.1884970 | 0.0844601 | 0.2314346 |
| GST | 0.3052051 | 0.2096747 | -0.0086191 | -0.0381390 |
| MJT | 0.2873496 | 0.1869746 | -0.0793244 | -0.2666097 |
| RPT | 0.2990536 | 0.2115383 | 0.0289362 | -0.0747997 |
| GDD | 0.3024856 | 0.2171626 | -0.0071893 | -0.0609062 |
| HI | 0.3159828 | 0.1253661 | -0.1413288 | -0.1738126 |
| GSDTR | 0.1556360 | -0.3333357 | -0.4322789 | 0.0155989 |
| RPDTR | 0.1379532 | -0.3544601 | -0.4204508 | 0.0346908 |
| CNI | 0.2162822 | 0.3409840 | 0.2376890 | 0.0469260 |
| VPD_GS | 0.3058367 | -0.1355224 | -0.1921000 | -0.1165434 |
| VPD_SU | 0.2923277 | -0.1593104 | -0.1969827 | -0.1510292 |
| SRAD_GS | 0.2703462 | -0.1341578 | 0.1029681 | 0.5444752 |
| SRAD_SU | 0.2420912 | -0.1798754 | 0.1397550 | 0.5514413 |
Con este código podemos observar que el primer y segundo componente (PC1 y PC2) tienen valores propios de 8.52 y 4.28 respectivamente, lo que indica que entre ambos explican una gran parte de la variabilidad en los datos. A medida que avanzamos hacia los componentes superiores, los valores propios disminuyen, lo que indica que estos explican cada vez menos variabilidad.
Por otro lado, los vectores propios muestran la relación entre las variables originales y cada componente principal. En el primer componente (PC1), las variables climáticas como la temperatura media durante la temporada de crecimiento (GST), el índice de calor (HI) y la radiación solar durante la temporada de maduración (SRAD_GS y SRAD_SU) tienen las cargas más altas, lo que sugiere que estas variables contribuyen significativamente a la variabilidad explicada por este componente. En el segundo componente (PC2), las variables de precipitación anual (AnnP), grados sol durante la temporada de crecimiento (GSP) y radiación solar durante la temporada de maduración (RipeP) muestran una mayor influencia.
num_components <- sum(eigenvalues > 1)
num_components
## [1] 3
Estas líneas de código aplican el criterio de Kaiser para determinar el número adecuado de componentes principales a retener en un análisis de componentes principales (PCA). Según la teoría de Kaiser, solo se deben conservar aquellos componentes cuyos valores propios (eigenvalues) sean mayores a 1. Esto se basa en la premisa de que un componente con un valor propio superior a 1 explica más varianza que una variable original estandarizada, lo que lo hace útil para la interpretación y reducción dimensional.
Al sumar los eigenvalores que cumplen con esta condición, el código identifica cuántos componentes retienen una cantidad significativa de información de los datos originales. Esta técnica es común en el PCA para simplificar el modelo sin perder información relevante, facilitando el análisis de datos de alta dimensionalidad. En este caso, se obtendría el número de componentes principales a utilizar basado en los eigenvalores calculados previamente.
En esta gráfica se observa la relación entre la temperatura media de la temporada de crecimiento (GST) y la precipitación estacional acumulada (GSP). Los puntos rojos, correspondientes al Grupo 1, se concentran en los valores más bajos de GSP y GST, lo que indica que este grupo está asociado a regiones con menores niveles de precipitación y temperaturas moderadas. El Grupo 2 (verde) tiene una tendencia clara hacia valores más bajos de GST, aunque presenta una distribución más amplia en GSP. El último grupo (Grupo 3 - azul) se extiende en el eje de GSP con mayor dispersión, sugiriendo que incluye regiones con altos niveles de precipitación, aunque con temperaturas ligeramente superiores al Grupo 2.
En esta gráfica se muestra la relación entre la amplitud térmica durante la temporada de crecimiento (GSDTR) y la precipitación (GSP). El Grupo 1, representado por los puntos rojos, se concentra nuevamente en los valores más bajos de GSP y GSDTR, lo que refleja una menor variabilidad térmica en zonas con menor precipitación. El Grupo 2, marcado en verde, cubre una gama más amplia de GSDTR, sugiriendo que está asociado a regiones con mayor variabilidad térmica en regiones con mayor precipitación. El Grupo 3 (azul) muestra una dispersión considerable en GSP, pero en general tiene una menor variabilidad térmica en comparación con el Grupo 2.
En este caso estamos examinando la relación entre el déficit de presión de vapor durante la temporada de crecimiento (VPD_GS) y la precipitación acumulada. El Grupo 1, identificado con los puntos rojos, se asocia a valores altos de VPD_GS y bajos de GSP, lo que sugiere que se encuentran en regiones más secas con altos niveles de evaporación. El Grupo 2 (verde) presenta menores valores de VPD_GS con una mayor variabilidad en GSP, lo que indica regiones con condiciones más húmedas. El Grupo 3 (azul) tiene los valores más bajos de VPD_GS y muestra una amplia dispersión en GSP, lo que sugiere que corresponde a regiones con condiciones climáticas más húmedas y menos evaporación.
Esta gráfica muestra la interacción entre la radiación solar acumulada durante la temporada de crecimiento (SRAD_GS) y la precipitación estacional acumulada (GSP). Podemos explicar que los valores más altos de SRAD_GS en el Grupo 1 sugieren que estas regiones experimentan mayor exposición al sol durante la temporada de crecimiento. Sin embargo, a medida que aumenta la precipitación (GSP), la radiación solar tiende a disminuir, lo que podría indicar que las regiones más lluviosas no reciben tanta luz solar. El Grupo 3, con mayor GSP y valores medios de SRAD_GS, podría representar regiones con un clima más templado y lluvioso.
En esta gráfica podemos notar que las regiones representadas en el Grupo 3, que presentan altos valores de GSP y están a bajas elevaciones, podrían estar ubicadas en valles o zonas costeras. Por otro lado, las regiones del Grupo 1, con menores precipitaciones y ubicadas en elevaciones más altas, podrían estar en zonas montañosas.
En esta gráfica podemos ver que las regiones del Grupo 2, que consistentemente muestran temperaturas más bajas, pueden estar en altitudes más altas. En cambio, las regiones en el Grupo 1 y Grupo 3 cuentan con temperaturas más altas en elevaciones más bajas.
Recordando que VPD_GS se refiere al déficit de presión de vapor durante la temporada de crecimiento, en esta figura observamos cómo el Grupo 1 tiene valores más altos de VPD_GS, corresponde a regiones donde la atmósfera ejerce una mayor demanda evaporativa. Estas regiones podrían estar en climas áridos o semiáridos, donde la este factor se presenta con más intensidad. Las regiones en el Grupo 2, con valores más bajos de VPD_GS, probablemente experimenten menos estrés hídrico, lo que sugiere climas más frescos o húmedos.
Con estos dos mapas podemos notar que existe una amplia concentración de áreas vinícolas en Europa, región que concuerda con los análisis de temperatura y clima propuestos en las gráficas de dispersión anteriores para el Grupo 2. Este grupo, caracterizado por temperaturas más bajas y mayor variabilidad en la precipitación, coincide con las condiciones encontradas en muchas regiones vinícolas europeas, donde el clima moderado y la alta disponibilidad de agua son ideales para la viticultura.
Además, notamos otras zonas de alta recurrencia para este tipo de actividad en Sudamérica, principalmente en los Grupos 1 y 2. El Grupo 1, asociado con menores precipitaciones y temperaturas moderadas, refleja las regiones vinícolas de Argentina y Chile, que se benefician de un clima seco y cálido. El Grupo 2, con una gama más amplia de temperaturas y precipitación, representa áreas en Brasil y Uruguay, donde las condiciones climáticas son más variables, pero aún adecuadas para el cultivo de la vid.
En Norteamérica, la concentración vinícola se observa principalmente en el Grupo 1 y 2, coincidiendo con regiones como California, que tiene un clima mediterráneo con temperaturas moderadas y suficiente precipitación estacional. Por último, en Oceanía, las áreas vinícolas se distribuyen de manera más equilibrada entre los tres grupos, lo que sugiere una variabilidad climática que permite la producción de vino en una gama más amplia de condiciones.
Este análisis confirma que la ubicación de las regiones vinícolas en relación con las variables climáticas examinadas es consistente con las características de cada grupo, ayudando a entender mejor los factores que contribuyen a la aptitud de estas áreas para la viticultura.
Si realizamos nuestro Análisis de Componentes Principales utilizando el parámetro de escala “False” estamos escalando con el fin de utilizar la matriz de correlación. Ejecutando el código llegamos al siguiente resultado:
pca_res <- prcomp(df, scale. = FALSE)
summary(pca_res)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6
## Standard deviation 791.8546 426.6968 162.41047 105.12197 93.38385 24.36250
## Proportion of Variance 0.7325 0.2127 0.03082 0.01291 0.01019 0.00069
## Cumulative Proportion 0.7325 0.9452 0.97605 0.98896 0.99915 0.99984
## PC7 PC8 PC9 PC10 PC11 PC12 PC13 PC14
## Standard deviation 11.45843 1.39 1.253 0.8185 0.6872 0.4243 0.2779 0.1837
## Proportion of Variance 0.00015 0.00 0.000 0.0000 0.0000 0.0000 0.0000 0.0000
## Cumulative Proportion 0.99999 1.00 1.000 1.0000 1.0000 1.0000 1.0000 1.0000
## PC15 PC16
## Standard deviation 0.1252 0.08954
## Proportion of Variance 0.0000 0.00000
## Cumulative Proportion 1.0000 1.00000
El análisis de componentes principales (PCA) aplicado al conjunto de datos revela información clave sobre la varianza explicada por cada componente principal. Según el resumen del PCA, el primer componente principal (PC1) explica el 73.25% de la varianza total, mientras que el segundo componente principal (PC2) añade otro 21.27%, sumando así un total del 94.52% de la varianza explicada. Esto supone un cambio muy grande a comparación del uso de la matriz de correlación, pues con sólo dos componentes superamos el 90% de variabilidad explicada.
Este scree plot, utilizado como gráfico de sedimentación, nos indica algo muy similar a lo analizado en el paso anterior, indicando que un 94% de la varianza total es representada en los primeros 2 componentes principales.
## [1] 6.270337e+05 1.820701e+05 2.637716e+04 1.105063e+04 8.720544e+03
## [6] 5.935312e+02 1.312956e+02 1.932154e+00 1.569328e+00 6.699584e-01
## [11] 4.722406e-01 1.800084e-01 7.724934e-02 3.374207e-02 1.567955e-02
## [16] 8.017894e-03
| PC1 | PC2 | PC3 | PC4 | |
|---|---|---|---|---|
| AnnP | -0.1426274 | 0.7833953 | -0.4141587 | 0.1577589 |
| GSP | -0.0776751 | 0.5488804 | 0.2972654 | -0.0226167 |
| RipeP | -0.0055855 | 0.0884884 | 0.0587106 | -0.0388670 |
| AnnT | 0.0036714 | 0.0007926 | -0.0046573 | -0.0089249 |
| GST | 0.0034965 | 0.0008663 | -0.0005233 | -0.0034298 |
| MJT | 0.0032571 | 0.0008118 | 0.0019533 | 0.0017429 |
| RPT | 0.0033918 | 0.0009160 | -0.0010756 | -0.0027411 |
| GDD | 0.7330086 | 0.2019309 | -0.0350054 | -0.6388182 |
| HI | 0.6422164 | 0.0542202 | 0.1844008 | 0.7393200 |
| GSDTR | 0.0008831 | -0.0025968 | -0.0026579 | 0.0189111 |
| RPDTR | 0.0006970 | -0.0028524 | -0.0037278 | 0.0219594 |
| CNI | 0.0032291 | 0.0022974 | -0.0014280 | -0.0156897 |
| VPD_GS | 0.0023855 | -0.0019209 | -0.0019281 | 0.0085402 |
| VPD_SU | 0.0011748 | -0.0010848 | -0.0010572 | 0.0057309 |
| SRAD_GS | 0.1447314 | -0.1624429 | -0.7498450 | 0.0528610 |
| SRAD_SU | 0.0532496 | -0.0840267 | -0.3729713 | 0.1196630 |
En el código anterior podemos ver los vectores propios y valores propios obtenidos con la matriz de covarianza. Los eigenvalores o valores propios explican qué tanto de la varianza total está explicada por cada componente, mientras que los eigenvectores o vectores propios indican las direcciones principales en las que ocurre esta variación. Más adelante en el análisis de componentes principales usaremos estos valores. La primera columna es la dirección (o componente) que explica la mayor parte de la varianza, mientras que sucesivamente se va perdiendo poder explicativo.
PCA con Eigenvalores y Eigenvectores
data_transformada <- as.matrix(df) %*% eigen_result$vectors
kbl(head(data_transformada)) %>%
kable_styling(bootstrap_options = c("hover", "condensed")) %>%
scroll_box(width = "900px")
| 2578.364 | 1572.9852 | -1164.588 | -728.3225 | -903.1719 | -21.88524 | 13.199050 | -12.72347 | 2.6573873 | 15.44440 | -20.38164 | -2.520316 | 0.9481139 | -3.293093 | 0.4892846 | 0.5825110 |
| 3911.539 | 795.4396 | -1368.705 | -547.6363 | -604.9012 | 131.86373 | 1.016414 | -14.88655 | 1.3313535 | 16.94891 | -19.03009 | -3.000507 | 0.1793219 | -3.478554 | 0.8034925 | 0.7955697 |
| 3703.334 | 940.7334 | -1127.620 | -838.2608 | -771.3394 | 39.82641 | 29.704295 | -11.84087 | 2.1734780 | 15.31696 | -19.40429 | -1.812955 | -0.5998815 | -3.947360 | 0.7649863 | 0.8064358 |
| 1888.883 | 898.7901 | -1033.205 | -740.0643 | -550.2564 | 80.56932 | 5.379464 | -12.80589 | 0.4295092 | 15.63252 | -19.65347 | -3.202204 | 0.3008749 | -3.408165 | 0.8416669 | 0.8374815 |
| 4658.867 | 860.5183 | -1013.068 | -836.0082 | -640.7120 | 32.47263 | 7.172579 | -14.02745 | 1.1709791 | 16.03769 | -19.13185 | -3.519623 | 0.3365077 | -3.379226 | 0.8904128 | 0.7233885 |
| 3448.701 | 948.6573 | -1276.713 | -783.1704 | -662.1840 | 139.31398 | 34.646971 | -14.73800 | 0.9550253 | 16.30858 | -19.37008 | -2.968755 | 0.3876570 | -3.539639 | 0.9333135 | 0.7806887 |
En este caso, cada columna de la matriz que denominamos “data_transformada” es un componente principal. También calculamos la proporción de la varianza explicada por cada componente dividiendo cada eigenvalor por la suma total de los eigenvalores o valores propios.
Un Biplot nos ayuda a ver la relación de los datos originales en los componentes principales.
Diferencia entre utilizar la matriz de correlación y la matriz de covarianza:
Al comparar los resultados obtenidos del Análisis de Componentes Principales (PCA) utilizando la matriz de correlación y la de covarianza, es posible observar diferencias notables tanto en la magnitud de los componentes como en la proporción de varianza explicada. Cuando se utiliza la matriz de correlación, las variables son escaladas de manera que cada una tenga una varianza unitaria, eliminando las diferencias en magnitudes entre ellas. El primer componente principal (PC1) explica el 53.24% de la varianza total, seguido del segundo componente (PC2), que explica un 26.74%, lo que genera una varianza acumulada de 79.97% con solo dos componentes. La proporción de varianza explicada por los componentes restantes disminuye. Esta distribución más equilibrada de la varianza entre los componentes es característica de un análisis basado en la matriz de correlación porque todas las variables contribuyen de manera similar al análisis, sin que las diferencias en sus escalas originales influyan significativamente en los resultados.
Por otro lado, al utilizar la matriz de covarianza (sin escalar) el análisis muestra una concentración mucho mayor de la varianza en los primeros componentes. El primer componente principal (PC1) captura el 73.25% de la varianza total, seguido del segundo componente (PC2), que explica un 21.27% adicional, lo que suma un 94.52% de varianza acumulada en tan solo dos componentes. Esto implica que casi toda la estructura de los datos puede ser descrita por un espacio bidimensional, mientras que los componentes restantes explican fracciones mínimas de la varianza. Este resultado puede ser generado por componentes principales que pueden parecer más importantes debido a las diferencias en las escalas de las variables originales.
| Variables | Tipo | Descripción |
|---|---|---|
| fixed_acidity | Continua | |
| volatile_acidity | Continua | |
| citric_acid | Continua | |
| residual_sugar | Continua | |
| chlorides | Continua | |
| free_sulfur_dioxide | Continua | |
| total_sulfur_dioxide | Continua | |
| density | Continua | |
| pH | Continua | |
| sulphates | Continua | |
| alcohol | Continua | |
| quality | Entero | Calificación entre 0 y 10 |
| color | Categórica | blanco o tinto |
Entre las variables están los ácidos fijos “fixed acidity”, acidez volátil, “volatile.acidity”, ácido cítrico “citric.acid” , azúcar residual “residual.sugar”, cloruros “chlorides”, dióxido de azufre libre “free.sulfur.dioxide”, dióxido de azufre total “total.sulfur.dioxide”, densidad “density”, el pH “pH”, los sulfatos “sulphates”, la concentración de alcohol “alcohol”, calidad dada por catadores “quality”, grupo de vino “group”.
| fixed.acidity | volatile.acidity | citric.acid | residual.sugar | chlorides | free.sulfur.dioxide | total.sulfur.dioxide | density | pH | sulphates | alcohol | quality | Group |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 7.4 | 0.70 | 0.00 | 1.9 | 0.076 | 11 | 34 | 0.9978 | 3.51 | 0.56 | 9.4 | 5 | 1 |
| 7.8 | 0.88 | 0.00 | 2.6 | 0.098 | 25 | 67 | 0.9968 | 3.20 | 0.68 | 9.8 | 5 | 1 |
| 7.8 | 0.76 | 0.04 | 2.3 | 0.092 | 15 | 54 | 0.9970 | 3.26 | 0.65 | 9.8 | 5 | 1 |
| 11.2 | 0.28 | 0.56 | 1.9 | 0.075 | 17 | 60 | 0.9980 | 3.16 | 0.58 | 9.8 | 6 | 1 |
| 7.4 | 0.70 | 0.00 | 1.9 | 0.076 | 11 | 34 | 0.9978 | 3.51 | 0.56 | 9.4 | 5 | 1 |
| 7.4 | 0.66 | 0.00 | 1.8 | 0.075 | 13 | 40 | 0.9978 | 3.51 | 0.56 | 9.4 | 5 | 1 |
| fixed.acidity | volatile.acidity | citric.acid | residual.sugar | chlorides | free.sulfur.dioxide | total.sulfur.dioxide | density | pH | sulphates | alcohol | quality | Group | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 6492 | 6.5 | 0.23 | 0.38 | 1.3 | 0.032 | 29 | 112 | 0.99298 | 3.29 | 0.54 | 9.7 | 5 | 2 |
| 6493 | 6.2 | 0.21 | 0.29 | 1.6 | 0.039 | 24 | 92 | 0.99114 | 3.27 | 0.50 | 11.2 | 6 | 2 |
| 6494 | 6.6 | 0.32 | 0.36 | 8.0 | 0.047 | 57 | 168 | 0.99490 | 3.15 | 0.46 | 9.6 | 5 | 2 |
| 6495 | 6.5 | 0.24 | 0.19 | 1.2 | 0.041 | 30 | 111 | 0.99254 | 2.99 | 0.46 | 9.4 | 6 | 2 |
| 6496 | 5.5 | 0.29 | 0.30 | 1.1 | 0.022 | 20 | 110 | 0.98869 | 3.34 | 0.38 | 12.8 | 7 | 2 |
| 6497 | 6.0 | 0.21 | 0.38 | 0.8 | 0.020 | 22 | 98 | 0.98941 | 3.26 | 0.32 | 11.8 | 6 | 2 |
Primero se combinaron dos bases de datos, una de vinos blancos y otra de vinos rojos. Los cuales individualmente tenían 4898 y 1599 datos respectivamente y exactamente las mismas columnas. Estas dos bases las juntamos en un dataset llamado WINEDATA, el cual contiene la información de 6497 vinos blancos y rojos representados por 13 variables que describen su composición química. Se pueden observar las primeras y últimas filas.
str(WineData)
## 'data.frame': 6497 obs. of 13 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 ...
## $ Group : num 1 1 1 1 1 1 1 1 1 1 ...
names(WineData)
## [1] "fixed.acidity" "volatile.acidity" "citric.acid"
## [4] "residual.sugar" "chlorides" "free.sulfur.dioxide"
## [7] "total.sulfur.dioxide" "density" "pH"
## [10] "sulphates" "alcohol" "quality"
## [13] "Group"
any(is.na(WineData))
## [1] FALSE
La función str() revela la estructura del dataset,
indica que contiene 6497 observaciones y 13 variables, mientras que
names() lista los nombres de cada columna para facilitar la
identificación de las variables. Este conjunto de datos es ideal para
análisis multivariado, como el análisis de componentes principales (PCA)
o agrupamientos, que permiten explorar las relaciones entre las
características climáticas y las regiones vinícolas. Por otro lado, la
función any() e is.na() permite asegurarse que
no existen entradas vacías en la base de datos que debamos tratar de
algún modo.
| fixed.acidity | volatile.acidity | citric.acid | residual.sugar | chlorides | free.sulfur.dioxide | total.sulfur.dioxide | density | pH | sulphates | alcohol | quality | Group | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Min | 3.800000 | 0.0800000 | 0.0000000 | 0.600000 | 0.0090000 | 1.00000 | 6.00000 | 0.9871100 | 2.7200000 | 0.2200000 | 8.000000 | 3.0000000 | 1.0000000 |
| Q1.25% | 6.400000 | 0.2300000 | 0.2500000 | 1.800000 | 0.0380000 | 17.00000 | 77.00000 | 0.9923400 | 3.1100000 | 0.4300000 | 9.500000 | 5.0000000 | 2.0000000 |
| Median | 7.000000 | 0.2900000 | 0.3100000 | 3.000000 | 0.0470000 | 29.00000 | 118.00000 | 0.9948900 | 3.2100000 | 0.5100000 | 10.300000 | 6.0000000 | 2.0000000 |
| Mean | 7.215307 | 0.3396660 | 0.3186332 | 5.443235 | 0.0560339 | 30.52532 | 115.74457 | 0.9946966 | 3.2185008 | 0.5312683 | 10.491801 | 5.8183777 | 1.7538864 |
| SD | 1.296434 | 0.1646365 | 0.1453179 | 4.757804 | 0.0350336 | 17.74940 | 56.52185 | 0.0029987 | 0.1607872 | 0.1488059 | 1.192712 | 0.8732553 | 0.4307787 |
| Q3.75% | 7.700000 | 0.4000000 | 0.3900000 | 8.100000 | 0.0650000 | 41.00000 | 156.00000 | 0.9969900 | 3.3200000 | 0.6000000 | 11.300000 | 6.0000000 | 2.0000000 |
| Max | 15.900000 | 1.5800000 | 1.6600000 | 65.800000 | 0.6110000 | 289.00000 | 440.00000 | 1.0389800 | 4.0100000 | 2.0000000 | 14.900000 | 9.0000000 | 2.0000000 |
El resumen estadístico de las variables del data frame nos arroja que la acidez fija tiene un mínimo de 3.8, un máximo de 15.9 y una media de 7.22. El pH tiene un mínimo de 2.7, un máximo de 4 y una media de 3.2. También vemos que la calidad tiene un mínimo de 3, un máximo de 9 y una media con 5.8. También vimos que el porcentaje de alcohol tiene un máximo de 14.9 y un mínimo de 8, con una media de 10.49. Estos valores nos dan una idea de los valores de los vinos.
plot(df)
Al ejecutar plot(df) obtenemos una matriz de gráficos de dispersión que explora las relaciones entre las variables que vienen en el dataset de los vinos. Cada celda de la matriz muestra una relación bivariada entre dos variables, permitiéndonos así identificar visualmente posibles patrones y correlaciones entre estas. Por ejemplo, alcanzamos a ver una correlación negativa entre el pH y los ácidos fijos. Aunque en general podemos observar que las matrices de las variables tienen patrones bastante dispersos. También podemos observar que en el caso de Grupo con todos no hay nada claro, sino que todos los datos se cargan de un lado u otro, esto se debe a que la variable grupo es categórica.
Aquí se muestra una matriz de calor que ilustra las correlaciones entre distintas variables climáticas y vitivinícolas presentes en el conjunto de datos “wine.data”. Como sabemos, cada celda de la matriz representa el grado de correlación entre dos variables específicas, donde los tonos rojos indican una alta correlación negativa, los tonos azules denotan una correlación positiva, y las áreas blancas representan correlaciones cercanas a cero. Por ejemplo vemos una correlación positiva medianamente alta entre el total del sulfuro y el Grupo. También alcanzamos a ver una correlación medianamente positiva entre el dióxido de azufre libre y dióxido de azufre total. Vemos también una alta correlación negativa de acidez volátil y el Grupo. También vemos una correlación altamente negativa con la densidad y el alcohol. Aunque como podemos observar hay bastante correlaciones débiles entre las variables y varias cercanas al blanco, es decir con una correlación baja.
Podemos observar que el histograma de fixed.acidity tiene una distribución algo simétrica más cargada a los números entre el 6 y 8 con un pico entre el 6 y el 7. El histograma de volatile acidity está bastante cargado a la izquierda y vemos que la mayoría de los vinos tienen una acidez volátil muy pequeña y menor a 0.5. En cuanto a la acidez cítrica vemos una distribución aún menos normal, en la que la mayoría de los vinos tiene menos de 0.5. También vemos en el histograma del azúcar residual una gráfica que está completamente cargada a la izquierda, con su máxima frecuencia entre 0 y 5, pero completamente descendiente. En el histograma de los cloruros nos pasa lo mismo que en el anterior, está completamente cargado a la izquierda y podemos observar una tendencia a cloruros bajos. De igual forma observamos dióxido de azufre libre con una distribución más normal pero cargada más a la izquierda, teniendo su frecuencia máxima en la parte izquierda. La gráfica de dióxido de azufre total tiene una distribución normal con una cola grande a la izquierda y sus valores con más frecuencia entre 100 y 150. En el histograma de la densidad vemos que los valores tienen muy poca distancia entre ellos, teniendo su máxima frecuencia entre el 0.99 y el 1, por lo que podemos concluir casi todos los vinos tienen una densidad muy parecida. El histograma del pH tiene una distribución normal con una cola a la derecha y con pocos outliers. El histograma de los sulfatos tiene una distribución normal con una cola a la derecha y varios outliers en ella derecha. El histograma del alcohol tiene una distribución uniforme y que decrece después del 9.5. En cuanto al histograma de calidad lo vemos diferente porque se trata de una distribución discreta al ser números enteros, con su máxima en 6. En cambio en el histograma del Grupo vemos que se salta muchos valores, esto porque el programa lo tiene registrado como valores continuos pero en realidad se trata de valores discretos, dado que sólo pueden estar en el grupo 1 si son vinos rojos y en el 2 si son vinos blancos.
El análisis de los boxplots nos proporciona información sobre la distribución y sobre las diferentes variables que caracterizan a los vinos. Como ejemplo podemos tomar el de ácidos fijos que tienen bastante outliers. Y podemos observar que la mayoría de los datos se presentan entre el 6 y el 8. En general los de los ácidos son muy parecidos, tienen bastantes outliers y su caja está cargada a los menores valores. En el azúcar residual podemos observar que el primer cuartil y la media están muy cerca, lo que indica indica que tiene una distribución muy cargada en un intervalo. En el cloruro podemos observar cómo la caja es muy pequeña lo que nos indica que la mayoría de los datos están muy cargados en un intervalo específico y también observamos muchos outliers. En cuanto a los del dióxido de azufre podemos ver que en el de libre hay una caja más pequeña lo que indica que los datos están más concentrados y en el de total observamos que la caja es más grande y tiene menos outliers que el anterior. En cuanto al boxplot del pH observamos una caja de tamaño normal pero con bastantes outliers de ambos lados. En el tema de los sulfatos vemos otra vez una caja pequeña y en la parte inferior de la gráfica, lo que nos indica que la mayoría de los datos están en la parte inferior, además vemos bastantes outliers. En el caso de la calidad observamos que el cuartil 3 y la media son la misma por lo que se trata de una distribución cargada a la derecha y que tiene una asimetría positiva. Finalmente el Box plot de Group es prácticamente inexistente porque la mayoría de los vinos analizados son del grupo dos, es decir son vinos blancos.
# Análisis de componentes principales utilizando la matriz de CORRELACIÓN
pca_res <- prcomp(df, scale. = TRUE)
summary(pca_res)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 1.9581 1.6319 1.2812 1.03947 0.92182 0.81294 0.75694
## Proportion of Variance 0.2949 0.2048 0.1263 0.08312 0.06537 0.05084 0.04407
## Cumulative Proportion 0.2949 0.4998 0.6260 0.70916 0.77452 0.82536 0.86944
## PC8 PC9 PC10 PC11 PC12 PC13
## Standard deviation 0.72179 0.68590 0.55304 0.50673 0.34535 0.15495
## Proportion of Variance 0.04008 0.03619 0.02353 0.01975 0.00917 0.00185
## Cumulative Proportion 0.90951 0.94570 0.96923 0.98898 0.99815 1.00000
Como podemos ver en la salida de la ejecución de nuestro PCA, contamos con que ell primer componente principal (PC1) tiene una desviación estándar de 1.9581, explicando el 29.49% de la varianza total de los datos. Al agregar el segundo componente principal (PC2), cuya proporción de varianza es del 20.48%, la varianza acumulada alcanza el 49.98%. El tercer componente (PC3) añade un 12.63%, lo que eleva la varianza acumulada al 62.60%. A partir de ese punto, los siguientes componentes contribuyen de manera decreciente a la explicación de la varianza. Esto sugiere que las primeras tres a cinco dimensiones son las más informativas para describir los patrones en los datos.
La gráfica de dispersión muestra los resultados del análisis de componentes principales (PCA) sobre los datos, representando las dos primeras componentes principales: PC1 en el eje X, que explica el 29.49% de la varianza, y PC2 en el eje Y, que explica el 20.48% de la varianza.
Este gráfico de sedimentación, nos indica algo muy similar a lo analizado en el paso anterior, indicando que la varianza total será representada por los primeros 3-5 componentes principales.
# Obtener los valores propios (eigenvalues)
eigenvalues <- pca_res$sdev^2
eigenvalues
## [1] 3.83401355 2.66297785 1.64156623 1.08050754 0.84975263 0.66087797
## [7] 0.57296361 0.52097750 0.47046325 0.30585126 0.25677504 0.11926525
## [13] 0.02400831
| PC1 | PC2 | PC3 | PC4 | |
|---|---|---|---|---|
| fixed.acidity | -0.2602276 | -0.2169777 | -0.4691560 | 0.1522179 |
| volatile.acidity | -0.3637854 | -0.0406333 | 0.2775355 | 0.0988973 |
| citric.acid | 0.1131939 | -0.1652622 | -0.5875545 | -0.0558593 |
| residual.sugar | 0.2327740 | -0.3899909 | 0.0769154 | -0.1409448 |
| chlorides | -0.3024890 | -0.2146146 | -0.0490172 | -0.1180273 |
| free.sulfur.dioxide | 0.3387132 | -0.1803825 | 0.1017177 | -0.3359858 |
| total.sulfur.dioxide | 0.4022846 | -0.2180156 | 0.1034940 | -0.1511961 |
| density | -0.1613445 | -0.5338713 | 0.0506462 | -0.1472896 |
| pH | -0.1748661 | 0.1825878 | 0.4064453 | -0.4559318 |
| sulphates | -0.2795301 | -0.0699647 | -0.1701706 | -0.5444379 |
| alcohol | 0.0043877 | 0.4946382 | -0.2122349 | -0.0924771 |
| quality | 0.0965894 | 0.2758404 | -0.2940733 | -0.4999903 |
| Group | 0.4698830 | 0.0415958 | -0.0051541 | 0.0993140 |
En este dataset, los primeros cinco componentes tienen valores propios de 3.83, 2.66, 1.64, 1.08 y 0.85, respectivamente.
Los vectores propios muestran cómo cada variable original contribuye
a las componentes principales. Por ejemplo, la variable
fixed.acidity tiene una fuerte contribución negativa en el
PC1 (-0.260), mientras que variables como
free.sulfur.dioxide y total.sulfur.dioxide
muestran contribuciones positivas en el PC1 (0.338 y 0.402,
respectivamente). En PC2, variables como density y
residual.sugar tienen una gran influencia positiva (0.533 y
0.390, respectivamente).
Dado este análisis, podemos ver por ejemplo que el PC1 podría estar influenciado por variables relacionadas con el dióxido de azufre y el azúcar residual, mientras que el PC2 parece estar influenciado por la densidad y el azúcar residual. Las variables menos relevantes en las componentes más bajas aportan menos a la variabilidad total de los datos.
## [1] 4
Aplicando el criterio de Kaiser previamente mencionado, el código identifica que se deberán utilizar 4 componentes principales.
A continuación, se muestra el diagrama correspondiente al PC1 y PC2, donde puede observar una clara separación entre los dos grupos a lo largo del eje del primer componente principal (PC1). El Grupo 1 tiende a agruparse hacia valores más negativos de PC1, mientras que el Grupo 2 se agrupa hacia valores más positivos. Esta separación indica que las variables originales influyen de manera diferente en los dos grupos y que el PC1 capta gran parte de esa diferencia. En menor medida, también se nota cierta dispersión en el eje del segundo componente principal (PC2), aunque no es tan pronunciada como en PC1.
## Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 1 1 1 ...
Realizamos los gráficos de dispersión según su contribución al primer componente (PC1).
En el gráfico “Fixed Acidity vs Residual Sugar”, se comparan los valores de acidez fija con el contenido de azúcar residual en los vinos tintos (Grupo 1) y blancos (Grupo 2).
Los vinos blancos, representados en color azul, muestran una mayor dispersión en los valores de azúcar residual, con algunas observaciones que alcanzan niveles de hasta 60, mientras que la mayoría de los vinos tintos se agrupan en la parte inferior del gráfico con valores de azúcar residual por debajo de 10. En cuanto a la acidez fija, los vinos tintos tienden a concentrarse en rangos de 7 a 12, mientras que los blancos tienen un rango más amplio, aunque la mayor parte se sitúa en niveles de acidez de 6 a 9
En este gráfico se observa una clara diferenciación entre los grupos de vinos tintos (grupo 1) y blancos (grupo 2). Los vinos tintos presentan mayores niveles de cloruros en un rango más amplio de acidez fija, mientras que los vinos blancos se concentran en valores más bajos de cloruros, especialmente para acidez fija entre 6 y 8. Se identifican algunos valores atípicos en ambos grupos con niveles significativamente altos de cloruros.
En cuanto al gráfico Fixed Acidity vs pH, se identifica una relación inversa clara entre la acidez fija y el pH para ambos grupos. Los vinos tintos suelen tener un pH más alto y una acidez fija más baja en comparación con los vinos blancos, que muestran mayor variabilidad en la acidez fija, particularmente en rangos bajos de pH. La dispersión de puntos indica que otros factores, además de la acidez fija, influyen en el pH final de los vinos.
En este gráfico los vinos blancos presentan niveles mucho más altos de dióxido de azufre total en comparación con los vinos tintos, en los cuales no parece haber una relación clara entre la acidez fija y el dióxido de azufre total. En los vinos blancos, existe una leve tendencia hacia mayores niveles de dióxido de azufre con acidez fija más baja. También se observan valores atípicos en ambos grupos con niveles de dióxido de azufre total elevados.
Podemos observar que los vinos blancos exhiben mayor variabilidad y niveles más altos de azúcar residual, sin que se evidencie una fuerte correlación entre el ácido cítrico y el azúcar residual en ninguno de los grupos. Los vinos tintos, por otro lado, se concentran en niveles bajos tanto de ácido cítrico como de azúcar residual, aunque se destacan algunos valores atípicos en los vinos blancos con niveles altos de azúcar residual.
Al igual que en el gráfico de acidez fija, se observa una separación clara entre los vinos tintos y blancos. Los vinos tintos tienden a presentar niveles más altos de cloruros en relación con el ácido cítrico, mientras que los vinos blancos se concentran en niveles más bajos de ambos componentes.
Al analizar esta distribución de los datos en los vinos tintos (Grupo 1) los datos están más dispersos, lo que sugiere una mayor variabilidad en la relación entre la acidez cítrica y el pH. Por el contrario, en los vinos blancos (Grupo 2), los datos tienden a concentrarse en una zona más específica del gráfico, lo que indica una menor variabilidad en esta relación para los vinos blancos. También notamos la superposición de los grupos, ya que hay una considerable coincidencia en los valores de acidez cítrica y pH en ambos tipos de vino. Esto sugiere que estos parámetros no son exclusivos de un tipo de vino en particular.
En este caso podemos observar que los vinos tintos se concentran en la parte inferior izquierda del gráfico, lo que sugiere que estos vinos tienden a tener niveles más bajos tanto de acidez cítrica como de dióxido de azufre total. Por otro lado, los vinos blancos presentan una mayor dispersión, con algunos de ellos mostrando niveles elevados de dióxido de azufre total y una variedad de niveles de acidez cítrica. Si observamos la superposición de los grupos, se aprecia una considerable coincidencia en la zona de bajos niveles de dióxido de azufre total, lo que indica una significativa variabilidad en estos niveles tanto para los vinos tintos como para los blancos.
# Análisis de componentes principales utilizando la matriz de covarianza
pca_res <- prcomp(df, scale. = FALSE) # No escalar las variables para utilizar la matriz de covarianza
summary(pca_res)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 58.0706 11.98569 4.13097 1.3307 1.10729 0.69456 0.29849
## Proportion of Variance 0.9535 0.04062 0.00483 0.0005 0.00035 0.00014 0.00003
## Cumulative Proportion 0.9535 0.99415 0.99897 0.9995 0.99982 0.99996 0.99998
## PC8 PC9 PC10 PC11 PC12 PC13
## Standard deviation 0.14289 0.1256 0.1142 0.09664 0.02722 0.0006319
## Proportion of Variance 0.00001 0.0000 0.0000 0.00000 0.00000 0.0000000
## Cumulative Proportion 0.99999 1.0000 1.0000 1.00000 1.00000 1.0000000
Este análisis de componentes principales (PCA) muestra hallazgos importantes y diferentes a los obtenidos en el PCA utilizando la matriz de correlación. Para empezar, el PC1 cuenta con una desviación estándar de 58.0706 y captura el 95.35% de la varianza total de los datos, lo que significa que este componente principal resume la mayor parte de la información contenida en el conjunto de variables, casi dejando sin varianza representativa en las otras variables. Esto puede suceder dado que, al considerar la matriz de covarianza (que no escala) algunos componentes principales podrían parecer más importantes de lo que en realidad son por un tema de escala más que de significancia. En términos de interpretación, el análisis mostraría que los primeros dos componentes principales (PC1 y PC2) son suficientes para capturar casi la totalidad de la variabilidad en el conjunto de datos (más del 99%). Indicando con esto que, aunque el dataset original tenga múltiples variables, la mayor parte de la información puede reducirse a un espacio bidimensional sin perder mucho detalle.
Esta gráfica presenta la dispersión de datos entre el primer y segundo componente, donde el PC1 explica casi el 96% de la variabilidad de los datos, mientras que el PC2 solo explica un 4.06%. Eso se puede interpretar como la mayoría de la variación de los datos se encuentran a lo largo del eje del PC1. La acumulación de los puntos se concentra en la región inferior izquierda.
En esta gráfica de sedimentación podemos observar que, como lo vimos en el análisis del PCA, más del 90% de la varianza total es representada por sólo el primer componente principal, mientras que los otros componentes aportan cantidades menores de varianza.
## [1] 3.372198e+03 1.436567e+02 1.706495e+01 1.770736e+00 1.226090e+00
## [6] 4.824070e-01 8.909648e-02 2.041780e-02 1.578461e-02 1.303237e-02
## [11] 9.339612e-03 7.409131e-04 3.993114e-07
Continuando con el análisis, se tienen los valores propios y los vectores propios. Los valores propios del PCA, los Eigenvalores, al no ser escalados, estos muestran que la mayoría de la varianza se concentra dentro del primer componente (PC1), al rededor del 3372.198, mientras que los demás componentes empiezan a tener una reducción con el valor que tienen. Por lo que nos dice que la mayoría de la variabilidad se concentra en este primer componente.
| PC1 | PC2 | PC3 | PC4 | |
|---|---|---|---|---|
| fixed.acidity | -0.0074081 | -0.0053686 | 0.0238545 | 0.7100909 |
| volatile.acidity | -0.0011843 | -0.0007865 | 0.0009052 | 0.0252206 |
| citric.acid | 0.0004869 | -0.0002472 | 0.0019223 | 0.0234252 |
| residual.sugar | 0.0410192 | 0.0186284 | 0.9952154 | -0.0699869 |
| chlorides | -0.0001682 | 0.0000669 | 0.0001767 | 0.0100222 |
| free.sulfur.dioxide | 0.2304778 | 0.9726183 | -0.0271259 | 0.0105441 |
| total.sulfur.dioxide | 0.9721539 | -0.2313781 | -0.0358515 | 0.0029207 |
| density | 0.0000018 | 0.0000013 | 0.0004608 | 0.0014462 |
| pH | -0.0006555 | 0.0006482 | -0.0069112 | -0.0263994 |
| sulphates | -0.0007044 | 0.0003469 | -0.0019360 | 0.0231849 |
| alcohol | -0.0054516 | 0.0028765 | -0.0825984 | -0.6047063 |
| quality | -0.0005326 | 0.0091508 | -0.0087933 | -0.3308518 |
| Group | 0.0051720 | -0.0029475 | -0.0003410 | -0.1144490 |
En parte por los vectores propios, los Eigenvectores, estos indican cómo es que las variables originales se combinan para crear los componentes principales. Al haber observado este resultado se puede denotar que las variables de “free.sulfur.dioxide” y “total.sulfur.dioxide” son las variables que contribuyen a la variabilidad del primer componente, con un respectivo 0.972 y un 0.971.
Finalmente, es necesario recalcar el uso de la matriz de covarianza y la de la correlación ya que esto afecta a los resultados de la PCA. Al utilizar las variables escaladas y la matriz de correlaciones, el primer componente (PC1) pudo explicar el 22.49% de la varianza total con una desviación estándar del 1.9581, seguido del segundo componente (PC2), que añade un 20.48% de varianza explicada. Esto genera una varianza acumulada de aproximadamente 50% solo en los primeros dos componentes, lo que sugiere que las primeras tres a cinco dimensiones son las más informativas para describir los patrones presentes en el conjunto de datos. Mientras tanto, al utilizar la matriz de covarianza (sin escalar), el primer componente (PC1) pudo explicar un 95.35% de la varianza aunque con una distribución estándar del 58.0706, lo que sugiere que casi toda la información relevante se concentra en una sola dimensión.
Esta diferencia en el resultado puede deberse al hecho de que la matriz de covarianza refleja las escalas originales de las variables, lo que podría hacer que algunas variables, debido a sus magnitudes más grandes, dominen el análisis. Si bien esto puede simplificar el análisis, también indica que la importancia de ciertos componentes podría ser exagerada debido a diferencias de escala más que a su relevancia real en la variabilidad subyacente de los datos.
1 FasterCapital. (2024). Criterio de Kaiser: aplicación del criterio de Kaiser en PCA para una mejor selección de funciones. Recuperado de https://fastercapital.com/es/contenido/Criterio-de-Kaiser–aplicacion-del-criterio-de-Kaiser-en-PCA-para-una-mejor-seleccion-de-funciones.html