19 votos

Interpretación de las discrepancias entre R y SPSS con el análisis factorial exploratorio

Soy estudiante de posgrado en informática. He estado haciendo un análisis factorial exploratorio para un proyecto de investigación. Mis colegas (que dirigen el proyecto) utilizan SPSS, mientras que yo prefiero utilizar R. Esto no importaba hasta que descubrimos una importante discrepancia entre los dos paquetes estadísticos.

Estamos utilizando factorización del eje principal como método de extracción (tenga en cuenta que soy muy consciente de la diferencia entre ACP y análisis factorial, y que estamos sin usar PCA (al menos no intencionadamente). Por lo que he leído, esto debería corresponder al método del "eje principal" en R, y a la "factorización del eje principal" o a los "mínimos cuadrados no ponderados" en SPSS, según la documentación de R . Estamos utilizando un método de rotación oblicua (específicamente, promax ) porque esperamos factores correlacionados, y estamos interpretando el matriz de patrones .

Si se ejecutan los dos procedimientos en R y SPSS, hay diferencias importantes. La matriz de patrones da diferentes cargas. Aunque esto da más o menos las mismas relaciones entre los factores y las variables, hay una diferencia de hasta 0,15 entre las cargas correspondientes, lo que parece más de lo que se esperaría por una implementación diferente del método de extracción y las rotaciones promax. Sin embargo, esa no es la diferencia más sorprendente.

La varianza acumulada explicada por los factores se sitúa en torno al 40% en los resultados del SPSS y al 31% en los de R. Esta es una diferencia enorme, y ha llevado a mis colegas a querer utilizar SPSS en lugar de R. No tengo ningún problema con esto, pero una diferencia tan grande me hace pensar que podríamos estar interpretando algo de forma incorrecta, lo cual es un problema.

Para complicar aún más las cosas, el SPSS informa de diferentes tipos de varianza explicada cuando ejecutamos la factorización por mínimos cuadrados no ponderados. La proporción de varianza explicada por los Eigenvalores Iniciales es del 40%, mientras que la proporción de varianza explicada por la Extracción de Sumas de Cargas Cuadradas (SSL) es del 33%. Esto me lleva a pensar que los Eigenvalores Iniciales no es el número apropiado para mirar (sospecho que es la varianza explicada antes de la rotación, aunque no sé por qué es tan grande). Aún más confuso, SPSS también muestra los SSL de la rotación, pero no calcula el porcentaje de varianza explicada (SPSS me dice que tener factores correlacionados significa que no puedo sumar los SSL para encontrar la varianza total, lo que tiene sentido con las matemáticas que he visto). Los SSLs reportados por R no coinciden con ninguno de ellos, y R me dice que describe el 31% de la varianza total. Las SSL de R son las que más se ajustan a las SSL de Rotación. Los valores propios de R de la matriz de correlación original coinciden con los valores propios iniciales de SPSS.

Además, tenga en cuenta que he jugado con el uso de diferentes métodos, y que el ULS y el PAF de SPSS parecen coincidir más con el método PA de R.

Mis preguntas específicas:

  1. ¿Qué diferencia debo esperar entre R y SPSS con las implementaciones del análisis factorial?
  2. ¿Cuál de las Sumas de Cargas Cuadradas del SPSS debería interpretar, los Eigenvalores Iniciales, la Extracción o la Rotación?
  3. ¿Hay otras cuestiones que pueda haber pasado por alto?

Mis llamadas a SPSS y R son las siguientes:

SPSS:

FACTOR
/VARIABLES <variables>
/MISSING PAIRWISE
/ANALYSIS <variables>
/PRINT INITIAL KMO AIC EXTRACTION ROTATION
/FORMAT BLANK(.35)
/CRITERIA FACTORS(6) ITERATE(25)
/EXTRACTION ULS
/CRITERIA ITERATE(25)
/ROTATION PROMAX(4).

R:

library(psych)
fa.results <- fa(data, nfactors=6, rotate="promax",
scores=TRUE, fm="pa", oblique.scores=FALSE, max.iter=25)

0 votos

No puedo comprobarlo porque no uso R, pero sospecho que hay un fallo en la documentación. fm="pa" debería corresponder a /EXTRACTION PAF. Además, trate de comparar las soluciones antes de cualquier rotación, porque las diferencias leves en los algos de rotación pueden mezclarse con las diferencias del método de extracción.

1 votos

Gracias por echar un vistazo. Intentaré comparar las soluciones antes de la rotación. Debo mencionar que he probado tanto /EXTRACTION ULS como /EXTRACTION PAF, y hay muy poca diferencia en las cargas (pero ninguna se acerca realmente al método "pa" de R). La razón por la que muestro /EXTRACTION ULS arriba es porque ese es el comando que da las diferentes SSLs.

1 votos

El método del eje principal y el de los mínimos cuadrados no ponderados pueden dar a veces resultados similares, pero son fundamentalmente diferentes desde el punto de vista algorítmico. Creo que las equivalencias entre R y SPSS son las siguientes "pa"=PAF, "minres"=ULS, "gls"=GLS, "ml"=ML

24voto

Jared Farrish Puntos 120

En primer lugar, secundo la recomendación de ttnphns de mirar la solución antes de la rotación. El análisis factorial, tal y como se implementa en el SPSS, es un procedimiento complejo con varios pasos, la comparación del resultado de cada uno de estos pasos debería ayudarte a localizar el problema.

En concreto, puede ejecutar

FACTOR
/VARIABLES <variables>
/MISSING PAIRWISE
/ANALYSIS <variables>
/PRINT CORRELATION
/CRITERIA FACTORS(6) ITERATE(25)
/EXTRACTION ULS
/CRITERIA ITERATE(25)
/ROTATION NOROTATE.

para ver la matriz de correlación que SPSS utiliza para realizar el análisis factorial. Luego, en R, prepare usted mismo la matriz de correlación ejecutando

r <- cor(data)

Cualquier discrepancia en el tratamiento de los valores perdidos debería ser evidente en esta fase. Una vez que haya comprobado que la matriz de correlación es la misma, puede introducirla en el fa y ejecute su análisis de nuevo:

fa.results <- fa(r, nfactors=6, rotate="promax",
scores=TRUE, fm="pa", oblique.scores=FALSE, max.iter=25)

Si sigue obteniendo resultados diferentes en SPSS y R, el problema no está relacionado con los valores perdidos.

A continuación, puede comparar los resultados del propio método de análisis/extracción de factores.

FACTOR
/VARIABLES <variables>
/MISSING PAIRWISE
/ANALYSIS <variables>
/PRINT EXTRACTION
/FORMAT BLANK(.35)
/CRITERIA FACTORS(6) ITERATE(25)
/EXTRACTION ULS
/CRITERIA ITERATE(25)
/ROTATION NOROTATE.

y

fa.results <- fa(r, nfactors=6, rotate="none", 
scores=TRUE, fm="pa", oblique.scores=FALSE, max.iter=25)

De nuevo, compare las matrices factoriales/comunidades/suma de cargas al cuadrado. Aquí puedes esperar algunas pequeñas diferencias, pero ciertamente no de la magnitud que describes. Todo esto te daría una idea más clara de lo que está pasando.

Ahora, para responder directamente a sus tres preguntas:

  1. Según mi experiencia, es posible obtener resultados muy similares, a veces después de dedicar algún tiempo a averiguar las diferentes terminologías y a juguetear con los parámetros. He tenido varias ocasiones de ejecutar análisis factoriales tanto en SPSS como en R (normalmente trabajando en R y luego reproduciendo el análisis en SPSS para compartirlo con colegas) y siempre he obtenido esencialmente los mismos resultados. Por lo tanto, generalmente no esperar grandes diferencias, lo que me lleva a sospechar que el problema podría ser específico de su conjunto de datos. Sin embargo, probé rápidamente los comandos que me proporcionaste en un conjunto de datos que tenía por ahí (es una escala Likert) y las diferencias eran, de hecho, mayores de lo que estoy acostumbrado, pero no tan grandes como las que describes. (Puede que actualice mi respuesta si tengo más tiempo para jugar con esto).
  2. La mayoría de las veces, la gente interpreta la suma de cargas al cuadrado después de la rotación como la "proporción de varianza explicada" por cada factor, pero esto no tiene sentido después de una rotación oblicua (por lo que no se informa en absoluto en psico y el SPSS sólo informa de los valores propios en este caso - incluso hay una pequeña nota a pie de página sobre ello en la salida). Los valores propios iniciales se calculan antes de cualquier extracción de factores. Obviamente, no le dicen nada sobre la proporción de la varianza explicada por sus factores y tampoco son realmente "sumas de cargas cuadradas" (a menudo se utilizan para decidir el número de factores a retener). Sin embargo, las "Sumas de Cargas Cuadradas de Extracción" del SPSS deberían coincidir con las "Cargas SS" proporcionadas por psico .
  3. Es una conjetura en este momento, pero ¿has comprobado si el procedimiento de extracción de factores converge en 25 iteraciones? Si la rotación no converge, el SPSS no emite ninguna matriz de patrón/estructura y no se puede perder, pero si la extracción no converge, la última matriz de factores se muestra de todos modos y el SPSS continúa felizmente con la rotación. Sin embargo, verá una nota "a. Intentó extraer 6 factores. Se necesitan más de 25 iteraciones. (Convergencia=XXX). Se ha terminado la extracción". Si el valor de convergencia es pequeño (algo así como 0,005, siendo la condición de parada por defecto "menos de 0,0001"), aún no explicaría las discrepancias que usted reporta, pero si es realmente grande hay algo patológico en sus datos.

2 votos

Muy buena respuesta. Iba a sugerir (si es posible) que el autor proporcionara una matriz de correlación de muestra para ver dónde está el problema. No debería ser demasiado difícil amañarla/hacerla lo suficientemente ambigua como para compartir los datos. Además, si no se puede reproducir el problema al empezar directamente con la misma matriz de correlación, eso identifica en parte el problema.

0 votos

Gracias, es una respuesta fantástica. Seguiré estos pasos cuando vuelva a mi máquina de SPSS. En respuesta a la pregunta 3, la solución converge en 9 iteraciones, pero lo tendré en cuenta para cualquier análisis que haga en el futuro. Fue muy útil saber que las diferencias no suelen ser tan grandes como he descrito (también estoy trabajando con datos de escala Likert, de 5 puntos).

1 votos

Por si alguien se lo pregunta, el fa en R es de la función psych paquete. El factanal del paquete base debería funcionar de forma similar, pero psych de todos modos vale la pena utilizarlo para otros fines. De hecho, al tratarse de datos Likert, sería conveniente utilizar el psych del paquete fa.poly en su lugar: ver la documentación de ayuda .

6voto

pauly Puntos 932

Recientemente he descubierto que la mayoría de las discrepancias de análisis factorial entre SPSS y R (con el paquete Psych) se aclaran cuando los datos se cuando los datos son tratados como perdidos en cada programa, la matriz de correlación aparece exactamente igual en cada uno, y no se utiliza la rotación oblicua.

Una de las discrepancias restantes está en la serie de valores que aparecen en el diagrama de dispersión que indica los valores propios después de la extracción. En "scree(cor(mydata))" de R estos "factores" no coinciden con los que aparecen en la tabla de Varianza Explicada de SPSS en "Sumas de Cargas Cuadradas de Extracción". Observe que los "componentes" del gráfico de desglose de R coinciden con el gráfico de desglose de SPSS, que también coincide con los "Eigenvalores iniciales" de su tabla de varianza explicada.

También he descubierto que la "Proporción Var" explicada por cada factor es, en R, a veces reportada como (la proporción para un factor dado)/(la cantidad explicada por todos los factores), mientras que en otras ocasiones es (la proporción para un factor dado)(el número de elementos en el análisis). Así que si obtiene lo primero, es, aunque no coincida, al menos proporcional y derivable de lo que SPSS informa en "Extracción de Sumas de Cargas Cuadradas...% de Varianza".

Sin embargo, la introducción de la rotación oblimin en cada programa crea discrepancias considerables en las cargas de los ítems o en la varianza explicada de los factores que no he podido resolver.

1voto

El método de rotación por defecto en R es oblimin, por lo que es probable que esto cause la diferencia. Como prueba, ejecute un PAF/oblimin en SPSS y R y encontrará resultados casi idénticos.

1voto

astrajingga Puntos 73

Esta respuesta es aditiva a las anteriores. Como sugiere Gala en su respuesta, primero hay que determinar si las soluciones proporcionadas por R (por ejemplo, fa en psych) y SPSS son diferentes antes de la rotación. Si son iguales, entonces hay que mirar la configuración de la rotación en cada programa. (Para SPSS, puede encontrar todos los ajustes en la entrada del manual de referencia para FACTOR).

Un ajuste importante a tener en cuenta es el Normalización de Kaiser . Por defecto, SPSS realiza la normalización de Kaiser durante la rotación, mientras que algunos Las funciones de R como 'fa' no lo hacen. Puede controlar esa configuración en SPSS especificando /CRITERIA = NOKAISER/KAISER, para comprobar si elimina cualquier discrepancia entre los resultados con cada programa.

0voto

Aleš Žiberna Puntos 1

No sé qué causa las diferencias en las cargas de los patrones, pero supongo que la diferencia en el % de varianza explicada se debe a: - ¿Interpretas la primera parte (de 2 ó 3) de la tabla de varianza explicada del SPSS, que en realidad muestra los resultados del análisis de componentes principales? La segunda parte muestra los resultados del análisis factorial sin rotar y la tercera los resultados después de la rotación (si se utiliza). - el hecho de que la función fa (o más precisamente su método de impresión) calcula erróneamente el SSL para los factores oblicuos. Para obtener el % de la varianza total explicada por el factor, debe calcular la suma de las cargas estructurales cuadradas por factor y dividirla por el número de variables. Sin embargo, no puede sumarlas (en caso de rotaciones oblicuas) para obtener el % de varianza explicada por todos los factores. Para obtenerlo, calcule la comunalidad media o el % total de varianza explicada por los factores ortogonales (por ejemplo, utilizando rotaciones nulas o varimax), que pueden sumarse.

0 votos

Bienvenido al sitio, @AlesZiberna. Estamos intentando construir un depósito permanente de información estadística en forma de preguntas y respuestas. Así que una cosa que nos preocupa es el linkrot. ¿Podría proporcionar una visión general de la información en el enlace en caso de que se pierda, y para que los lectores puedan decidir si quieren seguirlo?

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X