Les coefficients de corrélation et les valeurs de p pour toutes les paires de lignes d'une matrice
J'ai une matrice data
avec m lignes et n colonnes. J'ai utilisé pour calculer les coefficients de corrélation entre toutes les paires de lignes à l'aide de np.corrcoef
:
import numpy as np
data = np.array([[0, 1, -1], [0, -1, 1]])
np.corrcoef(data)
Maintenant, je voudrais aussi avoir un regard sur les p-valeurs de ces coefficients. np.corrcoef
ne fournit pas ces; scipy.les stats.pearsonr
. Cependant, scipy.stats.pearsonr
ne pas accepter une matrice sur entrée.
Est-il un moyen rapide comment calculer le coefficient et la p-valeur pour toutes les paires de lignes (en arrivant par exemple à deux m par m matrices, l'une avec des coefficients de corrélation, l'autre correspondant aux valeurs de p) sans avoir à sélectionner manuellement toutes les paires?
OriginalL'auteur John Manak | 2014-06-26
Vous devez vous connecter pour publier un commentaire.
J'ai rencontré le même problème aujourd'hui.
Après une demi-heure de recherche sur google, je ne trouve pas de code dans numpy/scipy bibliothèque peut m'aider à le faire.
J'ai donc écrit ma propre version de corrcoef
La première version utiliser le résultat de la np.corrcoef, puis de calculer la valeur de p basée sur le triangle-haut les valeurs de corrcoef de la matrice.
La deuxième boucle de la version juste une itération sur les lignes, ne pearsonr manuellement.
Le test réussi, ils sont les mêmes.
La performance sur mon Macbook contre 100x2500 matrice
OriginalL'auteur jingchao
Les plus consice façon de faire pourrait être le bâtiment de la méthode
.corr
danspandas
, pour obtenir r:Pour obtenir les valeurs de p en utilisant le test t:
Aussi vous pouvez simplement utiliser le
scipy.stats.pearsonr
vous avez mentionné à l'OP:OriginalL'auteur CT Zhu
Sorte de hackish et probablement inefficace, mais je pense que cela pourrait être ce que vous cherchez:
Scipy est pdist est une fonction très utile, qui est principalement destinée pour trouver Les distances entre les observations en n dimensions de l'espace.
Mais il permet à l'utilisateur défini appelables à distance de mesure, qui peuvent être exploitées pour réaliser tout type de paire opération. Le résultat est renvoyé dans un condensé de distance de la matrice de la forme, qui peut être facilement modifié pour la matrice carrée formulaire à l'aide de Scipy " squareform fonction.
metric='correlation'
qui est égal à (1 - coefficient de corrélation), et est codé en C (donc devrait être beaucoup plus efficace).Il est à la recherche pour les p-valeurs. Vous n'obtiendrez pas les valeurs de p si vous utilisez la fonction intégrée de corrélation statistique.
Vous pouvez dériver de p-valeurs des coefficients de corrélation assez facilement (voir jingchao la réponse de ici)
(aussi CT Zhu réponse)
Cette approche satisfait mes besoins, et, il semble simple pour moi. Veuillez suivre toutes les réponse qui vous convient le plus.
OriginalL'auteur Ketan
Si vous n'avez pas à utiliser coefficient de corrélation de pearson, vous pouvez utiliser le corrélation de spearman, car il renvoie à la fois la matrice de corrélation et les valeurs de p (notez que le premier exige que vos données sont normalement distribuées, alors que la corrélation de spearman est un non-paramétrique de mesure, donc pas en supposant que la distribution normale de vos données). Un exemple de code:
OriginalL'auteur Sahar