Procedura raccomandata per l'analisi fattoriale su dati dicotomici con R


10

Devo eseguire un'analisi fattoriale su un set di dati composto da variabili dicotomiche (0 = sì, 1 = no) e non so se sono sulla strada giusta.

Usando tetrachoric()creo una matrice di correlazione, su cui corro fa(data,factors=1). Il risultato è abbastanza vicino ai risultati che ricevo quando uso MixFactor , ma non è lo stesso.

  1. Va bene o consiglieresti un'altra procedura?
  2. Perché fa()funziona e factanal()produce un errore? ( Fehler in solve.default(cv) : System ist für den Rechner singulär: reziproke Konditionszahl = 4.22612e-18)

1
Non parlo (tedesco?) Ma l'errore sembra dovuto al fatto che la matrice tetrachorica è singolare (non invertibile). Anche con un campione di buone dimensioni alcune stime delle matrici di correlazione policoriche possono non essere matrici di correlazione appropriate. Il mio sospetto è che fa () stia usando i componenti principali e factanal () stia facendo la massima probabilità FA, ma questo non è ovvio per me dalla documentazione di fa ().
JMS,

@cada Quanti articoli / soggetti hai? E quale metodo è implementato in MixFactor?
chl

1
@cada perché stai eseguendo l'analisi dei fattori? Se si intende stimare la capacità dei partecipanti, l'IRT potrebbe essere un approccio migliore. per quanto riguarda fa contro factanal, fa usa il minimo residuo per impostazione predefinita, mentre factanal utilizza un metodo ML.
richiemorrisroe,

@chl: troppo pochi! Ho appena iniziato il sondaggio e ormai ci sono solo 45 soggetti. Non riesco a raccogliere nuovi dati in questo momento ed è per questo che provo a fare il maggior numero possibile di codice r ...
cada,

1
@cada Un CFA con 45 soggetti sarebbe surrealista :-) Proverò ad aggiungere i miei pensieri più tardi.
chl

Risposte:


12

Per riassumere, con n = 45 soggetti ti rimangono approcci descrittivi basati sulla correlazione e multivariati. Tuttavia, poiché questo questionario dovrebbe essere unidimensionale, questo è sempre un buon inizio.

Cosa farei:

  • Calcola le correlazioni a coppie per i tuoi 22 elementi; riporta l'intervallo e la mediana: ciò fornirà un'indicazione della consistenza relativa delle risposte degli oggetti osservati (le correlazioni superiori a 0,3 sono generalmente considerate indicative di una valida validità convergente, ma ovviamente la precisione di questa stima dipende dalla dimensione del campione) ; un modo alternativo di studiare la coerenza interna del questionario sarebbe quello di calcolare l'alfa di Cronbach , sebbene con n = 45 l'intervallo di confidenza associato (usare bootstrap per quello) sarà relativamente grande.
  • Calcola la correlazione punto-biseriale tra gli elementi e il punteggio della scala sommato; ti darà un'idea del potere discriminatorio di ciascun articolo (come i caricamenti in FA), dove valori superiori a 0,3 sono indicativi di una relazione soddisfacente tra ciascun articolo e la scala corrispondente.
  • Utilizzare un PCA per riassumere la matrice di correlazione (fornisce un'interpretazione equivalente a ciò che si otterrebbe da un'analisi della corrispondenza multipla in caso di voci con dicotomia). Se il tuo strumento si comporta come una scala unidimensionale per il tuo campione, dovresti osservare un asse di variazione dominante (come riflesso dal primo autovalore).

Se vuoi usare R, troverai utili funzioni nel pacchetto ltm e psych ; sfogliare la Task View di CRAN Psychometrics per altri pacchetti. Se ricevi 100 soggetti, puoi provare alcune analisi CFA o SEM con intervallo di confidenza bootstrap. (Tieni presente che i caricamenti dovrebbero essere molto grandi per considerare che esiste una correlazione significativa tra qualsiasi articolo e il suo fattore, poiché dovrebbe essere almeno due volte l'errore standard di un coefficiente di correlazione affidabile, .)2(1-r2)/(n)


Grazie mille! La tua risposta è così dettagliata e davvero molto utile! Grazie!
cada,

3

Questa discussione ha una buona posizione su Google per l'errore "System ist für den Rechner singulär: reziproke Konditionszahl" che utilizza factanal (in inglese: "il sistema è singolarmente computazionalmente: numero di condizione reciproca") - pertanto aggiungerò un commento:

Quando la matrice di correlazione viene calcolata a priori (ad es. Per eliminare saggiamente i valori mancanti), assicurarsi che factanal () non pensi che la matrice sia i dati da analizzare (https://stat.ethz.ch/pipermail/r- help / 2007-ottobre / 142567.html).

PREVIOUS: matrix = cor(data, use="pairwise.complete.obs")  # For example
WRONG: factanal(matrix, 3, rotation="varimax")
RIGHT: factanal(covmat=matrix, factors=3, rotation="varimax")

BurninLeo

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.