J'ai 92 ensembles de données du même type.
Je veux rendre possible une matrice de corrélation pour n'importe quelle combinaison de deux.
c'est à dire je veux une matrice de 92 x92.
tel que l'élément (ci, cj) devrait être une corrélation entre ci et cj.
Comment je fais ça?
r
matrix
visualization
correlation
Swapnil 'Tux' Takle
la source
la source
cor
fonction, ou à larcorr
fonction dans leHmisc
packageRéponses:
Un exemple,
d <- data.frame(x1=rnorm(10), x2=rnorm(10), x3=rnorm(10)) cor(d) # get correlations (returns matrix)
la source
Vous pouvez utiliser le package «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
Plus d'informations ici: http://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html
la source
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 votre 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))
Éditer:
Voici un exemple d'étiquettes de ligne et de colonne personnalisées sur une matrice de corrélation calculée avec une seule 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()
la source
image(x=seq(dim(x)[2]), y=seq(dim(y)[2]), z=COR, col=rev(heat.colors(20)), xlab="x column", ylab="y column")
image
fonction ne prend pas automatiquement les noms de ligne et de colonne, cela doit donc être ajouté.Jetez un œil à qtlcharts . Il vous permet de créer des matrices de corrélation interactives :
library(qtlcharts) data(iris) iris$Species <- NULL iplotCorr(iris, reorder=TRUE)
C'est plus impressionnant lorsque vous corrélez plus de variables, comme dans la vignette du package:
la source
Il existe d'autres moyens d'y parvenir ici: ( Tracez la matrice de corrélation dans un graphique ), mais j'aime bien votre version avec les corrélations dans les cases. Existe-t-il un moyen d'ajouter les noms de variables à la colonne x et y au lieu de simplement ces numéros d'index? Pour moi, cela en ferait une solution parfaite. Merci!
edit: J'essayais de commenter le message de [Marc dans la boîte], mais je ne sais clairement pas ce que je fais. Cependant, j'ai réussi à répondre à cette question pour moi-même.
si d est la matrice (ou le bloc de données d'origine) et que les noms de colonnes sont ce que vous voulez, alors les opérations suivantes:
axis(1, 1:dim(d)[2], colnames(d), las=2) axis(2, 1:dim(d)[2], colnames(d), las=2)
las = 0 retournait les noms à leur position normale, les miens étaient longs, j'ai donc utilisé las = 2 pour les rendre perpendiculaires à l'axe.
edit2: pour supprimer la fonction image () en imprimant les nombres sur la grille (sinon ils chevauchent vos étiquettes de variables), ajoutez 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')
la source