Come eseguire l'analisi fattoriale quando la matrice di covarianza non è definita positiva?


11

Ho un set di dati composto da 717 osservazioni (righe) che sono descritte da 33 variabili (colonne). I dati sono standardizzati assegnando un punteggio z a tutte le variabili. Non esistono due variabili che dipendono linearmente ( ). Ho anche rimosso tutte le variabili con varianza molto bassa (inferiore a 0,1 ). La figura seguente mostra la matrice di correlazione corrispondente (in valori assoluti).r=10.1

Quando sto cercando di eseguire l'analisi dei fattori usando factoranin Matlab come segue:

[Loadings1,specVar1,T,stats] = factoran(Z2,1);

Ricevo il seguente errore:

The data X must have a covariance matrix that is positive definite.

Potresti dirmi dov'è il problema? È dovuto alla bassa dipendenza reciproca tra le variabili utilizzate? Inoltre, cosa posso fare al riguardo?


La mia matrice di correlazione:

inserisci qui la descrizione dell'immagine


3
Penso che sia qui il contrario della bassa dipendenza reciproca . Probabilmente hai alcune variabili che sono linearmente dipendenti tra loro e questo fa sì che la tua matrice di covarianza sia semi-definita (cioè abbia alcuni autovalori zero).
— usεr11852,

3
Alle persone che votano per chiudere la domanda: Perché una domanda sull'affidabilità positiva della matrice di covarianza del campione sarebbe fuori tema qui? L'utente è preoccupato per il motivo per cui un'applicazione standard di Factor Analysis non funziona. Chiedi maggiori informazioni se vuoi!
— usεr11852

2
Potete per favore calcolare e presentare gli autovalori della matrice di covarianza del campione? (es. eig(cov(Z2))). Sospetto fortemente che alcuni di essi siano molto piccoli.
— usεr11852

3
Sono d'accordo con @ usεr11852: sembra che questa domanda sia stata erroneamente chiusa come fuori tema (ho votato per chiuderla da sola). Sembrava una domanda di programmazione, ma in realtà è una domanda perfettamente in argomento e ragionevole. L'ho modificato e ho votato per riaprire. Peccato che l'OP sembra essere scomparso però.
— ameba dice Reinstate Monica il

3
Direi che potrebbe esserci un contenuto statistico a questa domanda che la comunità Matlab non sarà in grado di aiutare. Come calcoli la tua Z2matrice? Se mancano dei valori nei dati, l'eliminazione a coppie può indurre la matrice a diventare non invertibile quando le diverse correlazioni in quella matrice vengono calcolate utilizzando diversi sottocampioni dei dati.
— StasK,

Risposte:


1

C

C=QDQ−1,
QC
D=(λ10⋯⋯⋯⋯00λ2⋱⋮⋮⋱⋱⋱⋮⋮⋱λn⋱⋮⋮⋱0⋱⋮⋮⋱⋱00⋯⋯⋯⋯00)
Q0nC

0

λn+1,λn+2,...=10−15.
C~=QD~Q−1,
D~=(λ10⋯⋯⋯⋯00λ2⋱⋮⋮⋱⋱⋱⋮⋮⋱λn⋱⋮⋮⋱10−15⋱⋮⋮⋱⋱00⋯⋯⋯⋯010−15)

Q,D

[Q,D] = eig(C)

C~

CC~


0

È possibile che tu stia affrontando problemi numerici con la tua matrice. Probabilmente è in realtà definito positivo, ma il calcolo numerico dice il contrario.

Una soluzione molto comune, in quel caso, è aggiungere un valore molto basso (1.E-10 per esempio) a tutti gli elementi diagonali. Se ciò non risolve il problema, provare ad aumentare progressivamente questo valore.


Le voci diagonali sembrano già abbastanza dominanti. Pensi che questo sarebbe d'aiuto?
— Jonas,

Sono preoccupato per l'ottava e la decima voce, se alcune sono linearmente dipendenti, devono essere queste due. Non so abbastanza dell'effettivo calcolo di decomposizione degli automi, ma penso che questa soluzione potrebbe funzionare: l'aggiunta di 1e-10 alla diagonale non fa molto sulla dipendenza lineare, ma potrebbe semplicemente aggiungere tutto ciò che è numericamente necessario in modo che il il calcolo dei valori degli automi è fisso (cioè nessun valore degli automi 0). Tuttavia, se la mia soluzione non funziona, trovo la tua abbastanza elegante.
— Romain Reboulleau,

-2

FA funziona meglio quando i tuoi dati sono gaussiani, quindi potresti voler provare alcuni approcci di pre-elaborazione per avere dati più gaussiani.


Sono sconcertato da questa risposta. Che senso ha fare una FA di dati non correlati?
— ttnphns,

@ttnphns Penso che tu abbia ragione! Non ha senso applicare la FA su dati decorrelati! Il mio suggerimento proviene da un tipo specifico di FA, in cui il PCA si è applicato in una pre-elaborazione della creazione di rappresentazioni vettoriali dai dati, in cui verrà applicato il FA. I dati originali vengono solitamente proiettati da PCA prima di essere trasformati nella rappresentazione vettoriale. E la FA viene applicata sulla rappresentazione vettoriale e non sui dati proiettati PCA. Colpa mia! Aggiornerò la mia risposta. Sebbene in alcuni casi un PCA probabilistico potrebbe funzionare altrettanto bene di FA se il modello FA non riuscisse a convergere. Non sei d'accordo?
— PickleRick,
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.