19/05/2026
📈Análisis de componentes principales📈
El Análisis de Componentes Principales (PCA) es una poderosa técnica de reducción de dimensionalidad utilizada para simplificar conjuntos de datos complejos transformando muchas variables correlacionadas en un número menor de variables no correlacionadas llamadas componentes principales. El PCA se utiliza ampliamente en agricultura, genómica, bioinformática, análisis de imágenes y aprendizaje automático.
📌 ¿Qué es PCA?
PCA convierte un conjunto de datos con muchas variables en un nuevo sistema de coordenadas donde:
PC1 (componente principal 1) explica la mayor cantidad de variación.
PC2 explica la segunda mayor cantidad de variación.
PC3 explica la siguiente variación más grande.
Y así sucesivamente.
Estos componentes son combinaciones lineales de las variables originales.
📌 Por qué es importante el PCA
PCA es útil para:
Reducción de dimensionalidad
Eliminar redundancia entre variables correlacionadas
Visualización de datos de alta dimensión
Detectando valores atípicos
Identificando relaciones variables
Preprocesamiento de datos antes del aprendizaje automático
📌 Aplicaciones de PCA
Agricultura
Análisis de la propiedad del suelo
Perfil de nutrientes
Fenotipado vegetal
Análisis de datos espectrales
Genómica y Bioinformática
Análisis de expresión genética
Genética de la población
Análisis SNP
Procesamiento de imágenes
Extracción de característica
Compresión
Finanzas
Análisis de la bolsa
Ciencia ambiental
Clima y estudios sobre la contaminación
📌 Conjunto de datos de ejemplo
Supongamos que tienes medidas de la planta:
Altura de la planta Área de la hoja de clorofila Longitud de la raíz
1 35 120 42 15
2 40 135 46 18
3 38 128 44 17
4 45 150 49 21
📌 Instalar paquetes obligatorios
Pip instala pandas numpy matplotlib scikit-learn
📌 Código Python para PCA
importar pandas como pd
importar matplotlib.pyplot como plt
de sklearn.preprocesando importación StandardScaler
de sklearn.decomposition importación PCA
# Cargar conjunto de datos
df = pd.read_csv("plant_data.csv")
# Opcional: etiquetas de tratamiento separadas si están presentes
# etiquetas = df['tratamiento']
# X = df.drop('tratamiento', eje=1)
X = df # si todas las columnas son numéricas
# Estandarizar los datos
escalador = escalador estándar()
X_scaled = scaler.fit_transform(X)
# Realizar PCA
pca = PCA()
X_pca = pca.fit_transform(X_scaled)
# Relación de varianza explicada
Varianza_explicada = pca.explained_variance_ratio_
print ("Proporción de varianza explicada:")
impresión (varianza_explicada)
# Crear marcos de datos de puntuaciones
Puntuaciones = pd.DataFrame(
X_pca,
columns=[f"PC{i+1}" for i in range(X_pca.shape[1])]
)
impresión (puntuaciones.head())
📌 Scree Trama
plt.figure (size=(8, 5))
por favor.trama(
rango(1, len(explained_variance) + 1),
explicado_variance,
marcador='o'
)
plt.xlabel ("Componente principal")
plt.ylabel ("Proporción de varianza explicada")
Plt.title ("Plot Scree")
por favor.show()
📌 Trama de puntuación de PCA
plt.figura (size=(8, 6))
plt.scatter(puntuaciones['PC1'], puntuaciones ['PC2'])
para i en rango (len (puntuaciones)):
plt.text(scores['PC1'][i], scores['PC2'][i], str(i+1))
plt.xlabel("PC1")
plt.ylabel("PC2")
plt.title ("PCA Score Plot")
plt.grid (Verdadero)
por favor.show()
📌 PCA con grupos de tratamiento
etiquetas = df['tratamiento']
X = df.drop ('tratamiento', eje=1)
X_scaled = StandardScaler().fit_transform(X)
pca = PCA(n_componentes=2)
X_pca = pca.fit_transform(X_scaled)
puntuaciones = pd.DataFrame(X_pca, columns=['PC1', 'PC2'])
puntuaciones ['tratamiento'] = etiquetas
para tratamiento en puntuaciones ['tratamiento']. único():
subconjunto = puntuaciones[puntuaciones['tratamiento'] == tratamiento]
plt.scatter(subset['PC1'], subconjunto['PC2'], etiqueta=tratamiento)
plt.xlabel("PC1")
plt.ylabel("PC2")
plt.leyenda()
plt.title ("PCA por tratamiento")
por favor.show()
📌 Cargas (Aportes variables)
cargas = pd.DataFrame(
pca.components_. T,
columnas=['PC1', 'PC2'],
índice=X.columnas
)
Imprimir (cargas)
Interpretación:
Grandes valores positivos o negativos indican una fuerte influencia.
Las variables con direcciones similares están positivamente correlacionadas.
Las direcciones opuestas indican correlación negativa.
📌 Biplota
plt.figure (size=(8, 8))
plt.scatter(puntuaciones['PC1'], puntuaciones ['PC2'])
para i, estaba en el enumerado (X.columnas):
plt.flecha(
0, 0,
loadings.iloc[i, 0] * 3,
loadings.iloc[i, 1] * 3,
ancho_cabeza=0,05
)
por favor.texto(
cargas.iloc[i, 0] * 3.2,
cargas.iloc[i, 1] * 3.2,
var
)
plt.xlabel("PC1")
plt.ylabel("PC2")
PLT.TItle ("PCA Biplot")
plt.grid (Verdadero)
por favor.show()
📌 Seleccionando el número de componentes
Una regla común es retener suficientes componentes para explicar el 80-95 % de la varianza total.
importar entusiasmado como np
varianza_ acumulativa = np.cumsum(varianza_explicada)
impresión (varianza_acumulativa)
📌 Ejemplo de interpretación
Supongamos:
PC1 explica 65%
PC2 explica el 20%
Total = 85%
Esto significa que los dos primeros componentes resumen la mayor parte de la información del conjunto de datos.
📌 PCA en Agricultura y Bioinformática
Para su investigación, PCA puede ser usado para analizar:
Concentraciones nutritivas del suelo (N,P,K)
Respuestas de humedad y fertigación
Firmas espectrales
Perfiles de expresión genética
Rasgos fenotipados vegetales
Medidas de la arquitectura de la raíz
📌 Ventajas de PCA
Reduce la complejidad
Quita multicolinealidad
Mejora la visualización
Acelera los algoritmos de aprendizaje automático
📌 Limitaciones de PCA
Asume relaciones lineales
Los componentes pueden ser más difíciles de interpretar biológicamente
Sensible a la escalada
Puede ser afectado por atípicos