Ho una matrice di correlazione in R e voglio sapere quanti gruppi (e mettere questi gruppi in vettori) di elementi correlati tra loro in più del 95%.exctract elementi correlati di una matrice di correlazione
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
contiene poi:
row col
[1,] 2 1
[2,] 3 1
[3,] 3 2
[4,] 5 4
Ciò significa che, come previsto, che i vettori 1,2 e 3 correlare tra di loro, e anche 4 e 5.
Quello che mi avrebbe bisogno è quello di ottenere due vettori c(1,2,3)
e c(4,5)
come risultato finale.
Questo è un semplice esempio, sto elaborando grandi matrici però.
è possibile che '1-2',' 1-3' sono correlati, ma '2-3' non lo è? – Nishanth
Non lo è. Se 1-2 e 1-3 sono correlati, allora 2-3 devono essere inclusi nello stesso gruppo. È una condizione particolare per ciò di cui ho bisogno. – Xavi
Un approccio ingenuo sarebbe quello di testare tutte le combinazioni pairwise-row di 'cor.vector' tramite' sum (is.element (i, j))> 0' e se condividono un elemento comune, quindi ti unisci a loro e vai sopra. Poiché potrebbero esserci modi più efficaci per ottenere la soluzione, non oso scrivere questo come risposta ... –