J'ai une matrice de corrélation des retours de titres dont le déterminant est zéro. (Cela est un peu surprenant car la matrice de corrélation d'échantillon et la matrice de covariance correspondante devraient théoriquement être définies positives.)
Mon hypothèse est qu'au moins un titre dépend linéairement d'autres titres. Y a-t-il une fonction dans R qui teste séquentiellement chaque colonne une matrice pour la dépendance linéaire?
Par exemple, une approche consisterait à constituer une matrice de corrélation un titre à la fois et à calculer le déterminant à chaque étape. Lorsque le déterminant = 0, arrêtez-vous car vous avez identifié le titre qui est une combinaison linéaire d'autres titres.
Toute autre technique permettant d'identifier la dépendance linéaire dans une telle matrice est appréciée.
la source
Réponses:
Vous semblez poser une question vraiment provocante: comment détecter, étant donné une matrice de corrélation (ou covariance, ou somme des carrés et produits croisés) singulière, quelle colonne dépend linéairement de laquelle. Je suppose que l' opération de balayage pourrait aider. Voici ma sonde en SPSS (pas R) pour illustrer.
Générons quelques données:
Créons une dépendance linéaire entre V2, V4 et V5:
Nous avons donc modifié notre colonne V4.
Les impressions de M en 5 itérations:
Remarquez que finalement la colonne 5 est pleine de zéros. Cela signifie (si je comprends bien) que V5 est lié linéairement avec certaines des colonnes précédentes . Quelles colonnes? Regardez l'itération où la colonne 5 n'est pas remplie de zéros en dernier - itération 4. Nous voyons là que V5 est lié avec V2 et V4 avec des coefficients -.3333 et .8333: V5 = -.3333 * V2 + .8333 * V4, ce qui correspond à ce que nous avons fait avec les données: V4 = .4 * V2 + 1.2 * V5.
C'est ainsi que nous avons su quelle colonne est liée linéairement avec quelle autre. Je n'ai pas vérifié l'utilité de l'approche ci-dessus dans un cas plus général avec de nombreux groupes d'interdépendances dans les données. Dans l'exemple ci-dessus, cela semble cependant utile.
la source
Voici une approche simple: calculer le rang de la matrice qui résulte de la suppression de chacune des colonnes. Les colonnes qui, lorsqu'elles sont supprimées, donnent le rang le plus élevé sont celles qui dépendent linéairement (puisque la suppression de celles-ci ne diminue pas le rang, tandis que la suppression d'une colonne linéairement indépendante le fait).
Dans R:
la source
system is exactly singular: U[5,5] = 0
, ce que je sais maintenant signifie que la colonne 5 était le problème (semble évident avec le recul car c'est une colonne de zéros!)your.matrix = matrix(1:4, 2)
?La question porte sur «l'identification des relations [linéaires] sous-jacentes» entre les variables.
Le moyen rapide et facile de détecter des relations consiste à régresser toute autre variable (utiliser une constante, même) par rapport à ces variables à l'aide de votre logiciel préféré: toute bonne procédure de régression détectera et diagnostiquera la colinéarité. (Vous n'aurez même pas la peine de regarder les résultats de la régression: nous comptons simplement sur un effet secondaire utile de la configuration et de l'analyse de la matrice de régression.)
(Il y a un art et beaucoup de littérature associé à l'identification de ce qu'est un "petit" chargement. Pour modéliser une variable dépendante, je suggère de l'inclure dans les variables indépendantes de l'ACP afin d'identifier les composants - indépendamment de leur taille - dans laquelle la variable dépendante joue un rôle important. De ce point de vue, "petit" signifie beaucoup plus petit que n'importe quel composant de ce type.)
Regardons quelques exemples. (Celles-ci sont utilisées
R
pour les calculs et le traçage.) Commencez par une fonction pour effectuer l'ACP, recherchez les petits composants, tracez-les et retournez les relations linéaires entre eux.sweep
La sortie associée au panneau supérieur gauche était
La sortie du panneau central supérieur était
En pratique, il n’est souvent pas vrai qu’une variable soit désignée comme une combinaison évidente des autres: tous les coefficients peuvent être de tailles comparables et de signes variables. De plus, lorsqu'il existe plusieurs dimensions de relations, il n'y a pas de moyen unique de les spécifier: une analyse plus approfondie (comme la réduction des lignes) est nécessaire pour identifier une base utile pour ces relations. C'est ainsi que le monde fonctionne: tout ce que vous pouvez dire, c'est que ces combinaisons particulières qui sont produites par PCA ne correspondent à presque aucune variation dans les données. Pour y faire face, certaines personnes utilisent directement les plus grandes composantes («principales») comme variables indépendantes dans la régression ou l'analyse subséquente, quelle que soit la forme qu'elle pourrait prendre. Si vous faites cela, n'oubliez pas d'abord de supprimer la variable dépendante de l'ensemble de variables et de refaire le PCA!
Voici le code pour reproduire cette figure:
(J'ai dû jouer avec le seuil dans les cas de grandes erreurs afin d'afficher un seul composant: c'est la raison pour laquelle je fournis cette valeur comme paramètre
process
.)L'utilisateur ttnphns a aimablement dirigé notre attention sur un sujet étroitement lié. Une de ses réponses (par JM) suggère l'approche décrite ici.
la source
"loadings," which are linear combinations of the original variables
princomp
la source
J'ai rencontré ce problème il y a environ deux semaines et j'ai décidé que je devais le réexaminer car, lorsqu'il s'agit d'ensembles de données massifs, il est impossible de faire ces choses manuellement.
J'ai créé une boucle for () qui calcule le rang de la matrice une colonne à la fois. Ainsi, pour la première itération, le classement sera 1. Le second, 2. Cela se produit jusqu'à ce que le classement devienne MOINS que le numéro de colonne que vous utilisez.
Très simple:
pour () rupture de boucle
Je suis sûr que vous pouvez ajouter une instruction if, je n'en ai pas encore besoin car je ne traite que de 50 colonnes.
J'espère que cela t'aides!
la source
Rang, r d'une matrice = nombre de colonnes (ou lignes) linéairement indépendantes d'une matrice. Pour une matrice n par n A , le rang (A) = n => toutes les colonnes (ou lignes) sont linéairement indépendantes.
la source
Non pas que la réponse donnée par @Whuber doive vraiment être développée, mais j'ai pensé fournir une brève description des mathématiques.
Citations
Montgomery, D. (2012). Introduction à l'analyse de régression linéaire, 5e édition. John Wiley & Sons Inc.
la source