Pregunta ¿Cómo puedo crear una matriz de correlación en R?


Tengo 92 juegos de datos del mismo tipo.

Quiero hacer una matriz de correlación para cualquier combinación posible.

es decir, quiero una matriz de 92 x92.

tal que el elemento (ci, cj) debe ser una correlación entre ci y cj.

¿Cómo puedo hacer eso?


74
2018-05-21 06:53


origen


Respuestas:


Un ejemplo,

 d &lt- data.frame(x1=rnorm(10),
                 x2=rnorm(10),
                 x3=rnorm(10))
cor(d) # get correlations (returns matrix)

90
2018-05-21 07:39



Podría 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

enter image description here

Más información aquí: http://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html


66
2017-07-31 18:48



los cor función usará las columnas de la matriz en el cálculo de la correlación. Por lo tanto, el número de filas debe ser el mismo entre su matriz X y 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))

enter image description here

Editar:

Aquí hay un ejemplo de etiquetas de fila y columna personalizadas en una matriz de correlación calculada con una matriz única:

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
2018-05-21 07:33



Mira esto qtlcharts. Te permite crear interactivo matrices de correlación:

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

enter image description here

Es más impresionante cuando correlaciona más variables, como en la viñeta del paquete: enter image description here


13
2018-05-22 20:38



Hay otras formas de lograr esto aquí:Trazar la matriz de correlación en un gráfico), pero me gusta tu versión con las correlaciones en los recuadros. ¿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 esto una solución perfecta. ¡Gracias!

editar: Estaba tratando de comentar sobre la publicación de [Marc en la caja], 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 usted quiere, 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 () imprimiendo números en la grilla (de lo contrario, se superponen las etiquetas de las variables), agregue xaxt = 'n', p. ej .:

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
2018-02-12 20:07