2013-03-14 8 views
7

Ich habe eine Matrix von etwa 1000 Reihe X 500 Variable, Ich versuche, eine Korrelationsmatrix für diese Variablen mit Namen als Zahlen eher zu etablieren, so dass das Ergebnis wie folgtKorrelationsmatrix mit Namen

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

aussehen sollte where mrv1 = Am meisten verwandte Variable zu Variable1, Smrv1 = zweit am meisten verwandte Variable und so weiter.

Ich habe tatsächlich die Korrelationsmatrix gemacht, aber mit einer for-Schleife und einem sehr komplizierten Befehl (wahrscheinlich der schlechteste Befehl aller Zeiten, aber es funktioniert tatsächlich!). Ich freue mich darauf, dies durch einen richtigen Befehl festzustellen, hier ist der Befehl, den ich jetzt verwende.

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) 
} 

Irgendwelche Ideen von einem einfachen, zuverlässigen Befehl?

Danke,

+1

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

Antwort

6

Funktioniert dieses Beispiel für das, was Sie wollen?

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 Mann! jetzt reden wir;) Danke :) – Error404

+0

Gern geschehen! :-) –

1

Um die Beziehungen in einer Korrelationsmatrix zu visualisieren, könnten Sie eine Clusteranalyse in Erwägung ziehen. Verwenden Sie eins minus der Korrelationsmatrix als Entfernungsmatrix (oder möglicherweise eins minus dem absoluten Wert der Korrelationsmatrix) und übergeben Sie das dann an eine Funktion wie agnes oder eine andere Clusterfunktion. Die Bestellung und die Diagramme damit können informativ sein.

Verwandte Themen