Esto amplía la perspicaz pista proporcionada en un comentario de @ttnphns.
La adición de variables casi correlacionadas aumenta la contribución de su factor subyacente común al ACP. Podemos ver esto geométricamente. Consideremos estos datos en el plano XY, mostrados como una nube de puntos:
Hay poca correlación, una covarianza aproximadamente igual y los datos están centrados: El ACP (no importa cómo se lleve a cabo) informaría de dos componentes aproximadamente iguales.
Introduzcamos ahora una tercera variable $Z$ igual a $Y$ más una pequeña cantidad de error aleatorio. La matriz de correlación de $(X,Y,Z)$ lo muestra con los pequeños coeficientes fuera de diagonal, excepto entre la segunda y tercera filas y columnas ( $Y$ y $Z$ ):
$$\left( \begin{array}{ccc} 1. & -0.0344018 & -0.046076 \\ -0.0344018 & 1. & 0.941829 \\ -0.046076 & 0.941829 & 1. \end{array} \right)$$
Geométricamente, hemos desplazado todos los puntos originales casi verticalmente, levantando la imagen anterior justo fuera del plano de la página. Esta pseudo-nube de puntos 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 original $Y$ apunta a la derecha. La inclinación resultante también estira los puntos a lo largo de las direcciones YZ, Así, duplicando su contribución a la varianza. En consecuencia, un ACP de estos nuevos datos seguiría identificando dos componentes principales principales, pero ahora uno de ellos tendrá el doble de varianza que el otro.
Esta expectativa geométrica se confirma con algunas simulaciones en R
. Para ello, repetí el procedimiento de "elevación" creando copias casi colineales de la segunda variable una segunda, tercera, cuarta y quinta vez, denominándolas $X_2$ a través de $X_5$ . Aquí hay una matriz de dispersión que muestra cómo esas últimas cuatro variables están bien correlacionadas:
El ACP se realiza mediante correlaciones (aunque realmente no importa para estos datos), utilizando primero dos variables, luego tres, ..., y finalmente cinco. Muestro los resultados mediante gráficos de las contribuciones de los componentes principales a la varianza total.
Inicialmente, con dos variables casi no correlacionadas, las contribuciones son casi iguales (esquina superior izquierda). Después de añadir una variable correlacionada con la segunda -exactamente como en la ilustración geométrica-, siguen existiendo sólo dos componentes principales, uno de los cuales duplica el tamaño del otro. (Un tercer componente refleja la falta de correlación perfecta; mide el "grosor" de la nube en forma de panqueque en el gráfico de dispersión 3D). Tras añadir otra variable correlacionada ( $X_4$ ), el primer componente es ahora unas tres cuartas partes del total; después de añadir una quinta parte, el primer componente es casi cuatro quintas partes del total. En los cuatro casos, la mayoría de los procedimientos de diagnóstico del ACP consideran que los componentes posteriores al segundo no tienen importancia; en el último caso, es posible que algunos procedimientos concluyan que sólo hay un componente principal que vale la pena considerar.
Ahora podemos ver que puede ser conveniente descartar las variables que se cree que miden el mismo aspecto subyacente (pero "latente") de un conjunto de variables porque la inclusión de las variables casi redundantes puede hacer que el ACP enfatice demasiado su contribución. No hay nada matemáticamente No hay nada correcto (o incorrecto) en ese 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 del ACP.
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)
29 votos
Sólo una pista. Piense en cómo cambiarán los resultados del PCA si se añaden más y más copias (o casi copias) de una de las variables.
3 votos
@type2 ¿puede nombrar el artículo que estaba leyendo?