Ho 92 set di dati dello stesso tipo.
Voglio creare una matrice di correlazione per due combinazioni possibili.
cioè voglio una matrice di 92 x92.
tale che l'elemento (ci, cj) dovrebbe essere correlazione tra ci e cj.
Come lo faccio?
Ho 92 set di dati dello stesso tipo.
Voglio creare una matrice di correlazione per due combinazioni possibili.
cioè voglio una matrice di 92 x92.
tale che l'elemento (ci, cj) dovrebbe essere correlazione tra ci e cj.
Come lo faccio?
Risposte:
Un esempio,
d <- data.frame(x1=rnorm(10),
x2=rnorm(10),
x3=rnorm(10))
cor(d) # get correlations (returns matrix)
Potresti usare il pacchetto '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
Maggiori informazioni qui: http://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html
La funzione cor utilizzerà le colonne della matrice nel calcolo della correlazione. Quindi, il numero di righe deve essere lo stesso tra la matrice x e la 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))
Di seguito è riportato un esempio di etichette di riga e colonna personalizzate su una matrice di correlazione calcolata con una singola 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()
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
funzione non accetta automaticamente i nomi di riga e colonna, quindi questo deve essere aggiunto.
Ci sono altri modi per ottenere questo risultato qui: ( Tracciare la matrice di correlazione in un grafico ), ma mi piace la tua versione con le correlazioni nelle caselle. C'è un modo per aggiungere i nomi delle variabili alla colonna xey invece che solo quei numeri di indice? Per me, ciò renderebbe questa una soluzione perfetta. Grazie!
modifica: stavo cercando di commentare il post di [Marc in the box], ma chiaramente non so cosa sto facendo. Tuttavia, sono riuscito a rispondere a questa domanda da solo.
se d è la matrice (o il data frame originale) ei nomi delle colonne sono ciò che desideri, allora funziona quanto segue:
axis(1, 1:dim(d)[2], colnames(d), las=2)
axis(2, 1:dim(d)[2], colnames(d), las=2)
las = 0 riportava i nomi alla loro posizione normale, i miei erano lunghi, quindi ho usato las = 2 per renderli perpendicolari all'asse.
edit2: per sopprimere la funzione image () che stampa i numeri sulla griglia (altrimenti si sovrappongono alle etichette delle variabili), aggiungi xaxt = 'n', ad esempio:
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
funzione, o allarcorr
funzione nelHmisc
pacchetto