Comment créer une matrice de corrélation dans R?

j'ai 92 ensembles de données du même type.

je veux faire une matrice de corrélation pour n'importe quelle combinaison possible.

c'est-à-dire que je veux une matrice de 92 x92.

tel que cet élément (ci,cj) devrait être la corrélation entre ci et CJ.

comment je fais ça?

77
demandé sur James K 2012-05-21 10:53:09

5 réponses

un exemple,

 d &lt- data.frame(x1=rnorm(10),
                 x2=rnorm(10),
                 x3=rnorm(10))
cor(d) # get correlations (returns matrix)
91
répondu Manuel Ramón 2015-01-09 04:28:23

vous pouvez utiliser le paquet 'corrplot'.

d <- data.frame(x1=rnorm(10),
                 x2=rnorm(10),
                 x3=rnorm(10))
M <- cor(d) # get correlations

library('corrplot') #package corrplot
corrplot(M, method = "circle") #plot matrix

enter image description here

plus d'informations ici: http://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html

68
répondu Jot eN 2014-07-31 18:48:56

la fonction cor utilisera les colonnes de la matrice dans le calcul de la corrélation. Ainsi, le nombre de lignes doit être le même entre votre matrice x et la matrice y . Ex.:

set.seed(1)
x <- matrix(rnorm(20), nrow=5, ncol=4)
y <- matrix(rnorm(15), nrow=5, ncol=3)
COR <- cor(x,y)
COR
image(x=seq(dim(x)[2]), y=seq(dim(y)[2]), z=COR, xlab="x column", ylab="y column")
text(expand.grid(x=seq(dim(x)[2]), y=seq(dim(y)[2])), labels=round(c(COR),2))

enter image description here

Edit:

voici un exemple d'étiquettes de ligne et de colonne personnalisées sur une matrice de corrélation calculée avec un seul matrice:

png("corplot.png", width=5, height=5, units="in", res=200)
op <- par(mar=c(6,6,1,1), ps=10)
COR <- cor(iris[,1:4])
image(x=seq(nrow(COR)), y=seq(ncol(COR)), z=cor(iris[,1:4]), axes=F, xlab="", ylab="")
text(expand.grid(x=seq(dim(COR)[1]), y=seq(dim(COR)[2])), labels=round(c(COR),2))
box()
axis(1, at=seq(nrow(COR)), labels = rownames(COR), las=2)
axis(2, at=seq(ncol(COR)), labels = colnames(COR), las=1)
par(op)
dev.off()

enter image description here

15
répondu Marc in the box 2017-04-11 16:34:47

regarder qtlcharts . Il vous permet de créer interactive matrices de corrélation:

library(qtlcharts)
data(iris)
iris$Species <- NULL
iplotCorr(iris, reorder=TRUE)

enter image description here

c'est plus impressionnant quand vous corrélez plus de variables, comme dans la vignette du paquet: enter image description here

13
répondu epo3 2016-05-22 20:52:47

il y a d'autres moyens d'y parvenir ici: ( tracer matrice de corrélation dans un graphique ), mais j'aime votre version avec les corrélations dans les boîtes. Y a-t-il un moyen d'ajouter les noms des variables aux colonnes x et y au lieu des seuls numéros d'index? Pour moi, ce serait une solution parfaite. Merci!

edit: j'ai essayé de commenter le post de [Marc dans la boîte], mais je ne sais pas ce que je fais. Toutefois, j'ai réussi à répondez à cette question par moi-même.

si d est la matrice (ou la base de données originale) et les noms de colonne sont ce que vous voulez, puis les travaux suivants:

axis(1, 1:dim(d)[2], colnames(d), las=2)
axis(2, 1:dim(d)[2], colnames(d), las=2)

las=0 retournerait les noms à leur position normale, les miens étaient longs, donc j'ai utilisé las=2 pour les rendre perpendiculaires à l'axe.

edit2: pour supprimer la fonction image () en imprimant des nombres sur la grille (sinon ils chevauchent vos étiquettes variables), ajouter xaxt= "n", par exemple:

image(x=seq(dim(x)[2]), y=seq(dim(y)[2]), z=COR, col=rev(heat.colors(20)), xlab="x column", ylab="y column", xaxt='n')
1
répondu TSeymour 2017-05-23 12:10:11