Introducción al Análisis de Componentes Principales

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.

Requisitos y buenas prácticas

Número de variables (nv)

  • 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.

Tamaño muestral (n)

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).

Supuestos (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%

Ejemplo

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.

Objetivos del Estudio

  • Evaluar tres variedades locales: Poncho Negro, Limachino y Nativo Cauquenes
  • Reducir la dimensionalidad de variables agronómicas
  • Identificar patrones de comportamiento varietal
  • Analizar problemáticas locales: nematodos y estrés hídrico

1. Instalación y Carga de Librerías

# 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)

2. Creación de Datos de Ejemplo

Generación del Dataset

Visualización Inicial

head(datos, 10)
##        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

Resumen por Variedad: Poncho Negro

Revise las condiciones de los datos. Puede obtener estadísticas generales por variable en general o agrupada por característica de estudio.

summary(datos[datos$variedad == "Poncho Negro", -c(1,2)])
##    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

3. Exploración de Datos

Preparación de Variables Numéricas

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

Estadísticas Descriptivas

Promedios por Variedad

# 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")
Promedios por Variedad
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

Desviación Estándar por Variedad

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")
Desviación Estándar por Variedad
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

4. Análisis de Correlaciones

Matriz de Correlaciones

chart.Correlation(datos_num)

cor_matrix <- cor(datos_num)

Visualización de Correlaciones

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

Matriz de Correlaciones entre Variables

Correlaciones Altas

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))
  }
}

5. Verificación de Idoneidad del PCA

Test de Kaiser-Meyer-Olkin (KMO)

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

  • 0.90 - 1.00: Excelente
  • 0.80 - 0.89: Muy bueno
  • 0.70 - 0.79: Aceptable
  • 0.60 - 0.69: Mediocre
  • < 0.60: Inaceptable
kmo_result <- KMO(datos_num)
print(kmo_result)
## 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

Interpretación del MSA

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?

  1. Correlaciones débiles entre variables

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

  1. Los Componentes Principales serán poco informativas

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

  1. Variables Posiblemente Independientes

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

  1. Problemas Técnicos con los Datos

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)

Test de Esfericidad de Bartlett

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).

bartlett_test <- cortest.bartlett(cor_matrix, n = nrow(datos_num))
print(bartlett_test)
## $chisq
## [1] 94.44874
## 
## $p.value
## [1] 2.28926e-05
## 
## $df
## [1] 45

Interpretación

## p < 0.05: Las variables están significativamente correlacionadas.
## El PCA es apropiado para estos datos.

6. Análisis de Componentes Principales

Ejecución del PCA

# 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 |

7. Determinación del Número de Componentes

Valores Propios (Eigenvalues)

eigenvalues <- pca_result$eig
knitr::kable(round(eigenvalues, 3),
             caption = "Valores Propios y Varianza Explicada",
             col.names = c("Eigenvalue", "% Varianza", "% Acumulado"))
Valores Propios y Varianza Explicada
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

Gráfico de Sedimentación (Scree Plot)

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

Gráfico de Sedimentación

¿Qué muestra el gráfico?

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.

Interpretación componente a 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.

Punto de “codo” (criterio Scree)

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

var_acum <- cumsum(eigenvalues[, 2])
cat("Varianza acumulada:\n")
## Varianza acumulada:
for(i in 1:min(5, length(var_acum))) {
  cat(sprintf("PC1-%d: %.2f%%\n", i, var_acum[i]))
}
## 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

8. Interpretación de Componentes

Cargas de Variables

cargas <- pca_result$var$coord
knitr::kable(round(cargas[, 1:min(3, ncol(cargas))], 3),
             caption = "Cargas de Variables en Componentes Principales")
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

Contribución de Variables

contrib <- pca_result$var$contrib
knitr::kable(round(contrib[, 1:min(3, ncol(contrib))], 2),
             caption = "Contribución de Variables (%)")
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

Contribución al PC1

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

Contribución de Variables al PC1

Interpretación 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

  • peso_fruto_g → 0.845
  • diametro_tallo_mm → 0.733
  • nematodos_raiz_10g → 0.734
  • indice_agallas_1_5 → 0.771
  • nematodos_suelo_100g → 0.585
  • altura_cm → 0.468 (moderada)

Cargas negativas

  • num_frutos → −0.551
  • clorofila_spad → −0.471
  • contenido_agua_relativo → −0.346

Interpretación conceptual

Dim.1 representa un gradiente de plantas grandes y frutos pesados, pero con mayor carga de nematodos, asociado a:

  • Tallos más gruesos,
  • Frutos más grandes (pero menos numerosos),
  • Mayor daño radicular (agallas)

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.

Contribución al PC2

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

Contribución de Variables al PC2

Interpretación 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:

  • Alto contenido de agua
  • Mayor rendimiento por planta
  • Menor presión de nematodos en suelo

Análisis puntual

Esta dimensión refleja un eje de productividad funcional, más cercano al rendimiento real que al tamaño estructural.


9. Visualización del Círculo de Correlaciones

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

Círculo de Correlaciones - Variables Agronómicas

Interpretación del Círculo

  • Variables cerca del círculo → bien representadas en el plano PC1-PC2
  • Ángulos pequeños → alta correlación positiva
  • Ángulos de 180° → alta correlación negativa
  • Ángulos de 90° → variables no correlacionadas
  • Longitud del vector → calidad de representación

Componentes Principales

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

  1. Variables de Calidad del Fruto (derecha del gráfico)

Agrupadas en el lado derecho positivo de Dim1:

  • peso_fruto_g (peso del fruto)
  • diametro_tallo_mm (diámetro del tallo)
  • altura_cm (altura de la planta)
  • nematodos_raiz_10g (nematodos en raíz)
  • indice_agallas_1_5 (índice de agallas)

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.

  1. Variables de Rendimiento (centro-arriba)
  • rendimiento_kg_planta (rendimiento por planta)
  • contenido_agua_relativo (contenido relativo de agua)

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.

  1. Variables de Estrés Biótico (abajo-derecha)
  • nematodos_suelo_100g (nematodos en suelo)

Interpretación: Se ubica en una posición intermedia, mostrando relación con variables de calidad pero también con componentes de estrés.

  1. Variables de Vigor Vegetativo (izquierda)
  • clorofila_spad (contenido de clorofila)
  • num_frutos (número de frutos)

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:

  • peso_fruto_g, diametro_tallo_mm y variables relacionadas contribuyen más clorofila_spad y num_frutos contribuyen menos

Conclusiones Prácticas

  • Dim1 representa principalmente un eje de tamaño/vigor: plantas grandes con frutos pesados vs. plantas con muchos frutos pequeños
  • Dim2 captura aspectos de rendimiento y contenido hídrico Existe un trade-off cantidad-calidad: más frutos se asocia con menor peso individual.

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


10. Visualización de Individuos (Parcelas)

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

PCA - Parcelas por Variedad de Tomate

Interpretación de Grupos

  • Parcelas representan intervalos de confianza del 95%
  • Parcelas cercanas tienen características similares
  • Separación entre Parcelas indica diferencias entre variedades

Interpretación ejemplo

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

  1. Native Cauquenes (Derecha - Dim1 positivo)

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

  1. Poncho Negro (Centro)

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 —

11. Biplot Completo

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

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)

  1. Gradiente de Rendimiento (Eje Dim2)

Arriba: Mayor rendimiento y contenido de agua (parcelas 25, 3, 4, 15) Abajo: Mayor presión de nematodos del suelo

  1. Correlaciones Visibles Positivas fuertes:

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 —

12. Extracción de Scores

Coordenadas de Componentes Principales

# 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)
Primeras 10 Parcelas con sus Scores
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 por Variedad

promedios_pc <- aggregate(cbind(PC1, PC2, PC3) ~ variedad, data = scores_completo, mean)
knitr::kable(promedios_pc, 
             caption = "Promedios de Componentes por Variedad")
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

13. Análisis Estadístico con Componentes

ANOVA para PC1

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 para PC2

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)

Boxplots por Variedad

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

Comparación de Componentes Principales por Variedad

par(mfrow = c(1, 1))


14. Recomendaciones y Resultados

Resumen

UBICACIÓN DEL ESTUDIO

  • Región: Valle Central de Chile (Región del Maule)
  • Temporada: 2024-2025
  • Variedades: Poncho Negro, Limachino, Nativo Cauquenes

COMPONENTES RETENIDOS

  • Según Criterio de Kaiser: 4 componentes (eigenvalue > 1)
  • Para explicar ≥70% de varianza: 4 componentes
  • Varianza explicada total: 72.30%

INTERPRETACIÓN DE PC1 (36.45% de varianza)

Variables más influyentes:

  • peso_fruto_g: 0.845
  • indice_agallas_1_5: 0.771
  • nematodos_raiz_10g: 0.734

Interpretación: PC1 representa Vigor vegetativo y desarrollo morfológico

INTERPRETACIÓN DE PC2 (14.53% de varianza)

Variables más influyentes:

  • contenido_agua_relativo: 0.680
  • rendimiento_kg_planta: 0.624
  • nematodos_suelo_100g: -0.599

Interpretación: PC2 representa Estado fisiológico y adaptación hídrica

Diferencias entre Variedades

DIFERENCIAS ENTRE VARIEDADES

  • PC1: ✓ Diferencias significativas detectadas (p < 0.05)
    • Mejor desempeño: Nativo Cauquenes
  • PC2: ✗ Sin diferencias significativas (p ≥ 0.05)

15. Análisis Adicional: PCA Multi-Regional

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:

  • Comparar comportamiento de variedades entre regiones
  • Identificar interacciones genotipo × ambiente
  • Adaptar recomendaciones varietales por zona

Conclusiones

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.