¿Cómo mostrar una matriz de correlaciones con entradas faltantes?

10

Me gustaría obtener una representación gráfica de las correlaciones en los artículos que he reunido hasta ahora para explorar fácilmente las relaciones entre las variables. Solía ​​dibujar un gráfico (desordenado) pero ahora tengo demasiados datos.

Básicamente, tengo una mesa con:

  • [0]: nombre de la variable 1
  • [1]: nombre de la variable 2
  • [2]: valor de correlación

La matriz "global" está incompleta (por ejemplo, tengo la correlación de V1 * V2, V2 * V3, pero no V1 * V3).

¿Hay alguna forma de representar esto gráficamente?

Coronier
fuente

Respuestas:

12

Sobre la base de la respuesta de @ GaBorgulya, sugeriría probar la fluctuación o el gráfico de nivel (también conocido como pantallas de mapa de calor).

Por ejemplo, usando ggplot2 :

library(ggplot2, quietly=TRUE)
k <- 100
rvals <- sample(seq(-1,1,by=.001), k, replace=TRUE)
rvals[sample(1:k, 10)] <- NA
cc <- matrix(rvals, nr=10)
ggfluctuation(as.table(cc)) + opts(legend.position="none") + 
  labs(x="", y="")

(Aquí, las entradas faltantes se muestran en gris claro, pero el esquema de color predeterminado se puede cambiar y también se puede poner "NA" en la leyenda).

ingrese la descripción de la imagen aquí

o

ggfluctuation(as.table(cc), type="color") + labs(x="", y="") +
  scale_fill_gradient(low = "red",  high = "blue")

(Aquí, los valores perdidos simplemente no se muestran. Sin embargo, puede agregar geom_text()ay mostrar algo como "NA" en la celda vacía).

ingrese la descripción de la imagen aquí

chl
fuente
2
¡+1 para ggfluctuation, no había visto eso antes! Esta publicación tiene otro código útil para visualizar este tipo de fechador: stackoverflow.com/questions/5453336/…
Chase
@Chase (+1) Thx. Por cierto, parece que tuve algún problema con mi esquema de color para los valores de correlación negativa.
chl
Reordenando las filas y columnas por ( hclust(…)$order) [ stat.ethz.ch/R-manual/R-devel/library/stats/html/hclust.html] la visualización será a menudo más fácil de ver.
GaBorgulya 01 de
@GaBorgulya Buen punto. Lo uso cuando estoy haciendo un análisis exploratorio de datos y las variables no tienen un orden particular (como sería el caso de los datos espaciales o temporales, o los datos estructurados que desea ver tal cual). La mixOmics::cimfunción es muy buena para eso. Aquí se discutió un problema relacionado, stats.stackexchange.com/questions/8370/… .
chl
5

Sus datos pueden ser como

  name1 name2 correlation
1    V1    V2         0.2
2    V2    V3         0.4

Puede reorganizar su mesa larga en una amplia con el siguiente código R

d = structure(list(name1 = c("V1", "V2"), name2 = c("V2", "V3"), 
    correlation = c(0.2, 0.4)), .Names = c("name1", "name2", 
    "correlation"), row.names = 1:2, class = "data.frame")
k = d[, c(2, 1, 3)]
names(k) = names(d)
e = rbind(d, k)
x = with(e, reshape(e[order(name2),], v.names="correlation", 
  idvar="name1", timevar="name2", direction="wide"))
x[order(x$name1),]

Usted obtiene

  name1 correlation.V1 correlation.V2 correlation.V3
1    V1             NA            0.2             NA
3    V2            0.2             NA            0.4
4    V3             NA            0.4             NA

Ahora puede usar técnicas para visualizar matrices de correlación (al menos las que pueden hacer frente a los valores faltantes).

GaBorgulya
fuente
2
El reshapepaquete también puede ser útil. Una vez que lo haya hecho e, considere algo comolibrary(reshape) cast(melt(e), name1 ~ name2)
Chase el
3

El corrplotpaquete es una función útil para visualizar matrices de correlación. Acepta una matriz de correlación como el objeto de entrada y tiene varias opciones para mostrar la matriz en sí. Una buena característica es que puede reordenar sus variables utilizando clústeres jerárquicos o métodos PCA.

Vea la respuesta aceptada en este hilo para una visualización de ejemplo.

Iris Tsui
fuente