Análisis de componentes Principales. PCA

El Análisis de Componentes Principales (PCA) es un método de autovectores (eigenvalues) dentro de las técnicas de ordenación (ordination). El PCA fue propuestos por Pearson (1901) y Hotelling (1933) para “resumir” la complejidad en variables de ciencias económicas, sin embargo, Goodall (1954) lo aplica para datos biológicos utilizando el nombre de análisis de factores.

El principal objetivo de esta técnica es representar un dataset con muchas variables en un pequeño número de ejes,denominados canónicos o componentes principales. Una de las principales premisas de este análisis es la construcción de una línea de mejor ajuste, la cual se puede obtener de las suma de los cuadrados de la perpendicules del sistema de puntos de un plano determinado. Debido a la anterior concepción teórica, únicamente se requiere de las medias, desviaciones estándar y correlaciones de las variables para lograr la construcción de los componentes principales.

El PCA es una buena técnica de exploración de datos, cuando estos muestran relaciones lineares, y normalmente la transformación de los datos permite mejorar significativamente el comportamiento linear. Aunque esta técnica de ordenación se puede utilizar para analizar las relaciones entre datos biológicos (matrices de elementos/sitios), la determinación de la existencia de valores = 0 genera “problemas matemáticos” como el efecto Arco, asociado al reconocimiento de estos valores como elementos de gran similitud. Considerando la naturaleza de las matrices biológicas o ambientales, es preferible el análisis de las matrices ambientales mediante el PCA.

Para la construcción de un PCA, se realizan las comparaciones entre las matrices de correlación o covarianza, las cuales permiten describir las relaciones que existen entre las observaciones, asociado a las disimilitudes respecto de las variables que utilicemos en el análisis. En términos generales, el PCA es una técnica más “fiable” para datos ambientales (matrices de correlación:distancias Euclideanas) que en matrices biológicas (matrices de covarianza:distancia de Bray-Curtis)

Requisitos PCA

Aunque el PCA requiere de normalidad multivariada de los datos, la prueba suele ser muy tolerante a esta condición. Algunas técnicas como la Kurtosis y Asimetría nos permitirían establecer las características de normalidad de los datos (Kurtosis=0; Asimetría=0), sin embargo, son meramente descriptivas del comportamiento de los datos. Otro elemento que requerimos verificar en la matriz de datos es la presencia de outliers, dado que estos tienden a afectar las correlaciones que determinemos. Más adelante utilizaremos algunas funciones de R para mejorar el comportamiento de los datos.

Debido a que el PCA analiza variables que pueden estar en diferentes unidades de medición, e.g pH, temperatura, conductividad, es preferible utilizar transformaciones de datos: normalización.

Fortalezas y debilidades del PCA

Las principales fortalezas están asociadas a (1) ser conceptualmente y (2) computacionalmente simple, además de (3) permitir ejes interpretables o útiles para otros análisis. Por el contrario, el PCA se considera (3) poco flexible para establecer las disimilitudes entre las observaciones y (4) poco conservador para preservar propiedades de las distancias matemáticas de los elementos, este último asociado a la construcción de un gráfico de dos planos cuando el comportamiento puede tener múltiples planos.

Cuando se trabaja con un PCA es recomendable reportar los siguientes elementos en los reportes o publicaciones:

  • La matriz con la cual trabajé: correlación o covarianza.
  • La cantidad de ejes a utilizar: normalmente los dos primeros son los más relevantes en nuestros análisis.
  • Las características de los gráficos que elaboremos: SCALING

Para la construcción de un PCA, podemos utilizar varios paquetes y funciones disponibles en R. A continuación desarrollaremos algunos ejemplos. En particular, recomiendo la utilización del paquete Vegan, elaborado por Jari Oksanen, dada su articulación con otras funciones muy útiles para el análisis de datos biológicos. Este paquete está constantemente en revisión a través del depositorio en Github: VEGAN GITHUB

Construcción del PCA

Primero vamos a cargar los paquetes que requerimos:

library(vegan)
library(ade4)#Algunas opciones requieren este paquete!
library(PerformanceAnalytics)

Para el ejemplo vamos a utilizar el dataset “doubs”, disponible en Vegan:

data("doubs")

Dado que solo vamos a trabajar con los datos ambientales, debemos seleccionar el elemento “env”, en el cual están los datos ambientales:

env<-doubs$env

En ocasiones podemos necesitar eliminar elementos desde R, sin afectar el archivo de origen del cual cargamos nuestros datos. En este caso vamos a eliminar la fila #8 de nuestro set de datos:

env<-env[-8, ] #elimina fila (fila, columna)
#Note que R sobreescribe sobre el mismo vector!!

Una recomendación inicial para el trabajo del PCA es la eliminación o selección de algunas variables, utilizando como criterio aquellas variables que están altamente correlacionadas:

chart.Correlation(env)

cor(env)
##             dfs         alt        slo         flo          pH         har
## dfs  1.00000000 -0.93893906 -0.7555877  0.94734109  0.01522514  0.73030747
## alt -0.93893906  1.00000000  0.7658280 -0.86280579 -0.05027785 -0.78549505
## slo -0.75558775  0.76582805  1.0000000 -0.71656547 -0.27713925 -0.66664648
## flo  0.94734109 -0.86280579 -0.7165655  1.00000000  0.03312637  0.73662526
## pH   0.01522514 -0.05027785 -0.2771392  0.03312637  1.00000000  0.08451511
## har  0.73030747 -0.78549505 -0.6666465  0.73662526  0.08451511  1.00000000
## pho  0.47322419 -0.43698762 -0.3997436  0.37868776 -0.07940250  0.37318607
## nit  0.73874252 -0.75263077 -0.6070823  0.59315083 -0.04046292  0.53495392
## amm  0.40795909 -0.38107709 -0.3492304  0.29252515 -0.12200180  0.29613600
## oxy -0.57051149  0.42467525  0.4937437 -0.42109447  0.19239804 -0.37363740
## bdo  0.43542349 -0.38238374 -0.3346889  0.29518914 -0.16170564  0.33697473
##            pho         nit        amm        oxy        bdo
## dfs  0.4732242  0.73874252  0.4079591 -0.5705115  0.4354235
## alt -0.4369876 -0.75263077 -0.3810771  0.4246753 -0.3823837
## slo -0.3997436 -0.60708231 -0.3492304  0.4937437 -0.3346889
## flo  0.3786878  0.59315083  0.2925252 -0.4210945  0.2951891
## pH  -0.0794025 -0.04046292 -0.1220018  0.1923980 -0.1617056
## har  0.3731861  0.53495392  0.2961360 -0.3736374  0.3369747
## pho  1.0000000  0.80093149  0.9699345 -0.7575015  0.9091698
## nit  0.8009315  1.00000000  0.8022323 -0.6867146  0.6832300
## amm  0.9699345  0.80223230  1.0000000 -0.7462700  0.9028247
## oxy -0.7575015 -0.68671462 -0.7462700  1.0000000 -0.8398165
## bdo  0.9091698  0.68322998  0.9028247 -0.8398165  1.0000000

No hay un criterio específico para seleccionar una determinada variable, por lo tanto el criterio del investigador es muy importante en este punto. Algunos métodos de regresión como el Forward o Backward regression permiten establecer con determinado grado de significancia las variables más significativas en mis datasets ambientales.

A continuación podemos elaborar el PCA a partir del dataset:

acp<-rda(env,scale=T) #Scale realiza estandarización variables; utiliza la matriz de correlaciones.

La opción summary despliega la información obtenida en el PCA:

summary(acp)
summary(acp,scaling=1)

Las opciones de scaling permiten entregar resultados distintos en la interpretación de los datos, pero no afecta el cálculo del PCA. Estas opciones son importantes en la función gráfica:

  • Scaling 1: Gráfico biplot de distancias. “Las distancias entre los objetos en el gráfico biplot son las aproximaciones de las distancias Euclideanas in un espacio multidimensional”, es decir, los ángulos entre los vectores NO reflejan sus correlaciones.

  • Scaling 2: Gráfico de correlaciones. “Las distancias entre los objetos en el gráfico biplot NO son las aproximaciones de las distancias Euclideanas in un espacio multidimensional”, es decir, los ángulos entre los descriptores reflejan las correlaciones.

Es importante hacer notar que en el PCA, los primeros dos vectores (ejes principales) siempre explican la mayor cantidad de varianza, lo que en el lenguaje de Vegan se denomina: inertia

Funciones gráficas del PCA

A continuación las opciones gráficas para Vegan:

par(mfrow = c(1, 2)) #divide la pantalla para obtener los dos gráficos
biplot(acp, scaling = 1, main = "PCA - scaling: 1")
biplot(acp, main = "PCA - scaling: 2")

# La opción por default es scaling 2

En ocasiones se presenta un círculo alrededor de los vectores que creamos. Este círculo se denomina círculo de contribución al equilibrio y por lo tanto todas las variables que tengan un vector de tamaño mayor al círculo son las de mayor contribución al promedio de los vectores. Es una opción que únicamente es posible en Scaling=1, por la consideración matemática para la elaboración de los análisis, pero requiere ortogonalidad en las variables

Otras opciones gráficas son las proporcionadas en la función cleanplot.pca, las cuales puede revisar en el Github de Vegan Cleanplot.

La otra opción es utilizar la función “prcomp” disponible en las bases de R.

prin_comp <- prcomp(env, scale. = T)
summary(prin_comp)
## Importance of components:
##                          PC1    PC2     PC3     PC4     PC5     PC6
## Standard deviation     2.539 1.4917 0.99912 0.63112 0.60186 0.50360
## Proportion of Variance 0.586 0.2023 0.09075 0.03621 0.03293 0.02306
## Cumulative Proportion  0.586 0.7883 0.87903 0.91524 0.94817 0.97123
##                            PC7     PC8     PC9    PC10    PC11
## Standard deviation     0.40132 0.33260 0.15149 0.13220 0.06617
## Proportion of Variance 0.01464 0.01006 0.00209 0.00159 0.00040
## Cumulative Proportion  0.98587 0.99593 0.99801 0.99960 1.00000
biplot(prin_comp, scale = 0)

Bibliografía

Clarke, K. R., & Warwick, R. M. (2001). Change in marine communities. An approach to statistical analysis and interpretation.

Legendre, P., & Legendre, L. F. (2012). Numerical ecology (Vol. 24). Elsevier.

McCune, B., Grace, J. B., & Urban, D. L. (2002). Analysis of ecological communities (Vol. 28). Gleneden Beach, OR: MjM software design.

Si encuentra algún error o duda, escríbame a meyer.guevara.mora@una.cr

—–FIN—–