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

14

Soy un estudiante graduado en ciencias de la computación. He estado haciendo un análisis factorial exploratorio para un proyecto de investigación. Mis colegas (que lideran el proyecto) usan SPSS, mientras que yo prefiero usar R. Esto no importó hasta que descubrimos una gran discrepancia entre los dos paquetes estadísticos.

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

Al ejecutar los dos procedimientos en R y SPSS, existen grandes diferencias. La matriz de patrones da diferentes cargas. Aunque esto da más o menos el mismo factor a las relaciones variables, existe una diferencia de hasta 0.15 entre las cargas correspondientes, lo que parece más de lo que se esperaría con una implementación diferente del método de extracción y las rotaciones de Promax. Sin embargo, esa no es la diferencia más sorprendente.

La varianza acumulativa explicada por los factores es de alrededor del 40% en los resultados de SPSS y del 31% en los resultados de R. Esta es una gran diferencia, y ha llevado a mis colegas a querer usar 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 incorrectamente, lo cual es un problema.

Al ensuciar aún más las aguas, SPSS informa diferentes tipos de varianza explicada cuando ejecutamos factorización de mínimos cuadrados no ponderados. La proporción de la varianza explicada por los valores propios iniciales es del 40%, mientras que la proporción de la varianza explicada de las sumas de extracción de cargas cuadradas (SSL) es del 33%. Esto me lleva a pensar que los valores propios iniciales no son el número apropiado para mirar (sospecho que esta es la variación explicada antes de la rotación, aunque es tan grande que está más allá de mí). Aún más confuso, SPSS también muestra Rotation SSL, pero no calcula el porcentaje de varianza explicada (SPSS me dice que tener factores correlacionados significa que no puedo agregar SSL para encontrar la varianza total, lo que tiene sentido con las matemáticas que he visto). Los SSL informados de R no coinciden con ninguno de estos, y R me dice que describe el 31% de la varianza total. Los SSL de R coinciden más con los 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 ULS y PAF de SPSS parecen coincidir con el método de PA de R más cercano.

Mis preguntas especificas:

  1. ¿Qué diferencia debería esperar entre R y SPSS con implementaciones de análisis factorial?
  2. ¿Cuál de las sumas de cargas cuadradas de SPSS debería interpretar, valores propios iniciales, extracción o rotación?
  3. ¿Hay otros problemas que podría 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)
Oliver
fuente
No puedo verificarlo porque no uso R, pero sospecho que hay un lapso en la documentación. fm = "pa" debe corresponder a / EXTRACTION PAF. Además, intente comparar las soluciones antes de cualquier rotación, porque las diferencias leves en los algos de rotación pueden confundirse con las diferencias del método de extracción.
ttnphns
1
¡Gracias por echar un vistazo! Intentaré comparar las soluciones antes de la rotación. Debo mencionar que probé tanto / EXTRACTION ULS como / EXTRACTION PAF, y hay muy poca diferencia en las cargas (pero tampoco está muy cerca del método R "pa"). La razón por la que muestro / EXTRACTION ULS arriba es porque ese es el comando que le da a los diversos SSL.
Oliver
1
El método del eje principal y los métodos de mínimos cuadrados no ponderados pueden dar resultados similares a veces, pero son fundamentalmente diferentes algorítmicamente. Creo que las equivalencias entre R y SPSS son las siguientes: "pa" = PAF, "minres" = ULS, "gls" = GLS, "ml" = ML
ttnphns
1
Además, verifique el tratamiento de los valores faltantes. En su código SPSS, los elimina por pares. En tu código R - ...?
ttnphns
Comparé los SSL de prerotación de R y coinciden con los SSL de extracción en la solución ULS de SPSS (desafortunadamente, la solución PAF en SPSS no me dio estos valores). Creo que la rotación promax parece ser la culpable. Bueno, eso o la forma en que SPSS imprime los SSL de rotación. Tal vez R haga una estimación de la varianza total explicada por los SSL finales, mientras que SPSS me dice que tal estimación no es apropiada.
Oliver

Respuestas:

21

En primer lugar, hago una segunda recomendación para mirar la solución antes de la rotación. El análisis factorial tal como se implementa en SPSS es un procedimiento complejo con varios pasos, comparar el resultado de cada uno de estos pasos debería ayudarlo a identificar el problema.

Específicamente puedes correr

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 está utilizando para llevar a cabo el análisis factorial. Luego, en R, prepare la matriz de correlación usted mismo ejecutando

r <- cor(data)

Cualquier discrepancia en la forma en que se manejan los valores faltantes debe ser evidente en esta etapa. Una vez que haya verificado que la matriz de correlación es la misma, puede alimentarla a la función fa y ejecutar su análisis nuevamente:

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

Si aún obtiene resultados diferentes en SPSS y R, el problema no es la falta de valores relacionados.

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

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)

Nuevamente, compare las matrices de factores / comunalidades / suma de cargas cuadradas. Aquí puede esperar algunas pequeñas diferencias, pero ciertamente no de la magnitud que describe. Todo esto te daría una idea más clara de lo que está sucediendo.

Ahora, para responder sus tres preguntas directamente:

  1. En mi experiencia, es posible obtener resultados muy similares, a veces después de pasar un tiempo descubriendo las diferentes terminologías y jugando con los parámetros. He tenido varias ocasiones para realizar análisis factoriales tanto en SPSS como en R (generalmente trabajando en R y luego reproduciendo el análisis en SPSS para compartirlo con colegas) y siempre obtuve esencialmente los mismos resultados. Por lo tanto, generalmente no esperaría 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 proporcionó en un conjunto de datos que tenía (es una escala Likert) y las diferencias fueron, de hecho, mayores de lo que estoy acostumbrado, pero no tan grandes como las que usted describe. (Podría actualizar mi respuesta si tengo más tiempo para jugar con esto).
  2. La mayoría de las veces, las personas interpretan la suma de las 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 los informes de psicología y SPSS solamente los valores propios en este caso, incluso hay una pequeña nota al pie al respecto en la salida). Los valores propios iniciales se calculan antes de cualquier extracción de factor. Obviamente, no le dicen nada sobre la proporción de varianza explicada por sus factores y tampoco son realmente "suma de cargas cuadradas" (a menudo se usan para decidir la cantidad de factores a retener). Sin embargo, las "Sumas de extracción de cargas cuadradas" de SPSS deben coincidir con las "cargas SS" proporcionadas por psych .
  3. Esta es una suposición descabellada en esta etapa, pero ¿ha verificado si el procedimiento de extracción de factores convergió en 25 iteraciones? Si la rotación no logra converger, SPSS no genera ningún patrón / matriz de estructura y no puede fallar, pero si la extracción no converge, la última matriz de factores se muestra y SPSS continúa felizmente con la rotación. Sin embargo, verá una nota "a. Intentó extraer 6 factores. Se requieren más de 25 iteraciones. (Convergencia = XXX). La extracción se terminó ”. Si el valor de convergencia es pequeño (algo así como .005, la condición de detención predeterminada es“ menor que .0001 ”), aún no se tomarían en cuenta las discrepancias que usted informa, pero si es realmente grande, hay algo patológico. sobre sus datos
Gala
fuente
2
Muy buena respuesta. Iba a sugerir (si es posible) que el autor proporcione una matriz de correlación de muestra para ver dónde radica el problema. No debería ser demasiado difícil eludirlo / hacerlo lo suficientemente ambiguo como para compartir los datos. Además, si uno no puede reproducir el problema al comenzar directamente con la misma matriz de correlación que identifica parcialmente el problema.
Andy W
Gracias, esta es una respuesta fantástica. Seguiré estos pasos una vez que regrese a mi máquina SPSS. En respuesta al # 3, la solución converge en 9 iteraciones, pero lo tendré en cuenta para cualquier análisis futuro que haga. 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).
Oliver
En caso de que alguien más se pregunte, la fafunción en R es del psychpaquete. La factanalfunción del paquete base debería funcionar de manera similar, pero psychvale la pena usarla para otros fines de todos modos. De hecho, como se trata de datos de Likert, sería aconsejable utilizar los psychpaquetes en su fa.polylugar: consulte la documentación de ayuda .
Nick Stauner
6

Recientemente, descubrí que la mayoría de las discrepancias en el análisis de factores entre SPSS y R (con el paquete Psych) se aclaran cuando los datos se tratan como faltantes en cada programa, la matriz de correlación se muestra exactamente igual en cada uno y no se utiliza rotación oblicua.

Una discrepancia restante se encuentra en la serie de valores que aparecen en el gráfico de pantalla que indica valores propios después de la extracción. En "scree (cor (mydata))" de R, estos "factores" no coinciden con los enumerados en la tabla Explicación de varianza de SPSS en "Sumas de extracción de cargas cuadradas". Tenga en cuenta que los "componentes" del diagrama de pantalla R coinciden con el diagrama de pantalla de SPSS, que también coincide con los "Valores propios iniciales" de la tabla Explicación de varianza.

También he encontrado que la "Proporción Var" explicada por cada factor es, en R, a veces informada 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). Entonces, si obtiene el primero, es, aunque no es una coincidencia, al menos proporcional y derivable de lo que SPSS informa en "Sumas de extracción de cargas cuadradas ...% de variación".

Sin embargo, la introducción de la rotación oblimin en cada programa crea discrepancias considerables en la carga de elementos o la variación de los factores explica que no he podido resolver.

rolando2
fuente
1

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

Stefan Dombrowski
fuente
0

No sé qué causa las diferencias en las cargas de patrones, pero supongo que la diferencia en% de la varianza explicada se debe a: Resultados del análisis de componentes principales. La segunda parte muestra los resultados de los resultados del análisis de factores no rotados y los terceros resultados después de la rotación (si se usa). - el hecho de que la función fa (o más precisamente su método de impresión) calcula incorrectamente SSL para factores oblicuos. Para obtener el% de varianza total explicado por factor, debe calcular la suma de las cargas estructurales al cuadrado por factor y dividirlo por el número de variables. Sin embargo, no puede sumar estos (en caso de rotaciones oblicuas) para obtener el% de varianza explicado por todos los factores. Para conseguir esto,

Aleš Žiberna
fuente
Bienvenido al sitio, @AlesZiberna. Estamos tratando de construir un repositorio permanente de información estadística en forma de preguntas y respuestas. Entonces, una cosa que nos preocupa es linkrot. ¿Podría proporcionar una visión general de la información en el enlace en caso de que falle, y para que los lectores puedan decidir si quieren seguirla?
gung - Restablece a Monica
0

Esta respuesta es aditiva a las anteriores. Como sugiere Gala en su respuesta, primero se debe determinar si las soluciones proporcionadas por R (por ejemplo, fa en psicología) y SPSS son diferentes antes de la rotación. Si son lo mismo, mire la configuración de rotación en cada programa. (Para SPSS, puede encontrar todas las configuraciones en la entrada manual de referencia para FACTOR).

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

AlexR
fuente