Tengo 92 conjuntos de datos del mismo tipo.
Quiero hacer una matriz de correlación para dos combinaciones posibles.
es decir, quiero una matriz de 92 x92.
tal que el elemento (ci, cj) debería ser una correlación entre ci y cj.
¿Cómo puedo hacer eso?
r
matrix
visualization
correlation
Swapnil 'Tux' Takle
fuente
fuente
cor
función, o larcorr
función en elHmisc
paqueteRespuestas:
Un ejemplo,
d <- data.frame(x1=rnorm(10), x2=rnorm(10), x3=rnorm(10)) cor(d) # get correlations (returns matrix)
fuente
Puede usar el paquete '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
Más información aquí: http://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html
fuente
La función cor utilizará las columnas de la matriz en el cálculo de la correlación. Entonces, el número de filas debe ser el mismo entre su matriz x y su matriz 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))
Editar:
A continuación, se muestra un ejemplo de etiquetas personalizadas de filas y columnas en una matriz de correlación calculada con una sola matriz:
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()
fuente
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
función no toma automáticamente los nombres de filas y columnas, por lo que debe agregarse.Eche un vistazo a qtlcharts . Le permite crear matrices de correlación interactivas :
library(qtlcharts) data(iris) iris$Species <- NULL iplotCorr(iris, reorder=TRUE)
Es más impresionante cuando correlaciona más variables, como en la viñeta del paquete:
fuente
Hay otras formas de lograr esto aquí: ( Trace la matriz de correlación en un gráfico ), pero me gusta su versión con las correlaciones en los cuadros. ¿Hay alguna forma de agregar los nombres de las variables a la columna xey en lugar de solo esos números de índice? Para mí, eso haría de esta una solución perfecta. ¡Gracias!
editar: Estaba tratando de comentar la publicación de [Marc en el cuadro], pero claramente no sé lo que estoy haciendo. Sin embargo, logré responder esta pregunta por mí mismo.
si d es la matriz (o el marco de datos original) y los nombres de las columnas son los que desea, entonces funciona lo siguiente:
axis(1, 1:dim(d)[2], colnames(d), las=2) axis(2, 1:dim(d)[2], colnames(d), las=2)
las = 0 voltearía los nombres a su posición normal, los míos eran largos, así que usé las = 2 para hacerlos perpendiculares al eje.
edit2: para suprimir la función image () que imprime números en la cuadrícula (de lo contrario, se superponen con las etiquetas de las variables), agregue xaxt = 'n', por ejemplo:
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')
fuente