Explorando uma matriz de gráfico de dispersão para muitas variáveis

10

Estou analisando um conjunto de dados com muitos parâmetros (por exemplo, 50-200) e estou interessado em examinar as relações entre variáveis ​​(por exemplo, em termos de gráficos de dispersão de 2 variáveis ​​ou histogramas 2D). No entanto, para esse número de parâmetros, parece inviável desenhar uma matriz de plotagens de 200x200 (a menos que eu a imprima e pendure na parede).

Por outro lado, fazer apenas uma matriz de correlação não fornece todas as informações sobre relações de 2 variáveis.

Existe uma maneira (biblioteca ou fluxo de trabalho) de explorar relações de 2 variáveis ​​para muitas variáveis?

Estou especialmente interessado em mostrar resultados para outras pessoas (talvez após algum pré-processamento de dados). Por exemplo, algo interativo em JavaScript, onde posso ver a matriz de gráficos de dispersão para campos selecionados de uma matriz de correlação.

Por matriz de gráfico de dispersão, quero dizer algo assim:

insira a descrição da imagem aqui

(extraído do blog pandasplotting ; disponível em Python / Pandas , R , D3.js , etc.).

Piotr Migdal
fonte
4
Você não deixou claro o que está procurando. Deseja ver a nuvem, todos os pontos de dados? Deseja ver todas as facetas bivariadas de uma só vez ?
21413 #
@ttnphns Eu quero ver todos os pontos de dados OU eles de alguma forma agregada (por exemplo, histogramas 2D). Não preciso ver que todas as coisas são uma vez (pois faz sentido para <15 variáveis, mas não para 200). E sim, estou ciente de que a pergunta é um pouco aberta. Uma versão final é "Existe uma biblioteca JS para mostrar gráficos de dispersão e histogramas quando o mouse passa no pixel respectivo em uma matriz de correlação? Ou devo escrever uma? :)" Escrevi uma mais geral, pois talvez haja alguns fluxos de trabalho melhores para lidar com o problema.
Piotr Migdal
É possível organizar a matriz de gráficos de dispersão na forma de cubo olap, para que você veja apenas um ou vários gráficos de cada vez e possa alternar entre eles. Infelizmente, não conheço um programa ou código específico para fazer cubos olap gráficos.
ttnphns

Respostas:

7

Explorar relações entre variáveis ​​é bastante vago, mas eu acho que dois dos objetivos mais gerais de examinar gráficos de dispersão como esse;

  • Identifique grupos latentes subjacentes (de variáveis ​​ou casos).
  • Identifique outliers (no espaço univariado, bivariado ou multivariado).

Ambos reduzem os dados em resumos mais gerenciáveis, mas têm objetivos diferentes. Para identificar grupos latentes, normalmente reduz-se as dimensões nos dados (por exemplo, via PCA) e depois explora se variáveis ​​ou casos se agrupam nesse espaço reduzido. Veja, por exemplo, Friendly (2002) ou Cook et al. (1995).

Identificar discrepantes pode significar ajustar um modelo e plotar os desvios do modelo (por exemplo, plotar resíduos de um modelo de regressão) ou reduzir os dados em seus componentes principais e apenas destacar pontos que se desviam do modelo ou do corpo principal de dados. Por exemplo, boxplots em uma ou duas dimensões geralmente mostram apenas pontos individuais que estão fora das dobradiças (Wickham & Stryjewski, 2013). A plotagem de resíduos tem a propriedade legal de que deve achatar as plotagens (Tukey, 1977); portanto, qualquer evidência de relacionamento na nuvem de pontos restante é "interessante". Esta pergunta no CV tem algumas excelentes sugestões para identificar discrepâncias multivariadas.

Uma maneira comum de explorar SPLOMS tão grandes é não plotar todos os pontos individuais, mas algum tipo de resumo simplificado e, em seguida, talvez pontos que se afastem amplamente desse resumo, por exemplo, elipses de confiança, resumos escagnósticos (Wilkinson & Wills, 2008), bivariados gráficos de caixas, gráficos de contorno. Abaixo está um exemplo de plotagem de elipses que definem a covariância e a sobreposição de um loess mais suave para descrever a associação linear.

Corrgram Ellipses
(fonte: statmethods.net )

De qualquer maneira, uma plotagem interativa de sucesso real com tantas variáveis ​​provavelmente precisaria de classificação inteligente (Wilkinson, 2005) e uma maneira simples de filtrar variáveis ​​(além de recursos de escovar / vincular). Além disso, qualquer conjunto de dados realista precisaria ter os recursos para transformar o eixo (por exemplo, plotar os dados em escala logarítmica, transformar os dados criando raízes etc.). Boa sorte e não fique com apenas um enredo!


Citações

Andy W
fonte
11
Obrigado! Meu objetivo é explorar os dados antes de executar o PCA, pois as variáveis ​​podem ser relacionadas de maneira não linear e exigir redimensionamento (ou outro processamento).
Piotr Migdal
O exemplo corrgram ellipse + loess smoother ainda deve ser pertinente (ou altere a covar. Elipse com algum outro polígono de medida como o boxplot bivariado) e pode ajudar a identificar associações não lineares. Uma boa pergunta de acompanhamento pode ser se é possível identificar associações não lineares após a redução de dados via PCA (ou algo assim).
Andy W
1

Você pode considerar usar a interface brilhante do pacote pairsD3 R, que fornece uma maneira de interagir com matrizes de plotagem de dispersão.

Um exemplo com o conjunto de dados da íris:

install.packages("pairsD3")
require("pairsD3")
shinypairs(iris)

Fonte: https://github.com/garthtarr/pairsD3

Garth
fonte