Tenho 92 conjuntos de dados do mesmo tipo.
Quero fazer uma matriz de correlação para quaisquer duas combinações possíveis.
ou seja, eu quero uma matriz de 92 x92.
tal que o elemento (ci, cj) deve ser a correlação entre ci e cj.
Como faço isso?
r
matrix
visualization
correlation
Swapnil 'Tux' Takle
fonte
fonte
cor
função, ou arcorr
função noHmisc
pacoteRespostas:
Um exemplo,
d <- data.frame(x1=rnorm(10), x2=rnorm(10), x3=rnorm(10)) cor(d) # get correlations (returns matrix)
fonte
Você pode usar o pacote '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
Mais informações aqui: http://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html
fonte
A função cor usará as colunas da matriz no cálculo da correlação. Portanto, o número de linhas deve ser o mesmo entre sua matriz xe 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:
Aqui está um exemplo de rótulos de linha e coluna personalizados em uma matriz de correlação calculada com uma única 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()
fonte
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
função não pega automaticamente os nomes das linhas e colunas, então eles devem ser adicionados.Dê uma olhada em qtlcharts . Ele permite que você crie matrizes de correlação interativas :
library(qtlcharts) data(iris) iris$Species <- NULL iplotCorr(iris, reorder=TRUE)
É mais impressionante quando você correlaciona mais variáveis, como na vinheta do pacote:
fonte
Existem outras maneiras de conseguir isso aqui: ( Plotar a matriz de correlação em um gráfico ), mas eu gosto da sua versão com as correlações nas caixas. Existe uma maneira de adicionar os nomes das variáveis às colunas xey em vez de apenas esses números de índice? Para mim, isso seria uma solução perfeita. Obrigado!
editar: Eu estava tentando comentar a postagem de [Marc na caixa], mas claramente não sei o que estou fazendo. No entanto, consegui responder a essa pergunta por mim mesmo.
se d for a matriz (ou o quadro de dados original) e os nomes das colunas forem o que você deseja, o seguinte funciona:
axis(1, 1:dim(d)[2], colnames(d), las=2) axis(2, 1:dim(d)[2], colnames(d), las=2)
las = 0 viraria os nomes de volta à sua posição normal, os meus eram longos, então usei las = 2 para torná-los perpendiculares ao eixo.
edit2: para suprimir os números de impressão da função image () na grade (caso contrário, eles se sobrepõem aos rótulos das variáveis), adicione xaxt = 'n', por exemplo:
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')
fonte