Mam macierz korelacji w R i chcę wiedzieć, ile grup (i umieścić te grupy w wektorach) elementów koreluje między nimi w ponad 95%.exctract skorelowane elementy macierzy korelacji
X <- matrix(0,3,5)
X[,1] <- c(1,2,3)
X[,2] <- c(1,2.2,3)*2
X[,3] <- c(1,2,3.3)*3
X[,4] <- c(6,5,1)
X[,5] <- c(6.1,5,1.2)*4
cor.matrix <- cor(X)
cor.matrix <- cor.matrix*lower.tri(cor.matrix)
cor.vector <- which(cor.matrix>0.95, arr.ind=TRUE)
cor.vector
zawiera wtedy:
row col
[1,] 2 1
[2,] 3 1
[3,] 3 2
[4,] 5 4
Oznacza to, że, zgodnie z oczekiwaniami, że wektory 1,2 i 3, korelują między nimi, jak również 4 i 5.
Co muszę jest uzyskanie dwóch wektorów c(1,2,3)
i c(4,5)
jako wyniku końcowego.
Jest to prosty przykład, ale przetwarzam duże macierze.
to możliwe, że '1-2',' 1-3' są skorelowane, ale '2-3' nie jest? – Nishanth
Nie jest. Jeśli 1-2 i 1-3 korelują, to 2-3 muszą być zawarte w tej samej grupie. Jest to szczególny warunek tego, czego potrzebuję. – Xavi
Podejściem naiwnym byłoby przetestowanie wszystkich kombinacji par/wierszy 'cor.vector' za pomocą' sum (is.element (i, j))> 0' i jeśli mają one wspólny element, to dołącz do nich i idź na. Ponieważ prawdopodobnie istnieją bardziej skuteczne sposoby rozwiązania, nie odważę się zapisać tego jako odpowiedzi ... –