Interpretazione delle discrepanze tra R e SPSS con analisi fattoriale esplorativa


14

Sono uno studente laureato in informatica. Ho fatto un'analisi esplorativa dei fattori per un progetto di ricerca. I miei colleghi (che stanno guidando il progetto) usano SPSS, mentre io preferisco usare R. Questo non ha importanza fino a quando non abbiamo scoperto una grande discrepanza tra i due pacchetti statistici.

Stiamo usando il factoring dell'asse principale come metodo di estrazione (tieni presente che sono ben consapevole della differenza tra PCA e analisi dei fattori e che non stiamo usando PCA , almeno non intenzionalmente). Da quello che ho letto, questo dovrebbe corrispondere al metodo del "asse principale" in R, e sia "asse principale di factoring" o "minimi quadrati non ponderati" in SPSS, secondo la documentazione R . Stiamo usando un metodo di rotazione obliqua (in particolare, promax ) perché prevediamo fattori correlati e stiamo interpretando la matrice del modello .

Eseguendo le due procedure in R e SPSS, ci sono grandi differenze. La matrice del modello fornisce diversi caricamenti. Sebbene ciò dia più o meno lo stesso fattore alle relazioni variabili, esiste una differenza di 0,15 tra i caricamenti corrispondenti, che sembra più di quanto ci si aspetterebbe da una diversa implementazione del metodo di estrazione e delle rotazioni del promax. Tuttavia, questa non è la differenza più sorprendente.

La varianza cumulativa spiegata dai fattori è circa del 40% nei risultati SPSS e del 31% nei risultati R. Questa è una differenza enorme, e ha portato i miei colleghi a voler usare SPSS invece di R. Non ho alcun problema, ma una differenza così grande mi fa pensare che potremmo interpretare qualcosa in modo errato, il che è un problema.

Sfumando ancora di più le acque, SPSS riporta diversi tipi di varianza spiegata quando eseguiamo il factoring dei minimi quadrati non ponderati. La percentuale di varianza spiegata per autovalori iniziali è del 40%, mentre la proporzione di varianza spiegata dalle somme di estrazione dei carichi quadrati (SSL) è del 33%. Questo mi porta a pensare che gli autovalori iniziali non siano il numero appropriato da guardare (ho il sospetto che questa sia la varianza spiegata prima della rotazione, anche se è così grande che va oltre me). Ancora più confuso, SPSS mostra anche Rotation SSL, ma non calcola la percentuale di varianza spiegata (SPSS mi dice che avere fattori correlati significa che non posso aggiungere SSL per trovare la varianza totale, il che ha senso con la matematica che ho visto). Gli SSL segnalati da R non corrispondono a nessuno di questi e R mi dice che descrive il 31% della varianza totale. Gli SSL di R corrispondono più strettamente agli SSL di rotazione. Gli autovalori di R dalla matrice di correlazione originale corrispondono agli autovalori iniziali di SPSS.

Inoltre, tieni presente che ho giocato con metodi diversi e che ULS e PAF di SPSS sembrano corrispondere al metodo PA di R più vicino.

Le mie domande specifiche:

  1. Quanta differenza dovrei aspettarmi tra R e SPSS con le implementazioni dell'analisi fattoriale?
  2. Quale delle somme di caricamenti quadrati da SPSS dovrei interpretare, autovalori iniziali, estrazione o rotazione?
  3. Ci sono altri problemi che potrei aver trascurato?

Le mie chiamate a SPSS e R sono le seguenti:

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)

Non riesco a controllarlo perché non uso R, ma sospetto che ci sia un errore nella documentazione. fm = "pa" dovrebbe corrispondere a / EXTRACTION PAF. Inoltre, prova a confrontare le soluzioni prima di qualsiasi rotazione, poiché lievi differenze di alghe di rotazione possono mescolarsi con le differenze del metodo di estrazione.
ttnphns,

1
Grazie per dare un'occhiata! Proverò a confrontare le soluzioni prima della rotazione. Devo dire che ho provato sia / EXTRACTION ULS sia / EXTRACTION PAF, e c'è una differenza molto piccola nei caricamenti (ma nessuno dei due è molto vicino al metodo R "pa"). Il motivo per cui mostro / EXTRACTION ULS sopra è perché questo è il comando che fornisce i vari SSL.
Oliver

1
Il metodo dell'asse principale e i metodi dei minimi quadrati non ponderati possono dare risultati simili a volte ma sono sostanzialmente diversi algoritmicamente. Credo che le equivalenze tra R e SPSS siano le seguenti: "pa" = PAF, "minres" = ULS, "gls" = GLS, "ml" = ML
ttnphns

1
Inoltre, controlla il trattamento dei valori mancanti. Nel tuo codice SPSS, li elimini in coppia. Nel tuo codice R - ...?
ttnphns,

Ho confrontato gli SSL pre-rotazione da R e corrispondono agli SSL di estrazione nella soluzione ULS di SPSS (purtroppo la soluzione PAF in SPSS non mi ha dato questi valori). Penso che la rotazione del Promax sembra essere il colpevole. Bene, o quello o il modo in cui SPSS stampa SSL di rotazione. Forse R fa una stima della varianza totale spiegata dagli SSL finali, mentre SPSS mi dice che tale stima non è appropriata.
Oliver

Risposte:


21

Prima di tutto, secondo la raccomandazione di ttnphns di esaminare la soluzione prima della rotazione. L'analisi fattoriale implementata in SPSS è una procedura complessa con diversi passaggi, il confronto del risultato di ciascuno di questi passaggi dovrebbe aiutare a individuare il problema.

In particolare puoi eseguire

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

per vedere la matrice di correlazione utilizzata da SPSS per eseguire l'analisi dei fattori. Quindi, in R, prepara tu stesso la matrice di correlazione eseguendo

r <- cor(data)

Qualsiasi discrepanza nel modo in cui vengono gestiti i valori mancanti dovrebbe essere evidente in questa fase. Dopo aver verificato che la matrice di correlazione è la stessa, è possibile inviarla alla funzione fa ed eseguire nuovamente l'analisi:

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

Se si ottengono ancora risultati diversi in SPSS e R, il problema non manca in relazione ai valori.

Successivamente, è possibile confrontare i risultati del metodo di analisi / estrazione del fattore stesso.

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)

Ancora una volta, confrontare le matrici dei fattori / comunità / somma dei carichi quadrati. Qui puoi aspettarti alcune minuscole differenze, ma certamente non della grandezza che descrivi. Tutto ciò ti darebbe un'idea più chiara di ciò che sta accadendo.

Ora, per rispondere direttamente alle tue tre domande:

  1. Nella mia esperienza, è possibile ottenere risultati molto simili, a volte dopo aver trascorso un po 'di tempo a capire le diverse terminologie e ad armeggiare con i parametri. Ho avuto diverse occasioni per eseguire analisi dei fattori sia in SPSS che in R (in genere lavorando in R e quindi riproducendo l'analisi in SPSS per condividerla con i colleghi) e ho sempre ottenuto essenzialmente gli stessi risultati. Pertanto, generalmente no aspetto grandi differenze, il che mi porta a sospettare che il problema potrebbe essere specifico per il tuo set di dati. Ho comunque provato rapidamente i comandi che hai fornito su un set di dati che avevo in giro (è una scala di Likert) e le differenze erano in realtà più grandi di quelle a cui sono abituato ma non così grandi come quelle che descrivi. (Potrei aggiornare la mia risposta se avessi più tempo per giocare con questo.)
  2. Il più delle volte, le persone interpretano la somma dei carichi quadrati dopo la rotazione come la "proporzione di varianza spiegata" da ciascun fattore, ma ciò non ha senso a seguito di una rotazione obliqua (motivo per cui non è affatto riportato nei rapporti psicologici e SPSS gli autovalori in questo caso - c'è anche una piccola nota a piè di pagina nell'output). Gli autovalori iniziali vengono calcolati prima di qualsiasi estrazione di fattore. Ovviamente, non ti dicono nulla sulla proporzione di varianza spiegata dai tuoi fattori e non sono nemmeno realmente la "somma dei carichi quadrati" (sono spesso usati per decidere il numero di fattori da conservare). SPSS "Somma di estrazione di carichi quadrati" dovrebbe tuttavia corrispondere ai "carichi di SS" forniti da psych .
  3. Questa è un'ipotesi sfrenata in questa fase, ma hai verificato se la procedura di estrazione dei fattori convergeva in 25 iterazioni? Se la rotazione non riesce a convergere, SPSS non genera alcuna matrice di pattern / struttura e non puoi perderla, ma se l'estrazione non riesce a convergere, viene comunque visualizzata la matrice dell'ultimo fattore e SPSS continua beato con la rotazione. Vedresti comunque una nota “a. Tentativo di estrarre 6 fattori. Sono necessarie più di 25 iterazioni. (Convergenza = XXX). L'estrazione è stata terminata. ”Se il valore di convergenza è piccolo (qualcosa come .005, la condizione di arresto predefinita è“ inferiore a .0001 ”), non spiegherebbe comunque le discrepanze segnalate ma se è davvero grande c'è qualcosa di patologico sui tuoi dati.

2
Risposta molto bella. Stavo per suggerire (se possibile) che l'autore fornisse una matrice di correlazione di esempio per vedere dove si trova il problema. Non dovrebbe essere troppo difficile confonderlo / renderlo abbastanza ambiguo da condividere i dati. Inoltre, se non è possibile riprodurre il problema quando si avvia direttamente con la stessa matrice di correlazione che identifica parzialmente il problema.
Andy W,

Grazie, questa è una risposta fantastica. Eseguirò questi passaggi una volta tornato alla mia macchina SPSS. In risposta a # 3, la soluzione converge in 9 iterazioni, ma lo terrò a mente per qualsiasi analisi futura che faccio. È stato molto utile sapere che le differenze non sono in genere così grandi come ho descritto (sto anche lavorando con i dati di scala Likert, a 5 punti).
Oliver

Nel caso qualcuno si chieda, la fafunzione in R è dal psychpacchetto. La factanalfunzione dal pacchetto base dovrebbe funzionare in modo simile, ma psychvale comunque la pena usarla per altri scopi. Infatti, dato che si tratta di dati Likert, sarebbe saggio utilizzare invece il psychpacchetto fa.poly: consultare la documentazione di aiuto .
Nick Stauner,

6

Recentemente ho scoperto che la maggior parte delle discrepanze nell'analisi fattoriale tra SPSS e R (con pacchetto Psych) si risolvono quando i dati vengono trattati in modo errato in ciascun elenco, la matrice di correlazione si presenta esattamente uguale in ciascuno di essi e non viene utilizzata alcuna rotazione obliqua.

Una discrepanza rimanente è nella serie di valori che compaiono nel diagramma ghiaione che indica autovalori dopo l'estrazione. In "scree (cor (mydata)) di R" questi "fattori" non corrispondono a quelli elencati nella tabella Spiegazione della varianza di SPSS in "Somma di estrazione di carichi quadrati". Si noti che i "componenti" del diagramma a ghiaia R corrispondono al diagramma a ghiaia di SPSS, che corrisponde anche agli "Autovalori iniziali" della tabella Spiegazione varianza.

Ho anche scoperto che il "Proportion Var" spiegato da ciascun fattore è, in R, a volte riportato come (la proporzione per un dato fattore) / (la quantità spiegata da tutti i fattori), mentre altre volte lo è (la proporzione per un dato fattore) (il numero di elementi nell'analisi). Quindi, se ottieni il primo, è, sebbene non una corrispondenza, almeno proporzionale e derivabile da ciò che SPSS riporta in "Somma di estrazione dei carichi quadrati ...% di varianza".

L'introduzione della rotazione obliminale in ciascun programma, tuttavia, crea notevoli discrepanze nei caricamenti degli articoli o la varianza dei fattori ha spiegato che non sono stato in grado di risolvere.


1

Il metodo di rotazione predefinito in R è oblimin, quindi questo probabilmente causerà la differenza. Come test esegui un PAF / oblimin in SPSS e R e troverai risultati quasi identici.


0

Non so cosa causi le differenze nei caricamenti di pattern, ma presumo che la differenza in% della varianza spiegata sia dovuta a: - stai forse interpretando la prima parte (di 2 o 3) della tabella di varianza spiegata SPSS che mostra effettivamente risultati dell'analisi dei componenti principali. La seconda parte mostra i risultati per i risultati dell'analisi fattoriale non ruotata e il terzo risultato dopo la rotazione (se utilizzato). - il fatto che la funzione fa (o più precisamente il suo metodo di stampa) calcoli erroneamente SSL per fattori obliqui. Per ottenere la% della varianza totale spiegata per fattore, è necessario calcolare la somma dei carichi strutturali quadrati per fattore e dividerla per numero di variabili. Tuttavia, non è possibile sommarli (in caso di rotazioni oblique) per ottenere la% della varianza spiegata da tutti i fattori. Per ottenere questo,


Benvenuti nel sito, @AlesZiberna. Stiamo cercando di creare un archivio permanente di informazioni statistiche sotto forma di domande e risposte. Quindi una cosa di cui ci preoccupiamo è LinkRot. Potresti fornire una panoramica delle informazioni al link nel caso in cui si spenga, e così i lettori possono decidere se vogliono perseguirle?
gung - Ripristina Monica

0

Questa risposta è additiva a quelle sopra. Come suggerito da Gala nella sua risposta, si dovrebbe prima determinare se le soluzioni fornite da R (es. Fa in psych) e SPSS sono diverse prima della rotazione. Se sono uguali, osserva le impostazioni di rotazione in ciascun programma. (Per SPSS, è possibile trovare tutte le impostazioni nella voce del manuale di riferimento per FACTOR).

Un'impostazione importante da cercare è la normalizzazione di Kaiser . Per impostazione predefinita, SPSS esegue la normalizzazione di Kaiser durante la rotazione, mentre alcune funzioni R come 'fa' no. È possibile controllare tale impostazione in SPSS specificando / CRITERIA = NOKAISER / KAISER, per verificare se elimina eventuali discrepanze tra i risultati con ciascun programma.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.