2011-07-21 13 views
13

Cuando ejecuto cor() en una serie de tiempos con muchas variables, obtengo una tabla que tiene una fila y una columna para cada variable, que muestra la correlación entre ellas.Mostrar tablas de correlación como lista descendente

¿Cómo puedo ver esta tabla como una lista de la mayoría correlacionada con la menos correlacionada (eliminando todos los resultados de NA y los resultados que vuelven a ellos mismos (es decir, la correlación de A a)). También me gustaría contar los resultados inversos (negativos) como valores absolutos, pero aún así mostrarlos como negativos.

Así que la salida deseada sería algo así como:

A,B,0.98 
A,C,0.9 
C,R,-0.8 
T,Z,0.5 

Respuesta

13

Aquí es una de las muchas maneras en que podría pensar para hacer esto. He utilizado el paquete de cambio de forma, porque la sintaxis melt() fue fácil para mí recordar, pero el comando melt() podría estar bastante fácilmente con comandos de base R:

require(reshape) 
## set up dummy data 
a <- rnorm(100) 
b <- a + (rnorm(100, 0, 2)) 
c <- a + b + (rnorm(100)/10) 
df <- data.frame(a, b, c) 
c <- cor(df) 
## c is the correlations matrix 

## keep only the lower triangle by 
## filling upper with NA 
c[upper.tri(c, diag=TRUE)] <- NA 

m <- melt(c) 

## sort by descending absolute correlation 
m <- m[order(- abs(m$value)), ] 

## omit the NA values 
dfOut <- na.omit(m) 

## if you really want a list and not a data.frame 
listOut <- split(dfOut, 1:nrow(dfOut)) 
10

Uso de R base (donde cors es la matriz de correlación):

up <- upper.tri(cors) 
out <- data.frame(which(up, arr.ind=TRUE), cor=cors[up]) 
out <- out[!is.na(out$cor),] 
out[order(abs(out$cor), decreasing=TRUE),] 
2

Reemplace ... con su llamada de correlación.

library(reshape) 
x <- subset(melt(cor(...)), value != 1 | value != NA) 
x <- x[with(x, order(-abs(x$value))),] 

Si usted está recibiendo una gran cantidad de NA en sus correlaciones, tal vez intente utilizar el argumento use="complete.obs" en su llamada de correlación.