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.
Réponses:
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.
la source
regress
commande 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.R
- les modèles de régression suppriment automatiquement les variables du prédicteur linéaire s'il existe une colinéarité exacte.g
c'est votre modèle linéaire, alorscolnames(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 coefficientsNA
(c'est ainsiR
qu'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'ellewhich(is.na(coef(g))==TRUE)
n'est pas vide est requise :)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.
la source
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.
la source