Corrélation entre matrices dans R

9

J'ai des problèmes pour utiliser les fonctions cor()et cor.test().

J'ai juste deux matrices (seulement des valeurs numériques, et le même nombre de lignes et de colonnes) et je veux avoir le numéro de corrélation et la valeur p correspondante.

Lorsque j'utilise, cor(matrix1, matrix2)j'obtiens les coefficients de corrélation pour toutes les cellules. Je veux juste un seul numéro à la suite de cor.

De plus, lorsque je fais, cor.test(matrix1, matrix2)j'obtiens l'erreur suivante

Error in cor.test.default(matrix1, matrix2) : 'x' must be a numeric vector

Comment obtenir des valeurs de p pour les matrices?

Vous trouverez les tableaux simples que je veux corréler ici:

http://dl.dropbox.com/u/3288659/table_exp1_offline_MEANS.csv

http://dl.dropbox.com/u/3288659/table_exp2_offline_MEANS.csv

L_T
la source
4
On ne sait pas trop ce que vous voulez. Quand vous dites que vous voulez juste un résultat pour cor (matrice1, matrice2), essayez-vous de corréler (tous les nombres dans matrice1) avec (tous les nombres dans matrice2)? Dans ce cas, vous pouvez essayer cor (as.vector (matrix1), as.vector (matrix2))
Marius
Quelle est la valeur de p attendue, précisément? (c.-à-d., quelle hypothèse testez-vous?)
chl
Non, je veux juste corréler les deux matrices afin de savoir à quel point elles sont similaires. Je ne veux pas de comparaison cellule par cellule. Je veux juste comme résultat un seul numéro de 0 à 1, comme chaque corrélation de Pearson utilise deux vecteurs en entrée. Toute suggestion? La valeur de p que j'attends doit me dire la signification de la corrélation.
L_T
1
Voulez-vous dire comme dans cor(as.vector(matrix1), as.vector(matrix2))?
whuber

Réponses:

12

Si vous souhaitez simplement calculer la corrélation entre les deux ensembles de valeurs, en ignorant la structure matricielle, vous pouvez convertir les matrices en vecteurs à l'aide de c(). Ensuite, votre corrélation est calculée par cor(c(matrix1), c(matrix2)).

Martin O'Leary
la source
En utilisant votre fonction, j'obtiens cette erreur: "Erreur dans cor (c (matrice1), c (matrice2)): 'x' doit être numérique". Mais si vous jetez un coup d'œil à mes tableaux, vous remarquez qu'ils ne contiennent que des chiffres ... Je ne comprends pas
L_T
3
Un R émet celui-ci:, read.csvque vous avez probablement utilisé, renvoie un data.framequi n'est pas un matrix. Vous devez donc le convertir en un matrixavec as.matrixavant d'en faire un long vecteur avec c()et de donner les résultats cor. Le voici en une seule ligne:cor(c(as.matrix(matrix1)), c(as.matrix(matrix2)))
conjugateprior
5

Vous n'avez rien dit sur ce que sont réellement vos données. Néanmoins...

Supposons que vos matrices comportent des colonnes représentant deux ensembles de variables (différentes) et (le même nombre de) lignes représentant les observations.

Analyse de corrélation canonique

Dans cette situation, une analyse de corrélation potentiellement plus intéressante et structurée consiste à trouver les corrélations canoniques . Cela suppose que vous souhaitez résumer la relation entre les deux ensembles de variables en termes de corrélation (s) entre les combinaisons linéaires de matrix1colonnes et les combinaisons linéaires dematrix2Colonnes. Et vous voudriez le faire si vous soupçonniez qu'il y avait un espace de petite dimensionnalité, peut-être même 1, qui révélerait une structure de corrélation sous-jacente à travers les cas qui est obscurcie par leur réalisation dans les systèmes de coordonnées définis par variables actuels. Par conséquent, la valeur de cette corrélation (canonique) résumerait, en un sens, une relation linéaire multivariée entre les deux matrices. En effet, bien que le CCA fonctionne pour les matrices avec différents nombres de variables, il se réduit à la corrélation de Pearson lorsque chaque «matrice» n'est qu'une seule colonne.

la mise en oeuvre

L'analyse de corrélation canonique est décrite dans la plupart des textes d'analyse multivariée, ce qui est peut-être plus utile si vous êtes satisfait de l'algèbre matricielle jusqu'à l'analyse propre. Il est implémenté comme cancordans la base R et également dans le package CCA qui est décrit ici .

conjugateprior
la source
Salut merci. Mes données sont de simples matrices contenant les mêmes variables. La structure des deux matrices est identique. Les valeurs dans chaque cellule sont les résultats d'une expérience où ces variables ont été évaluées sur une échelle de Likert à 9 points et moyennées entre les participants. Quelle est la meilleure stratégie pour y trouver une corrélation entre les deux matrices? Pouvez-vous faire un exemple en R?
L_T
1
Avec la base R, c'est juste cancor(matrix1, matrix2).
conjugateprior
Mais vous pouvez peut-être clarifier un peu. Appel . Alors qu'est-ce que ? Est-ce la réponse de la ème personne au ème élément de Likert? Sûrement pas. Alors, où se situe la moyenne des participants? matrix1 A i j i jAAijij
conjugateprior
Salut, il y avait 10 participants, ils devaient exprimer le "degré de cohérence" entre les stimuli de paires (notez qu'il ne s'agit pas d'une expérience de notation de dissimilarité). J'ai fait 2 expériences. et je veux comparer les résultats dans les 2 conditions expérimentales. Chaque cellule est la moyenne des évaluations des 10 participants pour chaque paire de stimuli. Dois-je quand même utiliser cancor?
L_T
J'ai utilisé cancor, mais je n'ai pas de valeur de coefficient unique exprimant la corrélation ni de valeur p exprimant sa signification. Aidez-moi!
L_T
3

Si vous interprétez vaguement la corrélation comme signifiant similitude, vous pouvez utiliser une définition basée sur le produit interne, telle que:

cAB=A,BA||B où etA,Btr(ABT)x||x,x1/2

Avec vos données, cela donne 0,996672.

L'alternative, si la structure matricielle n'est pas importante, consiste simplement à aplatir les matrices en vecteurs et à utiliser la mesure de corrélation de votre choix. Comme je ne connais pas la distribution de vos données, j'ai utilisé le produit scalaire pour obtenir 0,976.

De toute façon, il semble que vos données soient fortement corrélées.

Emre
la source
Cela semble être le coefficient rv , ce que le PO a demandé: une valeur entre 0 et 1 qui indique à quel point les deux matrices sont similaires.
llrs