Como exibir uma matriz de correlações com entradas ausentes?

10

Gostaria de obter uma representação gráfica das correlações nos artigos que reuni até agora para explorar facilmente os relacionamentos entre as variáveis. Eu costumava desenhar um gráfico (confuso), mas agora tenho muitos dados.

Basicamente, eu tenho uma tabela com:

  • [0]: nome da variável 1
  • [1]: nome da variável 2
  • [2]: valor de correlação

A matriz "geral" está incompleta (por exemplo, eu tenho a correlação de V1 * V2, V2 * V3, mas não V1 * V3).

Existe uma maneira de representar isso graficamente?

Coronier
fonte

Respostas:

12

Com base na resposta de @ GaBorgulya, sugiro tentar a flutuação ou o gráfico de níveis (também conhecido como displays de mapa de calor).

Por exemplo, 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="")

(Aqui, a entrada ausente é exibida em cinza claro, mas o esquema de cores padrão pode ser alterado e você também pode colocar "NA" na legenda.)

insira a descrição da imagem aqui

ou

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

(Aqui, os valores ausentes simplesmente não são exibidos. No entanto, você pode adicionar ae geom_text()exibir algo como "NA" na célula vazia.)

insira a descrição da imagem aqui

chl
fonte
2
+1 por ggfluctuation, não tinha visto isso antes! Este post tem outro código útil para visualizar este tipo de dater: stackoverflow.com/questions/5453336/...
perseguição
@Case (+1) Thx. BTW, parece que tive algum problema com meu esquema de cores para valores de correlação negativos.
CHL
Reordenando as linhas e colunas por ( hclust(…)$order) [ stat.ethz.ch/R-manual/R-devel/library/stats/html/hclust.html], a visualização geralmente será mais fácil de visualizar.
GaBorgulya
@GaBorgulya Good point. Eu uso isso quando estou fazendo análise exploratória de dados e as variáveis ​​não têm uma ordem específica (como seria o caso de dados espaciais ou temporais ou dados estruturados que você deseja ver como está). A mixOmics::cimfunção é muito boa para isso. Um problema relacionado foi discutido aqui, stats.stackexchange.com/questions/8370/… .
chr
5

Seus dados podem ser como

  name1 name2 correlation
1    V1    V2         0.2
2    V2    V3         0.4

Você pode reorganizar sua tabela longa em uma tabela ampla com o seguinte 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),]

Você recebe

  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

Agora você pode usar técnicas para visualizar matrizes de correlação (pelo menos aquelas que podem lidar com valores ausentes).

GaBorgulya
fonte
2
o reshapepacote também pode ser útil. Uma vez que você tem e, considere algo comolibrary(reshape) cast(melt(e), name1 ~ name2)
perseguição
3

O corrplotpacote é uma função útil para visualizar matrizes de correlação. Ele aceita uma matriz de correlação como objeto de entrada e possui várias opções para exibir a própria matriz. Um recurso interessante é que ele pode reorganizar suas variáveis ​​usando métodos de cluster hierárquico ou PCA.

Veja a resposta aceita neste tópico para obter um exemplo de visualização.

Iris Tsui
fonte