Bagplot: generalização bivariada do Boxplot| R

Luiz Paulo Tavares Gonçalves
5 min readAug 14, 2021

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:

Fonte: Silva et al.(2009)

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.

--

--

Luiz Paulo Tavares Gonçalves

Graduando em Economia (UEG) & Big Data e Inteligência Artificial (PUC-GO)