2010-11-10 14 views
11

Al realizar un análisis de factores utilizando factanal, el resultado habitual es una tabla de cargas más otra información. ¿Existe una forma directa de usar estas cargas para crear una matriz/data.frame de factores? Por ejemplo, usarlos en el análisis de regresión más adelante.¿Cómo crear factores de factanal?

EDITAR: el objetivo de esto es obtener variables para el modelado posterior. Solo conozco los puntajes de los factores, pero sugerencias/sugerencias para otra terminología son bienvenidas :)

EDIT2: la respuesta de respuesta de Joris Meys es básicamente lo que estaba pidiendo. Aún así, mueve mi pregunta hacia una dirección que podría ser más adecuada para statsoverflow, pero la mantendré aquí por ahora, porque el grupo correcto de personas es el que discute la solución:

¿Cuál es el beneficio de la regresión? puntajes basados? El resultado del producto (ML) está altamente correlacionado con los factores ... Sinceramente, me pregunto por qué la diferencia es tan grande en mi caso.

fa$scores # the correct solution 
fac <- m1 %*% loadings(fa) # the answer on your question 
diag(cor(fac,fa$scores)) 
#returns: 
Factor1 Factor2 Factor3 
0.8309343 0.8272019 0.8070837 

Respuesta

21

Ha preguntado cómo usar las cargas para la construcción de puntajes. Su solución es, aunque correcta, no hacer eso. Está utilizando un método de regresión (también puede usar el método de Bartlett), y esto usa la restricción de que los puntajes no están correlacionados, centrados alrededor de 0 y con varianza = 1. Estos no son los mismos factores que se obtendrían al usar F = ML con F la matriz de factores, M la matriz original y L la matriz de carga.

Una demostración con el ejemplo de los archivos de ayuda:

v1 <- c(1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,4,5,6) 
v2 <- c(1,2,1,1,1,1,2,1,2,1,3,4,3,3,3,4,6,5) 
v3 <- c(3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,5,4,6) 
v4 <- c(3,3,4,3,3,1,1,2,1,1,1,1,2,1,1,5,6,4) 
v5 <- c(1,1,1,1,1,3,3,3,3,3,1,1,1,1,1,6,4,5) 
v6 <- c(1,1,1,2,1,3,3,3,4,3,1,1,1,2,1,6,5,4) 
m1 <- cbind(v1,v2,v3,v4,v5,v6) 

fa <- factanal(m1, factors=3,scores="regression") 

fa$scores # the correct solution 

fac <- m1 %*% loadings(fa) # the answer on your question 

Estos valores son claramente diferentes.

Editar: Esto tiene que ver con el hecho de que los puntajes de regresión de Thomson se basan en variables escaladas, y toman en cuenta la matriz de correlación. Si desea calcular las puntuaciones de la mano, que haría:

> fac2 <- scale(m1) %*% solve(cor(m1)) %*% loadings(fa) 
> all.equal(fa$scores,as.matrix(fac2)) 
[1] TRUE 

Para obtener más información, vea this review

Y para mostrar por qué es importante: si se calculan las puntuaciones de la manera "ingenua" , tus puntajes en realidad están correlacionados. Y eso es lo que quería deshacerse en primer lugar:

> round(cor(fac),2) 
     Factor1 Factor2 Factor3 
Factor1 1.00 0.79 0.81 
Factor2 0.79 1.00 0.82 
Factor3 0.81 0.82 1.00 

> round(cor(fac2),2) 
     Factor1 Factor2 Factor3 
Factor1  1  0  0 
Factor2  0  1  0 
Factor3  0  0  1 
+0

Sí, eso es lo que pedí. ¿Estandarizar el único beneficio de estos puntajes creado por regresión? El cálculo de la matriz ML proporciona variables bastante altamente correlacionadas (ver edición de mi pregunta). –

+3

@ ran2: No, estos puntajes tienen un poco más de matemática detrás de ellos, que se explica escasamente en el archivo de ayuda de factanal. Una visión más elaborada se puede encontrar en este documento: http://www.psy.ed.ac.uk/people/iand/Bartholomew%20%282009%29%20Br%20J%20Math%20Stat%20Psychol%20factor%20scores % 20Thomson% 20Spearman% 20Bartlett.pdf –

+2

acc. ¡Gracias por la lección, hombre! –

3

No he comprobado de forma manual, pero tope aquí tienes una manera de hacerlo:

fa <- factanal(mydf,3,rotation="varimax",scores="regression") 
fa$scores 

HTH otra persona. Sugerencias, correcciones, mejoras bienvenidas!

+5

utilizando una rotación promax viola la suposición de puntajes no correlacionados. Aunque la interpretación parece más fácil, la estructura de los datos ha cambiado profundamente. Uno tiene que ser muy, muy cuidadoso usando una rotación no ortogonal. –

+0

¡Thx! aportación muy valiosa Simplemente lo mezclé, solo lo intentaba, la interpretación no mejora con eso.Acabo de comprobar la solidez de mi interpretación y publiqué la línea incorrecta. –

2

¿No desea el componente loadings?

loadings(fa) 

Ver ?loadings y ?factanal para comprobar que se trata de cargas que desee. Encuentro la terminología utilizada tan confusa a veces, con cargas, puntajes, ...

+0

de hecho es confuso. pero lo que sugiere es equivalente a fa $ loadings que le gusta la "correlación" con un factor. Lo que quiero es un factor por observación. –

+0

Quería decir 'mydf% *% loadings (fa) 'es lo que pensé que querías ... Y veo que Joris sugirió algo así en su respuesta. –

+0

Lo siento, Gavin, a veces solo necesito un poco de ayuda extra. Vi lo que querías decir a primera vista. Gracias a Joris y tu comentario está claro y es la respuesta a mi pregunta :) –

Cuestiones relacionadas