Come rendere definita una matrice positiva?


10

Sto cercando di implementare un algoritmo EM per il seguente modello di analisi dei fattori;

Wj=μ+Baj+ejforj=1,,n

dove è un vettore casuale p-dimensionale, è un vettore q-dimensionale di variabili latenti e è una matrice di parametri pxq.WjajB

Come risultato di altre ipotesi utilizzate per il modello, so che dove è la matrice di covarianza varianza dei termini di errore , = diag ( , , ..., ).WjN(μ,BB+D)DejDσ12σ22σp2

Per l'algoritmo EM per il lavoro, che sto facendo iterazioni cupola che coinvolgono la stima di e matrici e durante queste iterazioni Sto calcolando l'inverso di ad ogni iterazione utilizzando nuove stime di e . Sfortunatamente nel corso delle iterazioni, perde la sua definitività positiva (ma non dovrebbe essere perché è una matrice varianza-covarianza) e questa situazione rovina la convergenza dell'algoritmo. Le mie domande sono:BDBB+DBDBB+D

  1. Questa situazione mostra che c'è qualcosa di sbagliato nel mio algoritmo poiché la probabilità dovrebbe aumentare ad ogni passo di EM?

  2. Quali sono i modi pratici per definire una matrice positiva definita?

Modifica: sto calcolando l'inverso usando un lemma di inversione di matrice che afferma che:

(BB+D)1=D1D1B(Iq+BD1B)1BD1

dove il lato destro coinvolge solo le inversioni delle matrici .q×q


1
Potrebbe aiutare a capire meglio come "perde" la sua positività positiva. Ciò implica che o (o entrambi) stanno diventando definiti non positivi. È difficile da fare quando viene calcolato direttamente da e ancora più difficile quando viene calcolato come una matrice diagonale con quadrati sulla sua diagonale! BB+DBBDBBBD
whuber

@whuber Tipicamente in FA , quindi non è mai definito positivo. Ma (teoricamente) dovrebbe essere, supponendo che i siano tutti maggiori di zero. q<pBBBB+Dσj2
JMS

Questo è legato a questa domanda: stats.stackexchange.com/questions/6364/…
Gilead

1
@JMS Grazie. Penso che il mio commento sia ancora pertinente: può essere indefinito, ma non dovrebbe avere ancora autovalori negativi. Tuttavia, sorgeranno problemi quando il più piccolo di è paragonabile all'errore numerico nell'algoritmo di inversione. Se questo è il caso, una soluzione è quella di applicare SVD a e azzerare i piccolissimi (o negativi) autovalori, quindi ricalcolare e aggiungere . BBσi2BBBBD
whuber

1
Devono essere piccoli elementi in ; dovrebbe essere ben condizionato altrimenti poichéDIq+BD1Bq<p
JMS

Risposte:


3

OK, dal momento che stai facendo FA presumo che sia di rango di colonna completo e . Abbiamo bisogno di qualche dettaglio in più però. Questo può essere un problema numerico; potrebbe anche essere un problema con i tuoi dati.Bqq<p

Come stai calcolando l'inverso? È necessario l'inverso in modo esplicito o è possibile riesprimere il calcolo come soluzione per un sistema lineare? (cioè per ottenere risolvere per x, che di solito è più veloce e più stabile)A1bAx=b

Cosa sta succedendo a ? Le stime sono davvero piccole / 0 / negative? In un certo senso è il collegamento critico, perché è ovviamente carente di rango e definisce una matrice di covarianza singolare prima di aggiungere , quindi non è possibile invertirlo. Aggiungendo la matrice diagonale positiva tecnicamente si ottiene il grado massimo, ma potrebbe ancora essere terribilmente mal condizionato se è piccolo.DBBDDBB+DD

Spesso la stima delle varianze idiosincratiche (il tuo , gli elementi diagonali di ) è quasi zero o addirittura negativa; questi sono chiamati casi Heywood. Vedi ad esempio http://www.technion.ac.il/docs/sas/stat/chap26/sect21.htm (anche qualsiasi testo di FA dovrebbe discuterne, è un problema molto vecchio e ben noto). Ciò può derivare da errata specificazione del modello, valori anomali, sfortuna, brillamenti solari ... l'MLE è particolarmente incline a questo problema, quindi se l'algoritmo EM è progettato per far sì che l'MLE sia visibile.σi2D

Se il tuo algoritmo EM si sta avvicinando a una modalità con tali stime, è possibile che perda la sua positività positiva, penso. Esistono varie soluzioni; personalmente preferirei un approccio bayesiano, ma anche allora devi stare attento con i tuoi priori (i priori impropri o anche i priori propri con troppa massa vicino a 0 possono avere lo stesso problema per lo stesso motivo)BB+D


Consentitemi, in secondo luogo, che nella parte principale degli algoritmi non si desideri mai invertire effettivamente una matrice. Tuttavia, potrebbe essere necessario alla fine ottenere le stime standard. Vedi questo post sul blog johndcook.com/blog/2010/01/19/dont-invert-that-matrix
Samsdram

I valori della matrice D diventano sempre più piccoli con l'aumentare del numero di iterazioni. Forse questo è il problema, come hai sottolineato.
Andy Amos,

1
@Andy Amos: ci scommetterei soldi. Come sottolinea @whuber, è quasi impossibile che abbia autovalori negativi se lo stai calcolando direttamente, e gli zeri (essendo carenti di rango) dovrebbero essere curati aggiungendo dalla sua diagonale positiva - a meno che alcuni di quegli elementi sono davvero piccoli. Prova a generare alcuni dati da un modello in cui sono piuttosto grandi e . Maggiore è il numero di dati, meglio è che le stime siano accurate e stabili. Questo ti dirà almeno se c'è un problema nella tua implementazione. D σ 2 iq B 2 i qσ 2 iBBDσi2qBiq2σi2
JMS
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.