Bagplot: generalização bivariada do Boxplot| R
I — Resumo
Diferente do meu último texto, sobre redes neurais [1], o de hoje vai ser simples no desenvolvimento teórico e matemático. Busco apenas apresentar uma forma de visualização — útil e pouco divulgada — para análise exploratória em caso bivariado: o bagplot.
II — Gramática do Boxplot
Há tempo escrevi aqui no blog sobre o gráfico boxplot [2]. Como salientei lá, a estrutura de um boxplot pode ser descrita da seguinte forma:
• A linha central marca a mediana do conjunto de dados;
• A parte inferior da caixa é delimitada pelo primeiro quartil (Q1) e a parte superior pelo terceiro quartil (Q3);
• Podemos, com isso, verificar também o intervalo interquartil dado pela diferença entre o primeiro e o terceiro quartil (IQR = Q3 − Q1);
• As hastes inferiores e superiores se estendem, respectivamente, do quartil inferior até o menor valor não inferior a Q1 − 1.5 ∗ IQR e do quartil superior até o maior valor não superior a Q3 + 1.5 ∗ IQR;
• Os valores inferiores a Q1 −1.5 ∗ IQR e superiores a Q3 + 1.5 ∗ IQR são representados individualmente no gráfico sendo estes valores caracterizados como outliers, ou seja, que estão fora do intervalo Q1 − 1.5 ∗ IQR < valor < Q3 + 1.5 ∗ IQR;
• As quantidades Q1 − 1.5 ∗ IQR e Q3 + 1.5 ∗ IQR delimitam as cercas inferior e superior, respectivamente, e constituem limites para além dos quais, como visto, os dados passam a ser considerados outliers.
De forma gráfica com a distribuição Gaussiana:
III — Boxplot e análise exporatória
Note que o boxplot consegue descrever a estrutura no plano univariado. Pode-se até plotar várias características em sequências com o boxplot, porém não duas variáveis simultaneamente como em um gráfico de dispersão com duas dimensões. Por exemplo, podemos pegar a famigerada base de dados Iris e plotar um boxplot para o comprimento da sépala dado as espécies de flor. Segue o código:
Com alguns ajustes adicionando a camada geom jitter:
Caso queira observar duas variáveis/atributos como, por exemplo, o comprimento e largura das sépalas:
Observe que o boxpot entrega perfeitamente a função de visualizar a distribuição do comprimento e largura da sépala por espécie de flor. Não obstante, caso queiramos visualizar duas variáveis simultaneamente torna-se impossível. Por exemplo, caso queiramos visualizar largura da sépala e comprimento da sépala. Justamente aqui entra o bagplot!
IV — Generalização do boxplot: bagplot
O Bagplot representa a generalização do boxplot tradicional para casos com duas variáveis ou dois atributos, isto é, para o caso bivariado (Rousseeuw, Ruts & Tukey, 1999). A interpretabilidade, principalmente visual, é consideravelmente diferente de um boxplot tradicional descrito anteriormente. Faceli et al. (2011, p. 26) descreve bem a forma e estrutura do bagplot:
O gráfico [bagplot] apresenta três regiões convexas. A menor delas tem apenas um objeto, representado por um asterisco, cujas coordenadas são definidas pela mediana de seus dois atributos. A segunda região, denominada bag, possui 50% dos objetos, cujas coordenadas são definidas pelos valores entre o primeiro e terceiro quartis para cada um dos atributos. A maior região chamada loop, é a bag expandida três vezes o intervalo entre quartis nas duas dimensões, 1.5 vez em cada sentido. Para cada eixo, o valor máximo e o valor mínimo são definidos, respectivamente, pelos limites superior e inferior do atributo correspondente. O objeto fora da maior região são considerados outliers. Cada dimensão vista isoladamente representa o boxplot para o atributo associado.
Acalme-se, após a visualização ficará mais claro a explicação. Dito isso, vou plotar o comprimento e largura da sépala com o bagplot. Para isso, vou usar o pacote aplpack na linaguem R
. Segue o código:
À guisa de conclusão, com pequenas adição no código anterior, podemos visualizar de forma mais detalhada o bagplot, principalmente, para visualizar a presença de outliers.
Como pode ser observado, há um visível outlier (ponto preto discrepante nas coordenadas: [4.4, 5.7]). A região de tonalidade azul escura, cercada pelos pontos de cor laranja, representam a bag, isto é, possui 50% dos objetos, cujas coordenadas são definidas pelos valores entre o primeiro e terceiro quartis para cada um dos atributos. A região de tonalidade azul clara, cercada pelos pontos verdes, representa o loop, isto é, a bag expandida três vezes o intervalo entre quartis nas duas dimensões, 1.5 vez em cada sentido. Por sua vez, o ponto central com o asterisco (cor vermelha), representa as coordenadas da mediana de seus dois atributos.
Concluindo, podemos fazer a plotagem usando o ggplot2. Eu, particularmente, prefiro o gráfico em sua forma padrão apresentada anteriormente. Bem, de qualquer forma, seguindo a aplicação do William Surles [3], podemos plotar usando o ggplot2 como segue:
Assim, a região de cor vermelha representa a bag; a laranja, o loop. A região discrepante você já sabe, certo, claro leitor?
Referências Bibliográficas
FACELI, K. et al. Inteligência Artificial: uma abordagem de aprendizagem de máquina. Rio de Janeiro: LTC, 2011.
Rousseeuw et al. The Bagplot: a bivariate plot. The American Statistican, 1999.
SILVA, B. et al. Minicurso de Estatística Básica: Introdução ao software R. Programa de Educação Tutorial: Engenharia Elétrica Universidade Federal de Santa Maria Santa Maria, 2009.