Carlos Jimémez-Gallardo
Estadístico
MSc Infórmatica Educativa
Universidad de La Frontera
carlos.jimenez@ufrontera.cl
Data Scientist
www.innovate.cl
cjimenez@innovate.cl
El Análisis de Componentes Principales (PCA, en inglés) es una técnica estadística de reducción de variables o dimensiones. El propósito es resumir la información contenida en un conjunto grande de variables en un número menor de componentes principales, sin perder variabilidad que explique la relación entre variables.
Matemáticamente hablando, cada componente principal es una combinación lineal de las variables originales:
El primer componente (PC1) es la dirección en la que los datos muestran la mayor variabilidad.
El segundo componente (PC2) es ortogonal al primero y captura la mayor variabilidad restante.
Y así sucesivamente. De esta forma:
Se conserva la mayor parte de la varianza de los datos en menos dimensiones, así como también facilita la visualización (por ejemplo, en 2D con PC1 y PC2).
Entre algunas ventajas, se encuentra
Reducir la colinealidad entre variables.
Simplificar análisis posteriores (clustering, clasificación, regresión).
El PCA no requiere supuestos fuertes de normalidad, pero sí se recomienda:
Usar variables numéricas y estandarizarlas si tienen escalas distintas.
Tener suficientes observaciones en relación con el número de variables.
Verificar que las variables estén correlacionadas, ya que si son independientes el PCA aporta poco.
En resumen: el PCA es una herramienta que transforma datos complejos y correlacionados en un conjunto más pequeño de variables nuevas (componentes), más fáciles de interpretar y usar, pero que aún retienen la mayor parte de la información original.
Al menos 3–4 para que tenga sentido como reducción de dimensionalidad (con 2 variables es básicamente una rotación).
Evitar variables con correlaciones perfectas (-1 o 1).
Idealmente estandarizar para llevar a una misma escala.
n pequeño llevara a tener resultados inestables o poco confiables.
Reglas prácticas (orientadoras):
n por variable (nv): ideal n/v ≥ 5–10. Ej.: 10 variables ⇒ al menos 50–100 observaciones.
Mínimo absoluto: ~50 observaciones suele considerarse razonable.
Si nv ≥ n: \(prcomp\) funciona (SVD), pero solo habrá como máximo min(n−1, nv) componentes no triviales y la estabilidad/interpretabilidad puede resentirse. En esos casos, intenta reducir nv, recolectar más n, o usar variantes (p.ej., regularized/ sparse/ robust PCA).
Relaciones lineales entre variables (PCA capta varianza lineal), sino piense en linealizar.
Correlaciones suficientes entre variables (KMO ≥ 0.6, Bartlett p<0.05 ayudan a evaluar).
Ausencia de outliers fuertes (pueden dominar los PCs). Considera robust PCA o transformaciones.
Normalidad no es obligatoria para calcular un PCA (no es un modelo inferencial), pero ayuda si vas a hacer tests/inferencias posteriores o construir intervalos.
Escala comparable (o estandarización) es clave si las unidades difieren.
Evite trabajar con mediciones a través del tiempo.
NOTA El KMO es el Índice de Kaiser-Meyer-Olkin, el cual muestra la adecuación muestral que se utiliza antes de aplicar técnicas como Análisis de Componentes Principales (PCA) o Análisis Factorial. Un valor alto significa que las variables comparten varianza común y que el PCA/FA tiene sentido. KMO >60% y mucho mejor si es mayor a un 70%
Este documento presenta un análisis completo de componentes principales (PCA) aplicado a un estudio de variedades de tomate en el Valle Central de Chile, específicamente en la Región del Maule durante la temporada 2024-2025.
# Instalar paquetes si es necesario (descomentar si es primera vez)
# install.packages(c("psych", "FactoMineR", "factoextra", "corrplot"))
library(psych) # Para análisis factorial y KMO
library(FactoMineR) # Para PCA
library(factoextra) # Para visualización del PCA
library(corrplot) # Para matriz de correlaciones
library(PerformanceAnalytics)## variedad region altura_cm diametro_tallo_mm num_frutos peso_fruto_g
## 1 Poncho Negro Maule 79.39524 15.06616 30.27784 137.8831
## 2 Poncho Negro Maule 82.69823 13.26232 24.98606 129.8711
## 3 Poncho Negro Maule 100.58708 16.23781 26.00076 124.2972
## 4 Poncho Negro Maule 85.70508 16.19533 21.88855 108.6977
## 5 Poncho Negro Maule 86.29288 16.05395 21.56925 144.4917
## 6 Poncho Negro Maule 102.15065 15.72160 29.82117 109.1953
## 7 Poncho Negro Maule 89.60916 15.38479 30.68926 159.3720
## 8 Poncho Negro Maule 72.34939 13.84522 28.31803 147.5870
## 9 Poncho Negro Maule 78.13147 13.23509 33.53360 115.7574
## 10 Poncho Negro Maule 80.54338 13.04882 40.30051 101.5244
## nematodos_suelo_100g nematodos_raiz_10g indice_agallas_1_5 clorofila_spad
## 1 388.2353 110.75478 2.455672 44.59623
## 2 313.6768 110.38084 4.084230 45.21844
## 3 345.6610 101.64405 2.955245 50.16238
## 4 362.0735 74.83247 2.594141 41.41968
## 5 509.0703 92.61095 3.034604 39.03746
## 6 334.3635 89.39209 3.061977 52.37848
## 7 396.4771 106.25979 3.976944 41.79418
## 8 385.4573 87.55122 3.259316 40.38467
## 9 312.6700 114.53947 3.727838 37.81863
## 10 375.0084 87.50838 2.850496 37.57642
## contenido_agua_relativo rendimiento_kg_planta
## 1 71.69102 3.907008
## 2 73.98241 3.977517
## 3 89.96849 3.810586
## 4 68.90157 2.562835
## 5 76.56759 3.909786
## 6 93.21889 3.132066
## 7 77.19220 3.504882
## 8 67.12127 3.444731
## 9 72.68184 3.656900
## 10 81.88368 3.414805
Revise las condiciones de los datos. Puede obtener estadísticas generales por variable en general o agrupada por característica de estudio.
## altura_cm diametro_tallo_mm num_frutos peso_fruto_g
## Min. : 72.35 Min. :13.05 Min. :21.57 Min. :101.5
## 1st Qu.: 79.68 1st Qu.:13.41 1st Qu.:25.24 1st Qu.:110.8
## Median : 84.20 Median :15.23 Median :29.07 Median :127.1
## Mean : 85.75 Mean :14.81 Mean :28.74 Mean :127.9
## 3rd Qu.: 88.78 3rd Qu.:15.97 3rd Qu.:30.59 3rd Qu.:142.8
## Max. :102.15 Max. :16.24 Max. :40.30 Max. :159.4
## nematodos_suelo_100g nematodos_raiz_10g indice_agallas_1_5 clorofila_spad
## Min. :312.7 Min. : 74.83 Min. :2.456 Min. :37.58
## 1st Qu.:337.2 1st Qu.: 88.01 1st Qu.:2.877 1st Qu.:39.37
## Median :368.5 Median : 97.13 Median :3.048 Median :41.61
## Mean :372.3 Mean : 97.55 Mean :3.200 Mean :43.04
## 3rd Qu.:387.5 3rd Qu.:109.35 3rd Qu.:3.611 3rd Qu.:45.06
## Max. :509.1 Max. :114.54 Max. :4.084 Max. :52.38
## contenido_agua_relativo rendimiento_kg_planta
## Min. :67.12 Min. :2.563
## 1st Qu.:71.94 1st Qu.:3.422
## Median :75.27 Median :3.581
## Mean :77.32 Mean :3.532
## 3rd Qu.:80.71 3rd Qu.:3.883
## Max. :93.22 Max. :3.978
Genere un dataset solo con variables numéricas y luego revise los valores faltantes. decida que hacer con ellos, eliminar el registro o estimar el valor faltante.
# Separar variables numéricas (excluir variedad y región)
datos_num <- datos[, -c(1, 2)]
# Verificar valores perdidos
cat("Valores perdidos:", sum(is.na(datos_num)), "\n")## Valores perdidos: 0
# Agregar solo las variables numéricas (excluir region)
promedios <- aggregate(. ~ variedad, data = datos[, -2], mean)
promedios_tabla <- promedios
promedios_tabla[, -1] <- round(promedios_tabla[, -1], 2)
knitr::kable(promedios_tabla,
caption = "Promedios por Variedad",
align = "c")| variedad | altura_cm | diametro_tallo_mm | num_frutos | peso_fruto_g | nematodos_suelo_100g | nematodos_raiz_10g | indice_agallas_1_5 | clorofila_spad | contenido_agua_relativo | rendimiento_kg_planta |
|---|---|---|---|---|---|---|---|---|---|---|
| Limachino | 76.67 | 11.98 | 32.46 | 90.25 | 291.86 | 76.65 | 2.37 | 48.00 | 82.27 | 3.36 |
| Nativo Cauquenes | 89.91 | 16.67 | 25.57 | 132.90 | 379.71 | 111.08 | 3.85 | 41.54 | 77.79 | 3.87 |
| Poncho Negro | 85.75 | 14.81 | 28.74 | 127.87 | 372.27 | 97.55 | 3.20 | 43.04 | 77.32 | 3.53 |
revise si alguna variable es constante, de serlo la DS sería 0.
# Agregar solo las variables numéricas (excluir region)
desv_est <- aggregate(. ~ variedad, data = datos[, -2], sd)
desv_est_tabla <- desv_est
desv_est_tabla[, -1] <- round(desv_est_tabla[, -1], 2)
knitr::kable(desv_est_tabla,
caption = "Desviación Estándar por Variedad",
align = "c")| variedad | altura_cm | diametro_tallo_mm | num_frutos | peso_fruto_g | nematodos_suelo_100g | nematodos_raiz_10g | indice_agallas_1_5 | clorofila_spad | contenido_agua_relativo | rendimiento_kg_planta |
|---|---|---|---|---|---|---|---|---|---|---|
| Limachino | 8.30 | 2.17 | 6.97 | 8.47 | 74.17 | 20.49 | 0.52 | 3.10 | 6.20 | 0.42 |
| Nativo Cauquenes | 11.17 | 2.57 | 2.74 | 16.12 | 108.27 | 21.75 | 0.85 | 5.42 | 10.70 | 0.76 |
| Poncho Negro | 9.54 | 1.32 | 5.62 | 19.24 | 56.74 | 13.03 | 0.56 | 5.05 | 8.65 | 0.43 |
corrplot(cor_matrix, method = "color", type = "upper",
tl.col = "black", tl.srt = 45,
addCoef.col = "black", number.cex = 0.6,
title = "Correlaciones - Tomates Valle Central de Chile",
mar = c(0,0,2,0))Matriz de Correlaciones entre Variables
high_cor <- which(abs(cor_matrix) > 0.7 & cor_matrix < 1, arr.ind = TRUE)
if(nrow(high_cor) > 0) {
cat("Pares de variables con |r| > 0.7:\n\n")
for(i in 1:nrow(high_cor)) {
var1 <- rownames(cor_matrix)[high_cor[i,1]]
var2 <- colnames(cor_matrix)[high_cor[i,2]]
r_value <- cor_matrix[high_cor[i,1], high_cor[i,2]]
cat(sprintf("%s - %s: r = %.3f\n", var1, var2, r_value))
}
}El test KMO se utiliza como paso exploratorio previo al análisis factorial (y de forma habitual también antes de un PCA) para evaluar la adecuación muestral. En concreto, mide si las correlaciones parciales entre las variables son suficientemente pequeñas en relación con las correlaciones totales, lo que indica la presencia de estructura común y justifica la agrupación de variables en factores.
nota: La correlación total mide la asociación global entre dos variables, mientras que la correlación parcial mide su asociación directa controlando por el resto de variables. El test KMO evalúa si las correlaciones totales son altas y las parciales bajas, lo que indica que la dependencia entre variables se explica por factores comunes y no por colinealidad directa.
Interpretación de valores
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = datos_num)
## Overall MSA = 0.65
## MSA for each item =
## altura_cm diametro_tallo_mm num_frutos
## 0.79 0.59 0.60
## peso_fruto_g nematodos_suelo_100g nematodos_raiz_10g
## 0.76 0.65 0.73
## indice_agallas_1_5 clorofila_spad contenido_agua_relativo
## 0.76 0.67 0.45
## rendimiento_kg_planta
## 0.32
msa_global <- kmo_result$MSA
if(msa_global >= 0.9) {
cat("MSA = ", round(msa_global, 3), " → Excelente\n")
} else if(msa_global >= 0.8) {
cat("MSA = ", round(msa_global, 3), " → Bueno\n")
} else if(msa_global >= 0.7) {
cat("MSA = ", round(msa_global, 3), " → Aceptable\n")
} else if(msa_global >= 0.6) {
cat("MSA = ", round(msa_global, 3), " → Insuficiente\n")
} else {
cat("MSA = ", round(msa_global, 3), " → Inaceptable (considerar eliminar variables)\n")
}## MSA = 0.651 → Insuficiente
¿Qué Implica KMO < 0.6?
Problema: -Las variables no están suficientemente correlacionadas entre sí -PCA funciona mejor cuando hay grupos de variables correlacionadas -Con correlaciones débiles, los componentes principales no capturan estructura clara
Analogía: Imagina que intentas agrupar personas por características: -KMO alto: Las personas forman grupos claros (deportistas, artistas, científicos) -KMO bajo: Las personas son todas diferentes, no hay patrones claros
Consecuencias: -Los PC capturarán poca varianza total (ej: PC1 + PC2 < 40%) -Necesitarás muchos componentes para explicar la variabilidad -La interpretación será confusa y poco clara
Para el caso:
Con KMO alto: PC1 captura 50-60% de varianza Con KMO < 0.6: PC1 captura solo 20-30% de varianza
Interpretación biológica:
-Las variables miden aspectos diferentes e independientes del sistema -No hay una estructura subyacente común -Cada variable “cuenta su propia historia”
Para el caso: Si KMO < 0.6 podría significar: - Peso del fruto NO se relaciona con altura de planta - Nematodos NO se relacionan con rendimiento - Clorofila NO se relaciona con número de frutos - Cada variable es independiente
Posibles causas de KMO bajo:
-Tamaño de muestra insuficiente Regla general: n ≥ 5 × número de variables Para 10 variables: necesitas al menos 50 observaciones
Tu caso: 30 parcelas con 10 variables indice: 30/10 = 3 (BAJO, idealmente sería ≥5)
Junto con el KMO, suele usarse el test de esfericidad de Bartlett, que prueba si la matriz de correlaciones es significativamente diferente de una matriz identidad (lo cual queremos que sea cierto para que PCA o análisis factorial tengan sentido).
## $chisq
## [1] 94.44874
##
## $p.value
## [1] 2.28926e-05
##
## $df
## [1] 45
## p < 0.05: Las variables están significativamente correlacionadas.
## El PCA es apropiado para estos datos.
# PCA con FactoMineR (escala automáticamente)
pca_result <- PCA(datos_num, scale.unit = TRUE, graph = FALSE)
summary(pca_result)##
## Call:
## PCA(X = datos_num, scale.unit = TRUE, graph = FALSE)
##
##
## Eigenvalues
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5 Dim.6 Dim.7
## Variance 3.645 1.453 1.105 1.027 0.922 0.602 0.538
## % of var. 36.446 14.533 11.048 10.270 9.216 6.024 5.379
## Cumulative % of var. 36.446 50.979 62.027 72.297 81.513 87.536 92.916
## Dim.8 Dim.9 Dim.10
## Variance 0.287 0.244 0.178
## % of var. 2.874 2.436 1.775
## Cumulative % of var. 95.789 98.225 100.000
##
## Individuals (the 10 first)
## Dist Dim.1 ctr cos2 Dim.2 ctr cos2
## 1 | 1.851 | 0.588 0.316 0.101 | -0.253 0.147 0.019
## 2 | 1.899 | 0.952 0.829 0.251 | 0.143 0.047 0.006
## 3 | 2.509 | 0.451 0.186 0.032 | 0.834 1.594 0.110
## 4 | 2.849 | 0.049 0.002 0.000 | -1.289 3.811 0.205
## 5 | 2.837 | 1.980 3.585 0.487 | -0.052 0.006 0.000
## 6 | 3.010 | -0.571 0.298 0.036 | 0.157 0.056 0.003
## 7 | 2.313 | 1.831 3.065 0.626 | -0.117 0.032 0.003
## 8 | 2.401 | 0.703 0.452 0.086 | -0.764 1.340 0.101
## 9 | 2.138 | 0.373 0.127 0.030 | -0.019 0.001 0.000
## 10 | 2.591 | -1.076 1.060 0.173 | -0.084 0.016 0.001
## Dim.3 ctr cos2
## 1 | 0.109 0.036 0.003 |
## 2 | 0.831 2.081 0.191 |
## 3 | 0.249 0.187 0.010 |
## 4 | -1.558 7.327 0.299 |
## 5 | -0.117 0.041 0.002 |
## 6 | -0.075 0.017 0.001 |
## 7 | 0.378 0.431 0.027 |
## 8 | -0.055 0.009 0.001 |
## 9 | 0.199 0.119 0.009 |
## 10 | -0.008 0.000 0.000 |
##
## Variables
## Dim.1 ctr cos2 Dim.2 ctr cos2 Dim.3
## altura_cm | 0.468 5.999 0.219 | 0.063 0.271 0.004 | 0.362
## diametro_tallo_mm | 0.733 14.733 0.537 | 0.117 0.937 0.014 | -0.543
## num_frutos | -0.551 8.318 0.303 | -0.140 1.352 0.020 | 0.252
## peso_fruto_g | 0.845 19.576 0.713 | 0.201 2.778 0.040 | 0.113
## nematodos_suelo_100g | 0.585 9.384 0.342 | -0.599 24.672 0.359 | 0.084
## nematodos_raiz_10g | 0.734 14.775 0.538 | -0.006 0.002 0.000 | -0.158
## indice_agallas_1_5 | 0.771 16.312 0.594 | -0.131 1.189 0.017 | 0.309
## clorofila_spad | -0.471 6.094 0.222 | -0.386 10.250 0.149 | 0.245
## contenido_agua_relativo | -0.346 3.282 0.120 | 0.680 31.774 0.462 | -0.210
## rendimiento_kg_planta | 0.236 1.527 0.056 | 0.624 26.774 0.389 | 0.609
## ctr cos2
## altura_cm 11.892 0.131 |
## diametro_tallo_mm 26.668 0.295 |
## num_frutos 5.732 0.063 |
## peso_fruto_g 1.160 0.013 |
## nematodos_suelo_100g 0.635 0.007 |
## nematodos_raiz_10g 2.273 0.025 |
## indice_agallas_1_5 8.616 0.095 |
## clorofila_spad 5.449 0.060 |
## contenido_agua_relativo 3.977 0.044 |
## rendimiento_kg_planta 33.599 0.371 |
eigenvalues <- pca_result$eig
knitr::kable(round(eigenvalues, 3),
caption = "Valores Propios y Varianza Explicada",
col.names = c("Eigenvalue", "% Varianza", "% Acumulado"))| Eigenvalue | % Varianza | % Acumulado | |
|---|---|---|---|
| comp 1 | 3.645 | 36.446 | 36.446 |
| comp 2 | 1.453 | 14.533 | 50.979 |
| comp 3 | 1.105 | 11.048 | 62.027 |
| comp 4 | 1.027 | 10.270 | 72.297 |
| comp 5 | 0.922 | 9.216 | 81.513 |
| comp 6 | 0.602 | 6.024 | 87.536 |
| comp 7 | 0.538 | 5.379 | 92.916 |
| comp 8 | 0.287 | 2.874 | 95.789 |
| comp 9 | 0.244 | 2.436 | 98.225 |
| comp 10 | 0.178 | 1.775 | 100.000 |
n_componentes_kaiser <- sum(eigenvalues[, 1] > 1)
cat("\nCriterio de Kaiser (eigenvalue > 1):", n_componentes_kaiser, "componentes\n")##
## Criterio de Kaiser (eigenvalue > 1): 4 componentes
fviz_screeplot(pca_result, addlabels = TRUE,
main = "Gráfico de Sedimentación - Tomates Valle Central",
xlab = "Componentes Principales",
ylab = "% de Varianza Explicada",
barfill = "#2E86AB", barcolor = "#2E86AB")Gráfico de Sedimentación
Eje X: Componentes principales (PC1, PC2, …, PC10).
Eje Y: Porcentaje de varianza explicada por cada componente.
Las barras indican la varianza individual.
La línea muestra la tendencia decreciente de la contribución de cada componente.
PC1: 36,4% Explica por sí solo más de un tercio de la variabilidad total. Representa el patrón dominante en los datos (probablemente un gradiente general de producción, calidad o condiciones ambientales).
PC2: 14,5% Aporta información relevante adicional. Y junto con PC1 explican ≈ 50,9% de la varianza total.
Luego PC3 a PC5:
PC3: 11%
PC4: 10,3%
PC5: 9,2%
Estas componentes siguen aportando información significativa, pero ya mucho más específica.
Desde PC6 en adelante (< 6%)
Cada componente explica poca varianza individual. Suelen capturar ruido, variaciones locales o patrones muy específicos.
Visualmente se observa un cambio claro de pendiente:
Codo principal: entre PC2 y PC3
Pendiente mucho más suave desde PC3 en adelante.
Interpretación: Las primeras 2 a 3 componentes concentran la estructura esencial de los datos.
## Varianza acumulada:
## PC1-1: 36.45%
## PC1-2: 50.98%
## PC1-3: 62.03%
## PC1-4: 72.30%
## PC1-5: 81.51%
n_componentes_70 <- which(var_acum >= 70)[1]
cat(sprintf("\nPara explicar ≥70%% de varianza: %d componentes\n", n_componentes_70))##
## Para explicar ≥70% de varianza: 4 componentes
cargas <- pca_result$var$coord
knitr::kable(round(cargas[, 1:min(3, ncol(cargas))], 3),
caption = "Cargas de Variables en Componentes Principales")| Dim.1 | Dim.2 | Dim.3 | |
|---|---|---|---|
| altura_cm | 0.468 | 0.063 | 0.362 |
| diametro_tallo_mm | 0.733 | 0.117 | -0.543 |
| num_frutos | -0.551 | -0.140 | 0.252 |
| peso_fruto_g | 0.845 | 0.201 | 0.113 |
| nematodos_suelo_100g | 0.585 | -0.599 | 0.084 |
| nematodos_raiz_10g | 0.734 | -0.006 | -0.158 |
| indice_agallas_1_5 | 0.771 | -0.131 | 0.309 |
| clorofila_spad | -0.471 | -0.386 | 0.245 |
| contenido_agua_relativo | -0.346 | 0.680 | -0.210 |
| rendimiento_kg_planta | 0.236 | 0.624 | 0.609 |
contrib <- pca_result$var$contrib
knitr::kable(round(contrib[, 1:min(3, ncol(contrib))], 2),
caption = "Contribución de Variables (%)")| Dim.1 | Dim.2 | Dim.3 | |
|---|---|---|---|
| altura_cm | 6.00 | 0.27 | 11.89 |
| diametro_tallo_mm | 14.73 | 0.94 | 26.67 |
| num_frutos | 8.32 | 1.35 | 5.73 |
| peso_fruto_g | 19.58 | 2.78 | 1.16 |
| nematodos_suelo_100g | 9.38 | 24.67 | 0.64 |
| nematodos_raiz_10g | 14.77 | 0.00 | 2.27 |
| indice_agallas_1_5 | 16.31 | 1.19 | 8.62 |
| clorofila_spad | 6.09 | 10.25 | 5.45 |
| contenido_agua_relativo | 3.28 | 31.77 | 3.98 |
| rendimiento_kg_planta | 1.53 | 26.77 | 33.60 |
fviz_contrib(pca_result, choice = "var", axes = 1, top = 10,
fill = "#A23B72", color = "#A23B72",
title = "Contribución de Variables al PC1")Contribución de Variables al PC1
Vigor vegetativo y presión biótica, Es la dimensión más importante (36,4% de la varianza). Variables con cargas altas (|loading| ≳ 0.5):
Cargas positivas
Cargas negativas
Interpretación conceptual
Dim.1 representa un gradiente de plantas grandes y frutos pesados, pero con mayor carga de nematodos, asociado a:
Análisis puntual
Plantas más vigorosas en tamaño y peso de fruto, pero bajo estrés biótico, donde el aumento del tamaño no implica necesariamente mayor productividad en número de frutos.
fviz_contrib(pca_result, choice = "var", axes = 2, top = 10,
fill = "#F18F01", color = "#F18F01",
title = "Contribución de Variables al PC2")Contribución de Variables al PC2
Estado hídrico–fisiológico y rendimiento, Explica 14,5% de la varianza (segunda más relevante).
Cargas positivas - contenido_agua_relativo → 0.680 - rendimiento_kg_planta → 0.624 - peso_fruto_g → 0.201 (débil)
Cargas negativas - nematodos_suelo_100g → −0.599 - clorofila_spad → −0.386
Interpretación conceptual
Dim.2 separa plantas según su condición fisiológica y productiva:
Análisis puntual
Esta dimensión refleja un eje de productividad funcional, más cercano al rendimiento real que al tamaño estructural.
fviz_pca_var(pca_result,
col.var = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
title = "Círculo de Correlaciones - Variables Agronómicas\nTomates Valle Central de Chile")Círculo de Correlaciones - Variables Agronómicas
Dim1 (36.4%): Explica el 36.4% de la variabilidad total Dim2 (14.5%): Explica el 14.5% de la variabilidad total Total explicado: ~50.9% de la varianza en estas dos dimensiones
Interpretación por Grupos de Variables
Agrupadas en el lado derecho positivo de Dim1:
Interpretación: Estas variables están fuertemente correlacionadas positivamente entre sí. Plantas más altas y con tallos más gruesos tienden a producir frutos más pesados. Curiosamente, también hay correlación con la presencia de nematodos.
Interpretación: Estas variables forman un ángulo con el grupo anterior, indicando correlación moderada con las características de calidad del fruto y contribución importante en Dim2.
Interpretación: Se ubica en una posición intermedia, mostrando relación con variables de calidad pero también con componentes de estrés.
Interpretación: Están en el lado negativo de Dim1, lo que indica una correlación negativa con el peso individual del fruto. Esto sugiere un trade-off: plantas con más frutos tienden a tener frutos individuales más pequeños.
Interpretación del Color (Contribución)
Los colores más cálidos (rojo-naranja) indican mayor contribución a las dimensiones:
Conclusiones Prácticas
La presencia de nematodos se correlaciona con variables de desarrollo, lo que podría indicar que plantas más vigorosas son más susceptibles o que la infestación ocurre en condiciones que también favorecen el crecimiento
fviz_pca_ind(pca_result,
col.ind = datos$variedad,
palette = c("#D32F2F", "#7CB342", "#1976D2"),
addEllipses = TRUE,
ellipse.level = 0.95,
ellipse.type = "convex",
legend.title = "Variedad",
repel = TRUE,
title = "PCA - Parcelas por Variedad de Tomate\nValle Central de Chile")PCA - Parcelas por Variedad de Tomate
Separación de Variedades 1. Limachino (Izquierda - Dim1 negativo)
Parcelas: 11, 13, 14, 15, 16, 17, 18, 19, 20 Características (según el círculo de correlaciones anterior):
Mayor número de frutos (num_frutos) Mayor contenido de clorofila (clorofila_spad) Frutos más pequeños individualmente Estrategia: muchos frutos pequeños
Parcelas: 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 Características:
Mayor peso individual del fruto (peso_fruto_g) Mayor diámetro de tallo (diametro_tallo_mm) Mayor altura de planta (altura_cm) Mayor presencia de nematodos Estrategia: frutos más grandes y pesados
Parcelas: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 Características:
Posición intermedia en Dim1 Mayor dispersión en Dim2 Podría tener mayor rendimiento y contenido de agua relativo Estrategia: perfil intermedio/equilibrado
Observaciones Importantes Variabilidad dentro de variedades:
Native Cauquenes: Mayor dispersión, especialmente en Dim2 (parcelas 25, 26, 29) Limachino: Grupo más compacto, indica mayor homogeneidad Poncho Negro: Dispersión moderada, principalmente en Dim2
Separación clara: La separación bien definida entre variedades en Dim1 (36.4% de varianza) indica que:
Las variedades son genéticamente distintas en características agronómicas La variabilidad entre variedades es mayor que dentro de cada variedad Dim1 es un eje discriminante efectivo
Dim2 (14.5%): Captura variabilidad adicional, posiblemente relacionada con:
Condiciones microambientales de las parcelas Rendimiento y contenido hídrico Respuesta al estrés
Analisis final:
Native Cauquenes es ideal para mercado de fruto fresco (frutos grandes) Limachino podría ser mejor para procesamiento (mayor número de frutos) Poncho Negro muestra un perfil balanceado que podría ser versátil La variabilidad genética entre variedades es significativa y bien capturada por el PCA —
fviz_pca_biplot(pca_result,
col.ind = datos$variedad,
palette = c("#D32F2F", "#7CB342", "#1976D2"),
addEllipses = TRUE,
ellipse.level = 0.95,
col.var = "black",
repel = TRUE,
legend.title = "Variedad",
title = "Biplot PCA - Tomates Valle Central\nVariables y Parcelas Experimentales")Biplot PCA - Variables y Parcelas Experimentales
Estructura del Biplot Este gráfico combina:
-Vectores negros: Variables agronómicas (del primer gráfico) -Puntos numerados: Parcelas individuales (del segundo gráfico) -Elipses de confianza: Agrupaciones por variedad
Interpretación por Variedad
Nativo Cauquenes (Derecha - Verde)
Parcelas: 21-30
Variables asociadas (vectores apuntando hacia esta zona): -peso_fruto_g (máxima asociación) -diametro_tallo_mm -altura_cm -nematodos_raiz_10g -indice_agallas_1_5 -nematodos_suelo_100g
Perfil agronómico: -Plantas vigorosas y de gran porte -Frutos grandes y pesados -Mayor susceptibilidad a nematodos (o mayor expresión del problema) -Estrategia: calidad sobre cantidad
Variabilidad: -Parcela 25 se destaca hacia arriba (alto rendimiento/contenido de agua) -Parcela 28 hacia abajo (más afectada por nematodos del suelo)
Limachino (Izquierda - Rojo)
Parcelas: 11, 13-20
Variables asociadas: -num_frutos (máxima asociación) -clorofila_spad
Perfil agronómico: -Plantas con mayor número de frutos -Mejor contenido de clorofila (plantas más verdes) -Frutos más pequeños individualmente -Estrategia: cantidad sobre tamaño
Variabilidad: -Grupo muy compacto = alta homogeneidad -Parcela 15 ligeramente separada hacia arriba
Poncho Negro (Centro - Azul)
Parcelas: 1-10
Variables asociadas: -rendimiento_kg_planta (dirección superior) -contenido_agua_relativo
Perfil agronómico: -Posición intermedia en tamaño de fruto y número -Potencialmente mejor rendimiento total -Mejor balance hídrico -Estrategia: equilibrio productivo
Variabilidad: -Mayor dispersión que otras variedades -Parcelas 3 y 4 hacia la zona positiva de Dim2
Relaciones Observables a. Trade-off Cantidad vs. Tamaño (Eje Dim1) Limachino ←————————————→ Native Cauquenes (muchos frutos) (frutos grandes)
Arriba: Mayor rendimiento y contenido de agua (parcelas 25, 3, 4, 15) Abajo: Mayor presión de nematodos del suelo
Peso fruto ↔︎ Diámetro tallo ↔︎ Altura (vectores casi paralelos) Nematodos raíz ↔︎ Índice agallas (vectores juntos)
Negativas:
Número de frutos ↔︎ Peso individual (vectores opuestos ~180°)
Independientes:
Rendimiento ⊥ Trade-off cantidad-tamaño (vector perpendicular a Dim1)
Insights Prácticos para el Productor
Recomendaciones según objetivo: ObjetivoVariedad RecomendadaRazónMercado fresco premiumNative CauquenesFrutos grandes y pesadosProcesamiento industrialLimachinoAlto número de frutosMáximo rendimientoPoncho NegroMejor kg/planta totalMenor problema de nematodosLimachinoMenor asociación con vectores de nematodos
Manejo de Nematodos:
Native Cauquenes requiere manejo más intensivo de nematodos La correlación con tamaño sugiere que plantas vigorosas son más atacadas (mayor sistema radicular = mayor superficie de ataque)
Estabilidad:
Limachino: Más predecible (elipse pequeña) Native Cauquenes: Moderadamente variable Poncho Negro: Mayor variabilidad entre parcelas (requiere manejo más cuidadoso)
Validación Estadística
36.4% + 14.5% = 50.9% de varianza explicada es aceptable para datos agronómicos La separación clara de las elipses confirma diferencias significativas entre variedades El solapamiento mínimo indica que la clasificación varietal es robusta —
# Scores (coordenadas) de cada parcela en los nuevos componentes
scores <- as.data.frame(pca_result$ind$coord)
colnames(scores) <- paste0("PC", 1:ncol(scores))
# Añadir información de variedad y región
scores_completo <- cbind(
variedad = datos$variedad,
region = datos$region,
scores
)
knitr::kable(head(scores_completo, 10),
caption = "Primeras 10 Parcelas con sus Scores",
digits = 3)| variedad | region | PC1 | PC2 | PC3 | PC4 | PC5 |
|---|---|---|---|---|---|---|
| Poncho Negro | Maule | 0.588 | -0.253 | 0.109 | -0.470 | -0.568 |
| Poncho Negro | Maule | 0.952 | 0.143 | 0.831 | -0.473 | 0.080 |
| Poncho Negro | Maule | 0.451 | 0.834 | 0.249 | 1.127 | 1.848 |
| Poncho Negro | Maule | 0.049 | -1.289 | -1.558 | -0.590 | -0.146 |
| Poncho Negro | Maule | 1.980 | -0.052 | -0.117 | -1.320 | 0.001 |
| Poncho Negro | Maule | -0.571 | 0.157 | -0.075 | 1.939 | 2.014 |
| Poncho Negro | Maule | 1.831 | -0.117 | 0.378 | 0.432 | -0.606 |
| Poncho Negro | Maule | 0.703 | -0.764 | -0.055 | -1.379 | -1.390 |
| Poncho Negro | Maule | 0.373 | -0.019 | 0.199 | 0.094 | -1.731 |
| Poncho Negro | Maule | -1.076 | -0.084 | -0.008 | 0.621 | -1.744 |
promedios_pc <- aggregate(cbind(PC1, PC2, PC3) ~ variedad, data = scores_completo, mean)
knitr::kable(promedios_pc,
caption = "Promedios de Componentes por Variedad")| variedad | PC1 | PC2 | PC3 |
|---|---|---|---|
| Limachino | -2.3474120 | -0.1937844 | -0.0647347 |
| Nativo Cauquenes | 1.8196055 | 0.3383436 | 0.0695193 |
| Poncho Negro | 0.5278064 | -0.1445592 | -0.0047846 |
anova_pc1 <- aov(PC1 ~ variedad, data = scores_completo)
summary_pc1 <- summary(anova_pc1)
print(summary_pc1)## Df Sum Sq Mean Sq F value Pr(>F)
## variedad 2 91.00 45.50 66.99 3.4e-11 ***
## Residuals 27 18.34 0.68
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
if(summary_pc1[[1]]$`Pr(>F)`[1] < 0.05) {
cat("\n✓ Hay diferencias significativas entre variedades en PC1 (p < 0.05)\n\n")
cat("Test de Tukey para comparaciones múltiples:\n")
tukey_pc1 <- TukeyHSD(anova_pc1)
print(tukey_pc1)
} else {
cat("\n✗ No hay diferencias significativas entre variedades en PC1 (p ≥ 0.05)\n")
}##
## ✓ Hay diferencias significativas entre variedades en PC1 (p < 0.05)
##
## Test de Tukey para comparaciones múltiples:
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = PC1 ~ variedad, data = scores_completo)
##
## $variedad
## diff lwr upr p adj
## Nativo Cauquenes-Limachino 4.167017 3.253198 5.080837 0.0000000
## Poncho Negro-Limachino 2.875218 1.961399 3.789037 0.0000001
## Poncho Negro-Nativo Cauquenes -1.291799 -2.205618 -0.377980 0.0044504
anova_pc2 <- aov(PC2 ~ variedad, data = scores_completo)
summary_pc2 <- summary(anova_pc2)
print(summary_pc2)## Df Sum Sq Mean Sq F value Pr(>F)
## variedad 2 1.73 0.8646 0.558 0.579
## Residuals 27 41.87 1.5507
if(summary_pc2[[1]]$`Pr(>F)`[1] < 0.05) {
cat("\n✓ Hay diferencias significativas entre variedades en PC2 (p < 0.05)\n\n")
cat("Test de Tukey para comparaciones múltiples:\n")
tukey_pc2 <- TukeyHSD(anova_pc2)
print(tukey_pc2)
} else {
cat("\n✗ No hay diferencias significativas entre variedades en PC2 (p ≥ 0.05)\n")
}##
## ✗ No hay diferencias significativas entre variedades en PC2 (p ≥ 0.05)
par(mfrow = c(1, 2))
boxplot(PC1 ~ variedad, data = scores_completo,
main = "PC1 por Variedad",
xlab = "Variedad", ylab = "PC1",
col = c("#D32F2F", "#7CB342", "#1976D2"),
las = 2)
boxplot(PC2 ~ variedad, data = scores_completo,
main = "PC2 por Variedad",
xlab = "Variedad", ylab = "PC2",
col = c("#D32F2F", "#7CB342", "#1976D2"),
las = 2)Comparación de Componentes Principales por Variedad
Variables más influyentes:
Interpretación: PC1 representa Vigor vegetativo y desarrollo morfológico
Variables más influyentes:
Interpretación: PC2 representa Estado fisiológico y adaptación hídrica
Para estudios con datos de múltiples regiones de Chile (ej: Valparaíso, O’Higgins, Maule, Araucanía), se puede incluir la región como variable cualitativa suplementaria:
# Código ejemplo para PCA multi-regional:
pca_regional <- PCA(datos_num,
scale.unit = TRUE,
quali.sup = cual_columna_region, # columna de región
quanti.sup = cual_columna_rendimiento, # rendimiento como suplementaria
graph = FALSE)Esto permitiría:
El análisis PCA permitió reducir la dimensionalidad de las variables agronómicas y revelar patrones de comportamiento entre las tres variedades de tomate evaluadas en el Valle Central de Chile. Los resultados proporcionan información valiosa para la toma de decisiones en selección varietal y manejo agronómico adaptado a las condiciones locales.