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?
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?
Respostas:
Um exemplo,
d <- data.frame(x1=rnorm(10),
x2=rnorm(10),
x3=rnorm(10))
cor(d) # get correlations (returns matrix)
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
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))
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()
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.
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')
cor
função, ou arcorr
função noHmisc
pacote