Esto expone la sugerencia perspicaz proporcionada en un comentario de @ttnphns.
Junto a variables casi correlacionadas aumenta la contribución de su factor subyacente común a la PCA. Podemos ver esto geométricamente. Considere estos datos en el plano XY, que se muestra como una nube de puntos:
Hay poca correlación, una covarianza aproximadamente igual, y los datos están centrados: PCA (sin importar cómo se realice) informaría dos componentes aproximadamente iguales.
Agreguemos ahora una tercera variable igual a más una pequeña cantidad de error aleatorio. La matriz de correlación de muestra esto con los pequeños coeficientes fuera de la diagonal, excepto entre las filas y columnas segunda y tercera ( y ):Y ( X , Y , Z ) Y ZZY( X, Y, Z)YZ
⎛⎝⎜1)- 0.0344018- 0.046076- 0.03440181)0.941829- 0.0460760.9418291)⎞⎠⎟
Geométricamente, hemos desplazado todos los puntos originales casi verticalmente, levantando la imagen anterior directamente del plano de la página. Esta nube de puntos pseudo 3D intenta ilustrar el levantamiento con una vista en perspectiva lateral (basada en un conjunto de datos diferente, aunque generado de la misma manera que antes):
Los puntos se encuentran originalmente en el plano azul y se elevan a los puntos rojos. El eje original apunta a la derecha. La inclinación resultante también extiende los puntos a lo largo de las direcciones YZ, duplicando así su contribución a la varianza. En consecuencia, un PCA de estos nuevos datos aún identificaría dos componentes principales principales, pero ahora uno de ellos tendrá el doble de varianza que el otro.Y
Esta expectativa geométrica se confirma con algunas simulaciones R
. Para esto, repetí el procedimiento de "levantamiento" creando copias casi colineales de la segunda variable una segunda, tercera, cuarta y quinta vez, nombrándolas a . Aquí hay una matriz de diagrama de dispersión que muestra cómo esas últimas cuatro variables están bien correlacionadas:X 5X2X5 5
El PCA se realiza utilizando correlaciones (aunque en realidad no importa para estos datos), utilizando las dos primeras variables, luego tres, ... y finalmente cinco. Muestro los resultados usando gráficas de las contribuciones de los componentes principales a la varianza total.
Inicialmente, con dos variables casi sin correlación, las contribuciones son casi iguales (esquina superior izquierda). Después de agregar una variable correlacionada con la segunda, exactamente como en la ilustración geométrica, todavía hay solo dos componentes principales, uno ahora dos veces más grande que el otro. (Un tercer componente refleja la falta de correlación perfecta; mide el "grosor" de la nube en forma de panqueque en el diagrama de dispersión 3D.) Después de agregar otra variable correlacionada ( ), el primer componente ahora es aproximadamente tres cuartos del total ; después de agregar un quinto, el primer componente es casi cuatro quintos del total. En los cuatro casos, los componentes después del segundo probablemente serían considerados intrascendentes por la mayoría de los procedimientos de diagnóstico de PCA; en el último casoX4 4Un componente principal que vale la pena considerar.
Ahora podemos ver que puede haber mérito en descartar variables que se piensa que miden el mismo aspecto subyacente (pero "latente") de una colección de variables , porque incluir las variables casi redundantes puede hacer que el PCA enfatice demasiado su contribución. No hay nada matemáticamente correcto (o incorrecto) sobre tal procedimiento; Es una decisión basada en los objetivos analíticos y el conocimiento de los datos. Pero debe quedar muy claro que dejar de lado las variables que se sabe que están fuertemente correlacionadas con otras puede tener un efecto sustancial en los resultados de la PCA.
Aquí está el R
código.
n.cases <- 240 # Number of points.
n.vars <- 4 # Number of mutually correlated variables.
set.seed(26) # Make these results reproducible.
eps <- rnorm(n.vars, 0, 1/4) # Make "1/4" smaller to *increase* the correlations.
x <- matrix(rnorm(n.cases * (n.vars+2)), nrow=n.cases)
beta <- rbind(c(1,rep(0, n.vars)), c(0,rep(1, n.vars)), cbind(rep(0,n.vars), diag(eps)))
y <- x%*%beta # The variables.
cor(y) # Verify their correlations are as intended.
plot(data.frame(y)) # Show the scatterplot matrix.
# Perform PCA on the first 2, 3, 4, ..., n.vars+1 variables.
p <- lapply(2:dim(beta)[2], function(k) prcomp(y[, 1:k], scale=TRUE))
# Print summaries and display plots.
tmp <- lapply(p, summary)
par(mfrow=c(2,2))
tmp <- lapply(p, plot)