¿Tiene sentido el signo de puntajes o de cargas en PCA o FA? ¿Puedo revertir el signo?


37

Realicé el análisis de componentes principales (PCA) con R usando dos funciones diferentes ( prcompy princomp) y observé que las puntuaciones de PCA diferían en el signo. ¿Cómo puede ser?

Considera esto:

set.seed(999)
prcomp(data.frame(1:10,rnorm(10)))$x

            PC1        PC2
 [1,] -4.508620 -0.2567655
 [2,] -3.373772 -1.1369417
 [3,] -2.679669  1.0903445
 [4,] -1.615837  0.7108631
 [5,] -0.548879  0.3093389
 [6,]  0.481756  0.1639112
 [7,]  1.656178 -0.9952875
 [8,]  2.560345 -0.2490548
 [9,]  3.508442  0.1874520
[10,]  4.520055  0.1761397

set.seed(999)
princomp(data.frame(1:10,rnorm(10)))$scores
         Comp.1     Comp.2
 [1,]  4.508620  0.2567655
 [2,]  3.373772  1.1369417
 [3,]  2.679669 -1.0903445
 [4,]  1.615837 -0.7108631
 [5,]  0.548879 -0.3093389
 [6,] -0.481756 -0.1639112
 [7,] -1.656178  0.9952875
 [8,] -2.560345  0.2490548
 [9,] -3.508442 -0.1874520
[10,] -4.520055 -0.1761397

¿Por qué los signos ( +/-) difieren para los dos análisis? Si estuviera usando componentes principales PC1y PC2como predictores en una regresión, es decir lm(y ~ PC1 + PC2), ¡esto cambiaría completamente mi comprensión del efecto de las dos variables ydependiendo del método que utilicé! ¿Cómo podría decir que PC1tiene, por ejemplo, un efecto positivo yy PC2tiene, por ejemplo, un efecto negativo y?


Además: si el signo de los componentes de PCA no tiene sentido, ¿esto también es cierto para el análisis factorial (FA)? ¿Es aceptable voltear (revertir) el signo de las puntuaciones individuales de los componentes PCA / FA (o de las cargas, como una columna de matriz de carga)?


10
+1. Esta pregunta se hace mucho en este foro, en diferentes variaciones (a veces sobre PCA, a veces sobre análisis factorial). Este es el hilo más popular que cubre el tema (gracias a la excelente respuesta de @ enero), por lo que sería conveniente marcar otras preguntas existentes y futuras como duplicados de esta. Me tomé la libertad de hacer su pregunta un poco más general cambiando el título y mencionando el análisis factorial al final. Espero que no te importe. También he proporcionado una respuesta adicional.
ameba dice Reinstate Monica

1
El signo es arbitrario; El significado sustantivo depende lógicamente del signo. Siempre puede cambiar el signo de cualquier factor etiquetado como "X" al signo opuesto, y etiquetarlo como "opuesto X". Es cierto para cargas, para puntajes. Algunas implementaciones cambiarían, por conveniencia, el signo de un factor para que los valores positivos (en puntajes o cargas) dominen, en suma. Otras implementaciones no hacen nada y dejan la decisión de revertir el signo en usted, si le importa. El significado estadístico (como la fuerza del efecto) no cambia aparte de que su "dirección" se invierte.
ttnphns

Respuestas:


38

PCA es una simple transformación matemática. Si cambia los signos de los componentes, no cambia la varianza contenida en el primer componente. Además, cuando cambia los signos, los pesos ( prcomp( ... )$rotation) también cambian el signo, por lo que la interpretación se mantiene exactamente igual:

set.seed( 999 )
a <- data.frame(1:10,rnorm(10))
pca1 <- prcomp( a )
pca2 <- princomp( a )
pca1$rotation

muestra

                 PC1       PC2
X1.10      0.9900908 0.1404287
rnorm.10. -0.1404287 0.9900908

y pca2$loadingsmostrar

Loadings:
          Comp.1 Comp.2
X1.10     -0.99  -0.14 
rnorm.10.  0.14  -0.99 

               Comp.1 Comp.2
SS loadings       1.0    1.0
Proportion Var    0.5    0.5
Cumulative Var    0.5    1.0

Entonces, ¿por qué la interpretación sigue siendo la misma?

Realiza la regresión PCA del ycomponente 1. En la primera versión ( prcomp), digamos que el coeficiente es positivo: cuanto mayor es el componente 1, mayor es la y. ¿Qué significa cuando se trata de las variables originales? Como el peso de la variable 1 ( 1:10en a) es positivo, eso muestra que cuanto mayor es la variable 1, mayor es la y.

Ahora use la segunda versión ( princomp). Dado que el componente ha cambiado el signo, cuanto mayor es y, menor es el componente 1: el coeficiente de y <sobre PC1 ahora es negativo. Pero también lo es la carga de la variable 1; eso significa que, cuanto mayor sea la variable 1, cuanto menor sea el componente 1, mayor y - la interpretación es la misma.

Posiblemente, la forma más fácil de ver eso es usar un biplot.

library( pca3d )
pca2d( pca1, biplot= TRUE, shape= 19, col= "black"  )

muestra

ingrese la descripción de la imagen aquí

El mismo biplot para la segunda variante muestra

pca2d( pca2$scores, biplot= pca2$loadings[,], shape= 19, col= "black" )

Como puede ver, las imágenes se giran 180 °. Sin embargo, la relación entre los pesos / cargas (las flechas rojas) y los puntos de datos (los puntos negros) es exactamente la misma; por lo tanto, la interpretación de los componentes no cambia.

ingrese la descripción de la imagen aquí


Incluso agregué fotos ahora :-)
Enero

1
Esto es cierto, pero ¿qué pasa con las proyecciones en PCA? Yo mismo estoy codificando PCA, y algunos de mis vectores propios se voltean en comparación con MATLAB incorporado princomp. Entonces, durante la proyección, mis datos proyectados también se voltean en algunas de las dimensiones. Mi objetivo es hacer una clasificación de los coeficientes. ¿La señal todavía no importa aquí?
Sibbs Gambling

Entonces, si simplemente por una mejor comprensión de mis PC, me gustaría intercambiar los signos de los puntajes, ¿es válido?

13

Esta pregunta se hace mucho en este foro, por lo que me gustaría complementar la excelente respuesta de @ enero con consideraciones un poco más generales.

x1,x2,...xdz1,z2,...zkx1z1z2x12z1+3z223

OriginalvariablesScoresLoadings.

z1

11=1.

La conclusión es que para cada componente PCA o FA, el signo de sus puntajes y de sus cargas es arbitrario y sin sentido. Se puede voltear, pero solo si el signo de los puntajes y las cargas se invierte al mismo tiempo.


Esto es cierto, pero ¿qué pasa con las proyecciones en PCA? Yo mismo estoy codificando PCA, y algunos de mis vectores propios se voltean en comparación con MATLAB incorporado princomp. Entonces, durante la proyección, mis datos proyectados también se voltean en algunas de las dimensiones. Mi objetivo es hacer una clasificación de los coeficientes. ¿La señal todavía no importa aquí?
Sibbs Gambling

1
Aún no importa. ¿Por qué lo haría? Los datos invertidos son exactamente equivalentes a los datos no invertidos para todos los fines, incluida la clasificación.
ameba dice Reinstate Monica

Bueno, no para todos los propósitos. Por coherencia entre el algoritmo, a mí también me gustaría hacer coincidir los signos. Sin embargo, no todo se voltea al mirar los componentes. ¿Cómo elige R el signo para que yo pueda hacer lo mismo?
Myoch

1
@Myoch recomendaría inventar su propia convención y aplicarla en todas partes, en lugar de tratar de averiguar qué está haciendo R. Puede elegir el signo de manera que el primer valor sea positivo, o que más de la mitad de los valores sean positivos, etc.
ameba dice Reinstate Monica

1
@user_anon No hay inverso.
ameba dice Reinstate Monica

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.