Matriz de correlação de plotagem ao longo do tempo

7

Com base na sua experiência, você tem alguma sugestão para representar matrizes de correlação variáveis ​​no tempo? Eu olhei para /quant/1565/how-do-i-graphically-represent-the-evolution-of-a-covariance-matrix-over-time , mas não consegui encontrar nenhum bom artigo. Estou fazendo essa pergunta porque sou bastante novo no campo da análise de dados, e o único livro que li até agora é o de Wickham ggplot2. Então, pensei em perguntar a especialistas sobre isso.

Eu sinceramente aprecio qualquer ajuda.

torre de vigia
fonte
2
A escolha da solução gráfica depende fortemente de suas prioridades de comparação. O que é mais importante para você comparar imediatamente, olhando de relance - elemento com elemento dentro de uma matriz ou elemento no ponto t1 com ele próprio no ponto t2.
ttnphns

Respostas:

3

Há várias questões aqui (e se você ggplot2me parece inteiramente ortogonal a elas). Primeiro, reconheça que essas correlações não necessariamente se dimensionam de uma maneira intuitiva e "linear" (em grande parte porque seu alcance possível é limitado). Vale a pena pensar em como você deseja representar os valores. Por exemplo, você pode usar:

  1. as correlações originais ( escores)r
  2. coeficientes de determinação ( 's)r2
  3. z escores com base nos resultados da transformação de ' em 'rz de Fisher :
    zr=.5ln(1+r1r)

Eu realmente não sei nada sobre a sua situação, por isso é difícil para mim dizer, mas meu padrão seria usar as pontuações transformadas ( ). zr

Em seguida, você precisa decidir o que dizer dos dados que deseja incluir (de todo ou com mais ou menos destaque). Por exemplo, você deseja incluir as magnitudes absolutas dos valores, ou apenas suas mudanças (cf. níveis x mudanças na economia)? Você se preocupa principalmente com as magnitudes das mudanças (isto é, valores absolutos), sejam elas aumentos ou diminuições (os sinais, em sentido absoluto, ou em direção ou longe de nenhuma correlação), ou ambas?

Dado que você deseja visualizar uma matriz de correlação (ou seja, um conjunto de correlações), vale lembrar que elas não serão independentes . Considere que uma mudança em apenas uma variável terá efeito em várias correlações, mesmo que as outras variáveis ​​sejam constantes ao longo do tempo. Então, novamente, depende se isso importa para você.

Em outras palavras, descobrir exatamente com o que você realmente se importa é vital. Não haverá uma visualização que capture todas essas facetas.


Pelo seu comentário , deduzo que você terá apenas duas matrizes de correlação, antes e depois. Isso simplifica as coisas. Novamente, sem nenhuma informação sobre sua situação, dados ou objetivos, eu provavelmente faria um gráfico de dispersão com antes e depois no eixo X, e no eixo Y, e os dois pontos representando a mesma correlação unida por uma linha segmento. Considere este exemplo, codificado em R: zr

library(MASS)   # we'll use these packages
library(psych)
set.seed(541)   # this makes the example exactly reproducible
bef = mvrnorm(100, mu=rep(0, 5), Sigma=rbind(c(1.0, 0.0, 0.0, 0.0, 0.0),
                                             c(0.0, 1.0, 0.4, 0.0, 0.5),
                                             c(0.0, 0.4, 1.0, 0.1, 0.0),
                                             c(0.0, 0.0, 0.1, 1.0, 0.8),
                                             c(0.0, 0.5, 0.0, 0.8, 1.0) ))
aft = mvrnorm(100, mu=rep(0, 5), Sigma=rbind(c(1.0, 0.0, 0.0, 0.0, 0.0),
                                             c(0.0, 1.0, 0.4, 0.0, 0.5),
                                             c(0.0, 0.4, 1.0, 0.1, 0.0),
                                             c(0.0, 0.0, 0.1, 1.0, 0.8),
                                             c(0.0, 0.5, 0.0, 0.8, 1.0) ))
aft[,5] = rnorm(100)  # above I generate data 2x from the same population, 
b.c = cor(bef)        #  here I change just 1 variable
a.c = cor(aft)        # then I make cor matrices, & extract the rs into a vector
b.v = b.c[upper.tri(b.c)]
a.v = a.c[upper.tri(a.c)]
d   = stack(list(bef=b.v, aft=a.v))
d$ind = relevel(d$ind, ref="bef")
windows(width=7, height=4)
  layout(matrix(1:2, nrow=1))
  plot(as.numeric(d$ind), fisherz(d$values), main="Fisher's z",
       axes=F, xlab="time", ylab=expression(z [r]), xlim=c(.5,2.5))
  box()
  axis(side=1, at=1:2, labels=c("before","after"))
  axis(side=2, at=seq(-.2,1.5, by=.2), cex.axis=.8, las=1)
  for(i in 1:10){ lines(1:2, matrix(fisherz(d$values), nrow=10, ncol=2)[i,]) }

  plot(as.numeric(d$ind), d$values, main="Raw rs",
       axes=F, xlab="time", ylab="r", xlim=c(.5,2.5))
  box()
  axis(side=1, at=1:2, labels=c("before","after"))
  axis(side=2, at=seq(-.2,1.0, by=.2), cex.axis=.8, las=1)
  for(i in 1:10){ lines(1:2, matrix(d$values, nrow=10, ncol=2)[i,]) }; rm(i)

fdif       = abs(fisherz(a.c)-fisherz(b.c))
diag(fdif) = 0
windows()
  image(1:5, 1:5, z=fdif, 
        xlab="", ylab="", col=gray.colors(8)[8:3])
  for(i in 1:5){ for(j in 1:5){ text(i,j,round(fdif,2)[i,j]) }}

insira a descrição da imagem aqui

As figuras acima exibem os níveis das correlações e a quantidade de alteração. Você pode ver vários recursos, como uma convergência para . A diferença entre a utilização de e é que as -scores são mais uniformemente distribuídos de antemão. A distância entre e é igual à distância entre e , por exemplo. Por outro lado, para , as correlações próximas ar=0zrrr0.4.4.8zr0são agrupados e a forte correlação está muito mais distante do resto. O que esses números não capturam é a não independência dessas linhas. Você pode ver no mapa de calor abaixo (usando valores absolutos das diferenças em 's) que as alterações maiores estão associadas à variável 5. zr

insira a descrição da imagem aqui

- Reinstate Monica
fonte
Muito obrigado pela sua ajuda. Usei a resposta de Irishstat abaixo para a minha apresentação há dois dias. Foi bem. No entanto, no futuro, usarei a transformação de Fisher. Eu gosto disso.
torre de vigia
1

Na minha opinião, é melhor quantificar o efeito de alterações nos parâmetros (um proxy para correlações locais) em vez de tentar um visual, pois as tentativas de comparações visuais podem ser bastante subjetivas. Sua pergunta é semelhante a "Como faço para testar se os parâmetros do meu mudança de modelo ao longo do tempo ". O que fiz foi programar o teste de Chow para determinar em que momento os parâmetros apresentam maior divergência. A descoberta disso leva a um teste direto de significância, possivelmente resultando na conclusão de que "dados anteriores" devem ser deixados de lado.

IrishStat
fonte
Qual é a sua resposta para a pergunta, que parece perguntar sobre formas gráficas de visualizar as mudanças ao longo do tempo?
whuber
Eu acho que eu estava tentando dizer a ele sobre uma alternativa para gráficos que na minha opinião uma definição de trabalho de análise estatística,
IrishStat
@IrishStat - Depois de fazer cuidadosamente as duas comparações visuais e quantificá-las, percebi que quantificá-las é muito melhor. Essencialmente, vou criar duas matrizes 'antes e depois' e depois mostrar o que está acontecendo. Obrigado novamente por sua ajuda.
torre de vigia
O problema que você pode ter é determinar como sapecoificar [position
IrishStat 6/11/16
11
O problema que você pode ter é determinar como especificar o ponto de interrupção. A abordagem que eu estava sugerindo pode realmente determinar o ponto de interrupção mais significativo. Além disso, as correlações podem ser severamente atenuadas por anomalias, fazendo com que você conclua que não há relacionamento. É por isso que é preciso acomodar / retificar / ajustar / limpar as anomalias identificáveis ​​para avaliar corretamente os pontos de interrupção, mas essa é apenas a minha opinião de dois centavos.
IrishStat