¿Qué es el análisis de componentes principales?

El Análisis de Componentes Principales (PCA) es una técnica estadística de síntesis de la información, o reducción de la dimensión (número de variables). Es decir, ante un banco de datos con muchas variables, el objetivo será reducirlas a un menor número perdiendo la menor cantidad de información posible. Los nuevos componentes principales o factores serán una combinación lineal de las variables originales, y además serán independientes entre sí.

Un aspecto clave en PCA es la interpretación de los factores, ya que ésta no viene dada a priori, sino que será deducida tras observar la relación de los factores con las variables iniciales (habrá, pues, que estudiar tanto el signo como la magnitud de las correlaciones). Esto no siempre es fácil, y será de vital importancia el conocimiento que el experto tenga sobre la materia de investigación.

Fases de un Análisis de Componentes Principales:

  1. Análisis de la matriz de correlaciones. Un análisis de componentes principales tiene sentido si existen altas correlaciones entre las variables, ya que esto es indicativo de que existe información redundante y, por tanto, pocos factores explicarán gran parte de la variabilidad total.
  2. Selección de los factores. La elección de los factores se realiza de tal forma que el primero recoja la mayor proporción posible de la variabilidad original; el segundo factor debe recoger la máxima variabilidad posible no recogida por el primero, y así sucesivamente. Del total de factores se elegirán aquéllos que recojan el porcentaje de variabilidad que se considere suficiente. A éstos se les denominará componentes principales.
  3. Análisis de la matriz factorial. Una vez seleccionados los componentes principales, se representan en forma de matriz. Cada elemento de ésta representa los coeficientes factoriales de las variables (las correlaciones entre las variables y los componentes principales). La matriz tendrá tantas columnas como componentes principales y tantas filas como variables.
  4. Interpretación de los factores. Para que un factor sea fácilmente interpretable debe tener las siguientes características, que son difíciles de conseguir:
    • Los coeficientes factoriales deben ser próximos a 1.
    • Una variable debe tener coeficientes elevados sólo con un factor.
    • No deben existir factores con coeficientes similares.
  5. Cálculo de las puntuaciones factoriales. Son las puntuaciones que tienen los componentes principales para cada caso, que nos permitirán su análisis posterior y su representación gráfica.

Caso de estudio: Capacidad reproductiva de plantas invasoras del género Acacia

(Datos cedidos por Oscar Godoy y Pilar Castro)
En un estudio sobre la capacidad reproductiva de plantas invasoras se quiere investigar si el número de inflorescencias (un atributo que puede caracterizar el éxito de una planta para colonizar nuevos nichos) que desarrollan plantas invasoras frente a plantas no invasoras de un mismo género (Acacia) está relacionado con las características climáticas predominantes en la región de origen de la planta. Para estudiar esta cuestión se han recogido datos de 45 variables climáticas que caracterizan el rango de distribución de origen de 54 especies del género Acacia, algunas de las cuales se comportan cómo invasoras y otras no.

Queremos construir un modelo en dónde el número de inflorescencias quede en función del carácter invasivo de la planta (factor con dos niveles) y de las variables climáticas que caracterizan su rango de distribución de origen. Un problema es que un modelo no puede tener casi tantas variables explicativas (45) como muestras (54) porque no hay "réplicas" suficientes para comprobar la significación de cada una de las variables del modelo. Otro problema es que las variables climáticas tienden a estar muy correlacionadas. Dicha colinealidad genera modelos inestables y poco precisos en su estimación de los parámetros del modelo.

Objetivos:

  1. Reducir la dimensionalidad de las variables climáticas y sintetizar toda esta variabilidad en unas pocas variables (máximo 3).
  2. Generar un modelo estadístico que permita explicar el número de inflorescencias en función del carácter invasivo de las especies y de las características climáticas de origen de las plantas.

Documentación

Datos

Los datos están disponibles pinchando aquí. Puedes descargarte los datos a tu ordenador, copiarlos al portapapeles o leerlos directamente de la dirección URL (esto último es lo más recomendable para que el código sea reproducible desde cualquier ordenador) utilizando en todos los casos la función read.table().

Pasos a seguir

  1. Lee los datos y sálvalos en un objeto llamado data. Explora los datos con las funciones edit() y str(). ¿Has identificado cuál es la variable respuesta? ¿Has identificado las variables climáticas? ¿Son todas ellas numéricas? Si no lo son, algo va mal. ¿Hay algún dato faltante? Si es así, podemos utlizar la función na.omit() para eliminar estos datos (utiliza la página de ayuda).
  2. Explora la correlación entre las variables climáticas con la función cor().
  3. Busca una función en R que haga el análisis de componentes principales (busca con help.search()). Nota: la función o funciones que vamos a usar en esta sesión se encuentran dentro del paquete stats().
  4. Implementa un PCA y asígnalo a un objeto llamado pca1.
  5. Explora la estructura de dicho objeto con la función str(). ¿Qué tipo de objeto es? ¿Qué información contiene?
  6. Mira la variabilidad explicada por cada uno de los ejes con la función summary().
  7. Interpreta qué significan los dos primeros ejes del PCA. Para ello tendrás que mirar la matriz de correlación que está contenida dentro del objeto pca1.
  8. Dibuja los resultados del PCA con la función biplot().
  9. Ajusta un modelo lineal o un modelo lineal generalizado en dónde el número de inflorescencias quede en función del carácter invasivo de la especie y de los dos primeros ejes del PCA. ¿Es signficativa alguna de las variables climáticas? ¿Cómo interpretas la relación entre los ejes del PCA (si son significativos) y la variable respuesta?
  10. ¿Es el modelo adecuado? ¿Cómo son los residuos? ¿Se podría sugerir otro modelo con una distribución de errores de otro tipo qué fuese más adecuado?

Código


#1. Se asigna la URL dónde están los datos a un objeto llamado dirweb
dirweb<-"http://archivos-para-subir.googlegroups.com/web/Ejemplo%205%20-%20PCA.txt?gda=yW4B1lEAAAABV8DnKdep7DQec7BaKTDeYhDbrbR8u6_sF1Zz6BLdA0S0ZaACVqsENErRmaRW3oVIPQFAn1KFgSEYV0OJBic7Uwk_6Qi3BU8HCN0q6OYwM5VxXgp_nHWJXhfr7YhqVgA"
#2. Se leen los datos con la función read.table() y se asigna a un objeto llamado data
data<-read.table(url(dirweb),header=T, dec=",", sep="\t")
#3. Se mira la estructura de data

str(data)
edit(data)
#4. Se eliminan las filas con NA utilizando la función na.omit()
data<-na.omit(data)
str(data)

#5. Se mira la correlación entre variables con la función cor()
cor(data[,4:48])

#6. Se ajusta un PCA con la función prcomp()

pca1<- prcomp(data[,4:48])
pca1
str(pca1)
summary(pca1)

#7. Se dibujan los dos primeros factores del PCA

biplot(pca1)
#8. Se guardan los tres primeros factores del PCA en un nuevo data.frame para usarlo en un GLM
pca2<-pca1$x[,1:3]
str(pca2)


#9. Se ajusta un GLM en dónde el número de inflorescencias quedaría en función del carácter
#9. invasivo de la especie y de los tres primeros ejes del PCA

glm.acacias<- glm(data$Inflor~data$Invasora + pca2, family=poisson)
summary(glm.acacias)
anova(glm.acacias)

#10.Se miran los residuos del modelo

par(mfcol=c(2,2))
plot(glm.acacias)

#11.Se realiza un test de Shapiro-Wilk para ver la normalidad de los residuos

shapiro.test(residuals(glm.acacias))
hist(residuals(glm.acacias))