Cosa mi dice una matrice di covarianza definita non positiva sui miei dati?


21

Ho un numero di osservazioni multivariate e vorrei valutare la densità di probabilità in tutte le variabili. Si presume che i dati siano normalmente distribuiti. Con un numero basso di variabili tutto funziona come mi aspetterei, ma passare a un numero maggiore comporta che la matrice di covarianza diventi definita non positiva.

Ho ridotto il problema in Matlab a:

load raw_data.mat; % matrix number-of-values x number of variables
Sigma = cov(data);
[R,err] = cholcov(Sigma, 0); % Test for pos-def done in mvnpdf.

Se err> 0, Sigma non è definito positivo.

C'è qualcosa che posso fare per valutare i miei dati sperimentali a dimensioni superiori? Mi dice qualcosa di utile sui miei dati?

Sono un po 'un principiante in questo settore, quindi mi scuso se mi sono perso qualcosa di ovvio.


Sembra che i tuoi dati siano troppo scarsi per le rappresentazioni ad alta dimensione. Stai pensando di eseguire modelli di regressione con questi dati?
Jonathan Thiele,

Risposte:


30

La matrice di covarianza non è definita positiva perché è singolare. Ciò significa che almeno una delle tue variabili può essere espressa come una combinazione lineare delle altre. Non sono necessarie tutte le variabili poiché il valore di almeno uno può essere determinato da un sottoinsieme degli altri. Suggerirei di aggiungere variabili in sequenza e di controllare la matrice di covarianza ad ogni passaggio. Se una nuova variabile crea una singolarità, rilasciala e passa a quella successiva. Alla fine dovresti avere un sottoinsieme di variabili con una matrice di covarianza definita postiva.


19
+1. Vale anche la pena notare che tutte le matrici di covarianza sono definite positive e tutte le matrici definite positive sono la matrice di covarianza di una distribuzione multivariata. Pertanto, dire "matrice di covarianza definita non positiva" è un po 'un ossimoro. Sembra che l'OP stesse davvero dicendo che la matrice di covarianza del campione era singolare, il che può accadere esattamente dalla collinearità (come hai detto) o quando il numero di osservazioni è inferiore al numero di variabili .
Macro

3
Alcuni software di statistica possono essere indotti a correggere automaticamente questo problema. Ad esempio, il regresscomando di Stata eliminerà automaticamente le variabili extra quando alcune sono collineari (e il suo output può essere salvato in una forma che identifica queste variabili e contrassegna un sottoinsieme non collineare per uso futuro). Una probabile complicazione, tuttavia, è che le variabili potrebbero non essere necessariamente collineari, ma potrebbero essere abbastanza vicine che la propagazione dell'errore in virgola mobile nella decomposizione di Cholesky produce stime di autovalori negative, rendendo le variabili collineari per tutti gli scopi pratici.
whuber

1
@whuber, c'è anche una funzionalità simile in R- i modelli di regressione eliminano automaticamente le variabili dal predittore lineare se c'è collinearità esatta.
Macro

2
@whuber, è un po 'confuso ma puoi fare un trucco simile. Se gè il tuo modello lineare, allora colnames(model.matrix(g))[-which(is.na(coef(g))==TRUE)][-1]dovrebbe restituire i nomi dei predittori inseriti nel modello che non sono esattamente collineari. Funziona controllando quali coefficienti erano NA(ecco come Rindica che una variabile è stata rilasciata) e trovando i nomi delle colonne corrispondenti della matrice del modello (eliminando la colonna di intercettazione). A proposito, ciò non funzionerà se non ci sono termini collineari, quindi which(is.na(coef(g))==TRUE)è necessaria un'istruzione if per verificare che non sia vuota :)
Macro

8
@Macro Tutte le matrici di covarianza sono semi-definite positive. Quando sono singolari, non sono definiti positivi perché x'Ax> 0 per tutti i vettori x affinché la matrice A sia definita positiva. Nel caso singolare x'Ax = 0 si verifica per alcuni x.
Michael R. Chernick,

0

È un risultato valido La stima per quel componente della matrice di covarianza è zero, il che potrebbe benissimo essere vero! Può portare a difficoltà di calcolo, ma alcuni algoritmi in R (non conosco Matlab) possono gestirlo. Non capisco perché le persone si arrabbiano per questo e insisto per adattarsi a modelli più parsimoniosi.


-1

Un punto che non credo sia affrontato sopra è che è possibile calcolare una matrice di covarianza definita non positiva da dati empirici anche se le variabili non sono perfettamente linearmente correlate. Se non disponi di dati sufficienti (in particolare se stai provando a costruire una matrice di covarianza ad alta dimensione da una serie di confronti a coppie) o se i tuoi dati non seguono una distribuzione normale multivariata, puoi finire con relazioni paradossali tra le variabili, come cov (A, B)> 0; COV (A, C)> 0; COV (B, C) <0.

In tal caso, non è possibile inserire un normale PDF multivariato, poiché non esiste una distribuzione normale multivariata che soddisfi questi criteri: cov (A, B)> 0 e cov (A, C)> 0 implica necessariamente che cov (B, C )> 0.

Tutto questo per dire che una matrice definita non positiva non significa sempre che si stanno includendo variabili collineari. Potrebbe anche suggerire che stai cercando di modellare una relazione che è impossibile data la struttura parametrica che hai scelto.


1
La tua risposta è sbagliata su così tanti livelli. Comunque, considera una matrice di covarianza con 1 sulla diagonale e 1/2 per cov (1 ° e 2 ° componente), 1/2 per cov (1 ° e 3 ° componente) e -1/2 per cov (2 ° e componente 3d) . La matrice di covarianza ha autovalori di circa 0,15, 1,35, 1,50, fornendo un controesempio all'asserzione nel secondo paragrafo.
Mark L. Stone,

@ MarkL.Stone, hai ragione sul secondo paragrafo, ma mi chiedo se parte di questo sia ambiguo e possa essere salvato con una generosa interpretazione. Ad esempio, mi chiedo se, al paragrafo 1, "non dispongano di dati sufficienti ... cercando di costruire una matrice di covarianza ad alta dimensione da una serie di confronti a coppie" si riferisce al fatto di avere molti dati mancanti e di usare le osservazioni complete a coppie per calcolare ogni elemento nella matrice di covarianza.
gung - Ripristina Monica
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.