Qu'est-ce qu'une matrice de covariance définie non positive m'indique sur mes données?

21

J'ai un certain nombre d'observations multivariées et je voudrais évaluer la densité de probabilité à travers toutes les variables. On suppose que les données sont normalement distribuées. À un faible nombre de variables, tout fonctionne comme je m'y attendais, mais le passage à un plus grand nombre fait que la matrice de covariance devient définie non positive.

J'ai réduit le problème dans Matlab à:

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.

Si err> 0 alors Sigma n'est pas défini positif.

Puis-je faire quelque chose pour évaluer mes données expérimentales à des dimensions plus élevées? Est-ce que cela me dit quelque chose d'utile sur mes données?

Je suis un peu débutant dans ce domaine, donc je m'excuse si j'ai raté quelque chose d'évident.

ralight
la source
Il semble que vos données soient trop rares pour les représentations de haute dimension. Envisagez-vous d'exécuter des modèles de régression avec ces données?
Jonathan Thiele

Réponses:

30

La matrice de covariance n'est pas définie positive car elle est singulière. Cela signifie qu'au moins une de vos variables peut être exprimée comme une combinaison linéaire des autres. Vous n'avez pas besoin de toutes les variables car la valeur d'au moins une peut être déterminée à partir d'un sous-ensemble des autres. Je suggérerais d'ajouter des variables séquentiellement et de vérifier la matrice de covariance à chaque étape. Si une nouvelle variable crée une singularité, supprimez-la et passez à la suivante. Finalement, vous devriez avoir un sous-ensemble de variables avec une matrice de covariance définie positive.

Michael R. Chernick
la source
19
+1. Il convient également de noter que toutes les matrices de covariance sont définies positives et toutes les matrices définies positives sont la matrice de covariance d'une distribution multivariée. Par conséquent, dire "matrice de covariance définie non positive" est un peu un oxymore. Il semble que l'OP disait vraiment que la matrice de covariance de l' échantillon était singulière, ce qui peut se produire à partir d'une colinéarité exacte (comme vous l'avez dit) ou lorsque le nombre d'observations est inférieur au nombre de variables .
Macro
3
Certains logiciels de statistiques peuvent être amenés à corriger automatiquement ce problème. Par exemple, la regresscommande de Stata supprimera automatiquement les variables supplémentaires lorsque certaines sont colinéaires (et sa sortie peut être enregistrée sous une forme qui identifie ces variables et marque un sous-ensemble non colinéaire pour une utilisation future). Une complication probable, cependant, est que les variables ne sont pas nécessairement colinéaires, mais elles peuvent être suffisamment proches pour que la propagation de l'erreur en virgule flottante dans la décomposition de Cholesky produise des estimations de valeurs propres négatives, ce qui rend les variables colinéaires à toutes fins pratiques.
whuber
1
@whuber, il existe également des fonctionnalités similaires R- les modèles de régression suppriment automatiquement les variables du prédicteur linéaire s'il existe une colinéarité exacte.
Macro
2
@whuber, c'est un peu hacky mais vous pouvez faire une astuce similaire. Si gc'est votre modèle linéaire, alors colnames(model.matrix(g))[-which(is.na(coef(g))==TRUE)][-1]devrait retourner les noms des prédicteurs entrés dans le modèle qui ne sont pas exactement colinéaires. Cela fonctionne en vérifiant quels étaient les coefficients NA(c'est ainsi Rqu'indique qu'une variable a été supprimée) et en trouvant les noms de colonnes correspondants de la matrice du modèle (en supprimant la colonne d'interception). Soit dit en passant, cela ne fonctionnera pas s'il n'y a pas de termes colinéaires, donc une instruction if pour vérifier qu'elle which(is.na(coef(g))==TRUE)n'est pas vide est requise :)
Macro
8
@Macro Toutes les matrices de covariance sont semi-définies positives. Lorsqu'ils sont singuliers, ils ne sont pas définis positifs car x'Ax> 0 pour tous les vecteurs x pour que la matrice A soit définie positive. Dans le cas singulier x'Ax = 0 se produit pour certains x.
Michael R. Chernick
0

C'est un résultat valable. L'estimation de cette composante de la matrice de covariance est nulle, ce qui pourrait très bien être vrai! Cela peut entraîner des difficultés de calcul, mais certains algorithmes en R (je ne connais pas Matlab) peuvent gérer cela. Je ne comprends pas pourquoi les gens se fâchent à ce sujet et insistent pour adapter des modèles plus parcimonieux.

ACE
la source
-1

Un point que je ne pense pas abordé ci-dessus est qu'il est possible de calculer une matrice de covariance définie non positive à partir de données empiriques même si vos variables ne sont pas parfaitement liées linéairement. Si vous ne disposez pas de données suffisantes (en particulier si vous essayez de construire une matrice de covariance à haute dimension à partir d'un tas de comparaisons par paires) ou si vos données ne suivent pas une distribution normale multivariée, alors vous pouvez vous retrouver avec des relations paradoxales parmi les variables, telles que cov (A, B)> 0; cov (A, C)> 0; cov (B, C) <0.

Dans un tel cas, on ne peut pas ajuster un PDF normal multivarié, car il n'y a pas de distribution normale multivariée qui répond à ces critères - cov (A, B)> 0 et cov (A, C)> 0 implique nécessairement que cov (B, C )> 0.

Tout cela pour dire qu'une matrice définie non positive ne signifie pas toujours que vous incluez des variables colinéaires. Cela pourrait également suggérer que vous essayez de modéliser une relation qui est impossible compte tenu de la structure paramétrique que vous avez choisie.

Adam Clark
la source
1
Votre réponse est fausse à tant de niveaux. Quoi qu'il en soit, considérons une matrice de covariance avec 1 sur la diagonale et 1/2 pour cov (1er et 2e composants), 1/2 pour cov (1er et 3e composants) et -1/2 pour cov (2e et 3e composants) . La matrice de covariance a des valeurs propres d'environ 0,15, 1,35, 1,50, fournissant un contre-exemple à l'assertion de votre 2ème paragraphe.
Mark L. Stone
@ MarkL.Stone, vous avez raison au sujet du 2e paragraphe, mais je me demande si certains éléments sont ambigus et pourraient être enregistrés sous une interprétation généreuse. Par exemple, je me demande si, au paragraphe 1, "ne dispose pas de données suffisantes ... essayer de construire une matrice de covariance à haute dimension à partir d'un tas de comparaisons par paires" se réfère à avoir beaucoup de données manquantes et à utiliser les observations complètes par paire pour calculer chaque élément de la matrice de covariance.
gung - Rétablir Monica