2013-03-14 23 views
7

mam matrycę około 1000 rzędzie X 500 zmiennym, staram się nawiązać macierz korelacji dla tych zmiennych z nazwami zamiast numerów, więc wynik powinien wyglądać następującomacierz korelacji z nazwami

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

gdzie mrv1 = Najczęściej związana zmienna do zmiennej1, smrv1 = druga najbardziej powiązana zmienna i tak dalej.

W rzeczywistości stworzyłem macierz korelacji, ale używając pętli for i bardzo skomplikowanego polecenia (prawdopodobnie najgorszego polecenia wszech czasów, ale tak naprawdę działa!). Nie mogę się doczekać, aby ustalić to poprzez odpowiednie polecenie, oto polecenie, którego teraz używam.

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

Jakieś pomysły na prostsze, bardziej niezawodne polecenia?

Dzięki,

+1

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

Odpowiedz

6

Czy ten przykład działa tak, jak chcesz?

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 man! teraz rozmawiamy;) Dzięki :) – Error404

+0

Serdecznie zapraszamy! :-) –

1

Aby zwizualizować relacje w macierzy korelacji, można rozważyć wykonanie analizy skupień. Użyj jeden minus macierz korelacji jako macierz odległości (lub ewentualnie jeden minus wartość bezwzględna macierzy korelacji), a następnie przenieś ją do funkcji takiej jak agnes lub innej funkcji klastra. Zamawianie i fabuły z tym może być pouczające.