Comment afficher une matrice de corrélations avec des entrées manquantes?

10

Je voudrais obtenir une représentation graphique des corrélations dans les articles que j'ai rassemblés jusqu'à présent pour explorer facilement les relations entre les variables. J'avais l'habitude de dessiner un graphique (désordonné) mais j'ai trop de données maintenant.

En gros, j'ai une table avec:

  • [0]: nom de la variable 1
  • [1]: nom de la variable 2
  • [2]: valeur de corrélation

La matrice "globale" est incomplète (par exemple, j'ai la corrélation de V1 * V2, V2 * V3, mais pas V1 * V3).

Existe-t-il un moyen de représenter graphiquement cela?

Coronier
la source

Réponses:

12

En me basant sur la réponse de @ GaBorgulya, je suggérerais d'essayer la fluctuation ou l'intrigue de niveau (également appelée affichage de la carte thermique).

Par exemple, en utilisant ggplot2 :

library(ggplot2, quietly=TRUE)
k <- 100
rvals <- sample(seq(-1,1,by=.001), k, replace=TRUE)
rvals[sample(1:k, 10)] <- NA
cc <- matrix(rvals, nr=10)
ggfluctuation(as.table(cc)) + opts(legend.position="none") + 
  labs(x="", y="")

(Ici, les entrées manquantes sont affichées en gris uni, mais le jeu de couleurs par défaut peut être modifié, et vous pouvez également mettre "NA" dans la légende.)

entrez la description de l'image ici

ou

ggfluctuation(as.table(cc), type="color") + labs(x="", y="") +
  scale_fill_gradient(low = "red",  high = "blue")

(Ici, les valeurs manquantes ne sont tout simplement pas affichées. Cependant, vous pouvez ajouter un geom_text()et afficher quelque chose comme "NA" dans la cellule vide.)

entrez la description de l'image ici

chl
la source
2
+1 pour ggfluctuation, je n'avais jamais vu ça avant! Cet article contient un autre code utile pour visualiser ce type de dateur: stackoverflow.com/questions/5453336/…
Chase
@Chase (+1) Thx. BTW, il semble que j'ai eu un problème avec mon schéma de couleurs pour les valeurs de corrélation négatives.
chl
Réorganiser les lignes et les colonnes par ( hclust(…)$order) [ stat.ethz.ch/R-manual/R-devel/library/stats/html/hclust.html] la visualisation sera souvent plus facile à visualiser.
GaBorgulya
@GaBorgulya Bon point. Je l'utilise lorsque je fais une analyse exploratoire des données et que les variables n'ont pas d'ordre particulier (comme ce serait le cas pour les données spatiales ou temporelles, ou les données structurées que vous souhaitez voir telles quelles). La mixOmics::cimfonction est très bonne pour ça. Un problème connexe a été discuté ici, stats.stackexchange.com/questions/8370/… .
chl
5

Vos données peuvent être comme

  name1 name2 correlation
1    V1    V2         0.2
2    V2    V3         0.4

Vous pouvez réorganiser votre longue table en une table large avec le code R suivant

d = structure(list(name1 = c("V1", "V2"), name2 = c("V2", "V3"), 
    correlation = c(0.2, 0.4)), .Names = c("name1", "name2", 
    "correlation"), row.names = 1:2, class = "data.frame")
k = d[, c(2, 1, 3)]
names(k) = names(d)
e = rbind(d, k)
x = with(e, reshape(e[order(name2),], v.names="correlation", 
  idvar="name1", timevar="name2", direction="wide"))
x[order(x$name1),]

Vous obtenez

  name1 correlation.V1 correlation.V2 correlation.V3
1    V1             NA            0.2             NA
3    V2            0.2             NA            0.4
4    V3             NA            0.4             NA

Vous pouvez maintenant utiliser des techniques pour visualiser les matrices de corrélation (au moins celles qui peuvent faire face aux valeurs manquantes).

GaBorgulya
la source
2
le reshapepackage peut également être utile. Une fois que vous avez e, pensez à quelque chose commelibrary(reshape) cast(melt(e), name1 ~ name2)
Chase
3

Le corrplotpackage est une fonction utile pour visualiser les matrices de corrélation. Il accepte une matrice de corrélation comme objet d'entrée et dispose de plusieurs options pour afficher la matrice elle-même. Une fonctionnalité intéressante est qu'il peut réorganiser vos variables en utilisant un clustering hiérarchique ou des méthodes PCA.

Voir la réponse acceptée dans ce fil pour un exemple de visualisation.

Iris Tsui
la source