Interpretando discrepâncias entre R e SPSS com análise fatorial exploratória

14

Eu sou um estudante de graduação em ciência da computação. Fiz algumas análises fatoriais exploratórias para um projeto de pesquisa. Meus colegas (que lideram o projeto) usam o SPSS, enquanto eu prefiro o R. Isso não importou até que descobrimos uma grande discrepância entre os dois pacotes estatísticos.

Estamos usando fatoração de eixo principal como método de extração (observe que estou bem ciente da diferença entre o PCA e a análise fatorial e que não estamos usando o PCA , pelo menos não intencionalmente). Pelo que tenho lido, esta deve corresponder ao método de "eixo principal" em R, e quer "principal factoring eixo" ou "mínimos quadrados não ponderados" em SPSS, de acordo com a documentação R . Estamos usando um método de rotação oblíqua (especificamente, promax ) porque esperamos fatores correlatos e estamos interpretando a matriz de padrões .

Executando os dois procedimentos no R e no SPSS, existem grandes diferenças. A matriz de padrões fornece diferentes cargas. Embora isso dê mais ou menos o mesmo fator às relações variáveis, há uma diferença de 0,15 entre as cargas correspondentes, o que parece mais do que seria esperado por apenas uma implementação diferente do método de extração e rotações do promax. No entanto, essa não é a diferença mais surpreendente.

A variância cumulativa explicada pelos fatores é de cerca de 40% nos resultados do SPSS e 31% nos resultados de R. Essa é uma diferença enorme e levou meus colegas a querer usar o SPSS em vez de R. Não tenho nenhum problema com isso, mas uma diferença tão grande me faz pensar que podemos estar interpretando algo incorretamente, o que é um problema.

Confundindo ainda mais as águas, o SPSS relata diferentes tipos de variação explicada quando executamos fatoração de mínimos quadrados não ponderada. A proporção da variação explicada pelos valores próprios iniciais é de 40%, enquanto a proporção da variação explicada dos Soma de extração de cargas quadradas (SSL) é de 33%. Isso me leva a pensar que os autovalores iniciais não são o número apropriado para se olhar (suspeito que essa seja a variação explicada antes da rotação, embora seja tão grande que esteja além de mim). Ainda mais confuso, o SPSS também mostra o Rotation SSL, mas não calcula a porcentagem de variação explicada (o SPSS me diz que ter fatores correlatos significa que não posso adicionar SSLs para encontrar a variação total, o que faz sentido com a matemática que já vi). Os SSLs relatados de R não correspondem a nenhum deles, e R diz que descreve 31% da variação total. Os SSLs de R correspondem aos SSL de rotação mais de perto. Os autovalores de R da matriz de correlação original correspondem aos autovalores iniciais do SPSS.

Além disso, observe que eu brinquei com o uso de métodos diferentes e que o ULS e o PAF do SPSS parecem combinar o método de PA do R o mais próximo.

Minhas perguntas específicas:

  1. Quanta diferença devo esperar entre o R e o SPSS com implementações de análise fatorial?
  2. Qual das somas de cargas quadradas do SPSS devo interpretar, autovalores iniciais, extração ou rotação?
  3. Existem outros problemas que eu possa ter esquecido?

Minhas chamadas para SPSS e R são as seguintes:

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
fonte
Não é possível verificar porque não uso R, mas suspeito que haja um lapso na documentação. fm = "pa" deve corresponder a / EXTRACTION PAF. Além disso, tente comparar as soluções antes de qualquer rotação, porque pequenas diferenças nos algos de rotação podem se misturar às diferenças do método de extração.
ttnphns
1
Obrigado por dar uma olhada! Vou tentar comparar as soluções antes da rotação. Devo mencionar que tentei o / EXTRACTION ULS e / EXTRACTION PAF, e há muito pouca diferença nas cargas (mas nenhuma delas é realmente próxima do método R "pa"). A razão pela qual eu mostro / EXTRACTION ULS acima é porque esse é o comando que fornece os vários SSLs.
Oliver
1
O método do eixo principal e os métodos dos mínimos quadrados não ponderados podem fornecer resultados semelhantes às vezes, mas são fundamentalmente diferentes algoritmicamente. Eu acredito que as equivalências entre R e SPSS são as seguintes: "pa" = PAF, "minres" = ULS, "gls" = GLS, "ml" = ML
ttnphns
1
Além disso, verifique o tratamento dos valores ausentes. No seu código SPSS, você os exclui aos pares. No seu código R - ...?
ttnphns
Comparei os SSLs de pré-rotação do R e eles correspondem aos SSLs de extração na solução ULS do SPSS (infelizmente, a solução PAF no SPSS não me forneceu esses valores). Eu acho que a rotação promax parece ser a culpada. Bem, isso ou a maneira como o SPSS imprime SSLs de rotação. Talvez R faça uma estimativa da variação total explicada pelos SSLs finais, enquanto o SPSS me diz que essa estimativa não é apropriada.
Oliver

Respostas:

21

Antes de tudo, recomendo a recomendação da análise da solução antes da rotação. A análise fatorial conforme implementada no SPSS é um procedimento complexo com várias etapas, comparando o resultado de cada uma dessas etapas deve ajudá-lo a identificar o problema.

Especificamente, você pode executar

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

para ver a matriz de correlação que o SPSS está usando para realizar a análise fatorial. Em R, prepare você mesmo a matriz de correlação executando

r <- cor(data)

Qualquer discrepância na maneira como os valores ausentes são tratados deve ser aparente nesse estágio. Depois de verificar se a matriz de correlação é a mesma, você pode alimentá-la com a função fa e executar sua análise novamente:

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

Se você ainda obtiver resultados diferentes no SPSS e R, o problema não está relacionado aos valores.

Em seguida, você pode comparar os resultados do próprio método de análise / extração de fatores.

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

e

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

Novamente, compare as matrizes fatoriais / comunalidades / soma das cargas quadradas. Aqui você pode esperar algumas pequenas diferenças, mas certamente não da magnitude que você descreve. Tudo isso lhe daria uma idéia mais clara do que está acontecendo.

Agora, responda suas três perguntas diretamente:

  1. Na minha experiência, é possível obter resultados muito semelhantes, às vezes depois de passar algum tempo descobrindo as diferentes terminologias e mexendo nos parâmetros. Tive várias ocasiões para executar análises fatoriais no SPSS e no R (normalmente trabalhando no R e depois reproduzindo a análise no SPSS para compartilhá-la com colegas) e sempre obtive essencialmente os mesmos resultados. Portanto, geralmente não esperaria grandes diferenças, o que me leva a suspeitar que o problema possa ser específico ao seu conjunto de dados. No entanto, tentei rapidamente os comandos que você forneceu em um conjunto de dados que eu tinha por aí (é uma escala Likert) e as diferenças eram de fato maiores do que estou acostumado, mas não tão grandes quanto as que você descreve. (Talvez eu atualize minha resposta se tiver mais tempo para brincar com isso.)
  2. Na maioria das vezes, as pessoas interpretam a soma das cargas quadradas após a rotação como a “proporção de variação explicada” por cada fator, mas isso não é significativo após uma rotação oblíqua (é por isso que não é relatado em todos os relatórios psicológicos e do SPSS) os autovalores neste caso - há até uma pequena nota de rodapé sobre isso na saída). Os autovalores iniciais são calculados antes de qualquer extração de fator. Obviamente, eles não informam nada sobre a proporção de variação explicada por seus fatores e também não são realmente a "soma das cargas quadradas" (geralmente são usados ​​para decidir o número de fatores a serem retidos). No entanto, o SPSS "Soma de extração de cargas quadradas" deve corresponder às "cargas SS" fornecidas por psych .
  3. Essa é uma suposição absurda nesse estágio, mas você verificou se o procedimento de extração de fatores convergiu em 25 iterações? Se a rotação falhar na convergência, o SPSS não produzirá nenhuma matriz de padrão / estrutura e você não poderá perdê-la, mas se a extração falhar na convergência, a última matriz de fatores será exibida e o SPSS continuará alegremente com a rotação. Você, no entanto, veria uma nota “a. Tentativa de extrair 6 fatores. Mais de 25 iterações necessárias. (Convergência = XXX). A extração foi encerrada. ”Se o valor de convergência for pequeno (algo como 0,005, a condição de parada padrão for“ inferior a 0,0001 ”), ainda assim não seria responsável pelas discrepâncias que você relatar, mas se for realmente grande, haverá algo patológico. sobre seus dados.
Gala
fonte
2
Resposta muito boa. Eu sugeriria (se possível) que o autor fornecesse uma matriz de correlação de amostra para ver onde está o problema. Não deve ser muito difícil falsificá-lo / torná-lo ambíguo o suficiente para compartilhar os dados. Além disso, se não for possível reproduzir o problema ao iniciar diretamente com a mesma matriz de correlação que identifica parcialmente o problema.
Andy W
Obrigado, esta é uma resposta fantástica. Vou seguir essas etapas assim que voltar à minha máquina SPSS. Em resposta ao item 3, a solução converge em 9 iterações, mas vou manter isso em mente para futuras análises que fizer. Foi muito útil saber que as diferenças normalmente não são tão grandes quanto eu descrevi (também estou trabalhando com dados da escala Likert, 5 pontos).
Oliver
Caso alguém mais se pergunte, a fafunção em R é do psychpacote. A factanalfunção do pacote base deve ter um desempenho semelhante, mas psychvale a pena usá-la para outros fins de qualquer maneira. De fato, como se trata de dados do Likert, seria aconselhável usar os psychpacotes fa.poly: consulte a documentação da ajuda .
Nick Stauner
6

Recentemente, descobri que a maioria das discrepâncias na análise fatorial entre o SPSS e o R (com pacote Psych) desaparece quando os dados são tratados com falta de lista em cada programa, a matriz de correlação aparece exatamente a mesma em cada um e nenhuma rotação oblíqua é usada.

Uma discrepância remanescente está na série de valores que aparecem no gráfico de scree indicando valores próprios após a extração. Nos "scree (cor (mydata)) de R", esses "fatores" não correspondem aos listados na tabela Variance Explained do SPSS em "Soma de extração de cargas quadradas". Observe que os "componentes" do gráfico de scree R correspondem ao gráfico de scree do SPSS, que também corresponde aos "Autovalores iniciais" da tabela Variance Explained.

Também descobri que a "Proporção Var" explicada por cada fator é, em R, algumas vezes relatada como (a proporção de um determinado fator) / (a ​​quantia explicada por todos os fatores), enquanto outras vezes é (a proporção para um dado fator) (o número de itens na análise). Portanto, se você obtiver a primeira, ela será, pelo menos proporcional e derivável, do que o SPSS relata em "Soma de extração de cargas quadradas ...% de variação".

Introduzir a rotação oblimin em cada programa, no entanto, cria discrepâncias consideráveis ​​no carregamento de itens ou na variação de fatores, explicando que eu não consegui resolver.

rolando2
fonte
1

O método de rotação padrão em R é oblimin, portanto, isso provavelmente causará a diferença. Como teste, execute um PAF / oblimin no SPSS e R e você encontrará resultados quase idênticos.

Stefan Dombrowski
fonte
0

Não sei o que causa as diferenças nas cargas de padrão, mas presumo que a diferença em% da variação explicada se deva a: - você talvez esteja interpretando a primeira parte (de 2 ou 3) da tabela de variação explicada do SPSS que realmente mostra resultados da análise de componentes principais. A segunda parte mostra os resultados da análise de fatores não rotacionados e os terceiros resultados após a rotação (se usado). - o fato de que a função fa (ou mais precisamente seu método de impressão) calcula incorretamente o SSL para fatores oblíquos. Para obter a% da variação total explicada por fator, você deve calcular a soma das cargas estruturais quadradas por fator e dividir por número de variáveis. No entanto, você não pode resumir isso (no caso de rotações oblíquas) para obter a% da variação explicada por todos os fatores. Para conseguir esta,

Aleš Žiberna
fonte
Bem-vindo ao site, @AlesZiberna. Estamos tentando construir um repositório permanente de informações estatísticas na forma de perguntas e respostas. Então, uma coisa com a qual nos preocupamos é o linkrot. Você poderia fornecer uma visão geral das informações no link, caso elas se esgotem, e para que os leitores possam decidir se desejam buscá-las?
gung - Restabelece Monica
0

Esta resposta é aditiva às que estão acima. Conforme sugerido por Gala em sua resposta, deve-se primeiro determinar se as soluções fornecidas por R (por exemplo, fa in psych) e SPSS são diferentes antes da rotação. Se forem iguais, verifique as configurações de rotação em cada programa. (Para o SPSS, você pode encontrar todas as configurações na entrada do manual de referência para FACTOR).

Uma configuração importante a procurar é a normalização de Kaiser . Por padrão, o SPSS faz a normalização do Kaiser durante a rotação, enquanto algumas funções R como 'fa' não. Você pode controlar essa configuração no SPSS especificando / CRITERIA = NOKAISER / KAISER, para verificar se elimina discrepâncias entre os resultados de cada programa.

AlexR
fonte