2013-03-14 17 views
7

Ho una matrice di circa 1000 fila X 500 variabile, sto cercando di stabilire una matrice di correlazione per queste variabili con nomi piuttosto che numeri, in modo che il risultato dovrebbe assomigliare a questamatrice di correlazione con i nomi

variable1 variable2 variable3 variable4 ... 
    mrv1   mrv2   mrv3   mrv4 ... 
smrv1  smrv2  smrv3   smrv4 ... 
    .    .   .    . 
    .    .   .    . 
    .    .   .    . 

dove mrv1 = La maggior parte delle variabili correlate a variable1, smrv1 = seconda variabile più correlata e così via.

Ho effettivamente creato la matrice di correlazione, ma utilizzando un ciclo for e un comando molto complicato (probabilmente il peggior comando di tutti i tempi, ma in realtà funziona!). Non vedo l'ora di stabilire questo attraverso un comando corretto, ecco il comando che sto usando ora.

mydata <- read.csv("location", header=TRUE, sep=",") 
lgn <- length(mydata) 
crm <- cor(mydata) 

k <- crm[,1] 
K <- data.frame(rev(sort(k))) 
A <- data.frame(rownames(K)) 

for (x in 2:lgn){ 
k <- crm[,x] 
K <- data.frame(rev(sort(k))) 
B <- data.frame(rownames(K)) 
A <- cbind(A,B) 
} 

Qualche idea di comando più semplice e affidabile?

Grazie,

+1

È utile ?: http://stackoverflow.com/questions/6782070/display-correlation-tables-as-descending-list/6782814#6782814 – GSee

risposta

6

Questo esempio funziona per quello che vuoi?

W <- rnorm(10) 
X <- rnorm(10) 
Y <- rnorm(10) 
Z <- rnorm(10) 

df <- round(cor(cbind(W , X , Y , Z)) , 2) 
df 
#   W  X  Y  Z 
# W 1.00 -0.50 -0.36 -0.27 
# X -0.50 1.00 -0.42 -0.02 
# Y -0.36 -0.42 1.00 0.17 
# Z -0.27 -0.02 0.17 1.00 


apply(df , 2 , FUN = function(x){ j <- rev(order(x)); y <- names(x)[j] }) 
#  W X Y Z 
# [1,] "W" "X" "Y" "Z" 
# [2,] "Z" "Z" "Z" "Y" 
# [3,] "Y" "Y" "W" "X" 
# [4,] "X" "W" "X" "W" 


#And use abs() if you don't care about the direction of the correlation (negative or postive) just the magnitude 
apply(df , 2 , FUN = function(x){ j <- rev(order( abs(x) )); y <- names(x)[j] }) 
#  W X Y Z 
# [1,] "W" "X" "Y" "Z" 
# [2,] "X" "W" "X" "W" 
# [3,] "Y" "Y" "W" "Y" 
# [4,] "Z" "Z" "Z" "X" 
+0

ooo uomo! ora stiamo parlando;) Grazie :) – Error404

+0

Siete i benvenuti! :-) –

1

Per visualizzare le relazioni in una matrice di correlazione, è possibile prendere in considerazione un'analisi del cluster. Utilizza una meno la matrice di correlazione come matrice della distanza (o possibilmente una meno il valore assoluto della matrice di correlazione) quindi passa a una funzione come agnes o altra funzione del cluster. L'ordine e i grafici con quello possono essere informativi.

Problemi correlati