Gráfico Boxplot e identificação de outliers com o R
I — Introdução
A forma de gráfico em boxplot ou, para os íntimos, diagrama de caixa ou bigode, é uma forma de gráfico que causa certa estranheza em um primeiro contato. Para o público “mais leigo” (aqui entenda, como o público com pouco contato com estatística, ciência de dados, economia etc) a situação é mais drástica, pois a interpretação do boxplot está para além da simples interpretação de um gráfico de dispressão ou de um comum gráfico de barras.
Dito isso, o presente texto, busca, em primeiro, expor a interpretação da estrutura básica do gráfico boxplot e, em segundo lugar, ensinar como fazer tais gráficos usando a linguagem R — tanto a base quanto com o pacote ggplot2.
II — “Gramática do Boxplot”
O Boxplot é, normalmente, utilizado para visualizar ou identificar se há presença de outliers nos dados, isto é, para visualizar se há dados muito afastados do centro de distribuição, afastados da média e da variância. Em outras palavras: para identificar dados discrepantes — diga-se de passagem, o boxplot possibilita visualizar todas as informações disponibilizadas pelas função summary() do R.
Como pode ser visualizado na imagem da estrutura de um boxplot a seguir, para além da identificação dos outliers, o gráfico boxplot resume visualmente cinco componentes: limite inferior, 1º quartil (Q1), mediana, 3º quartil (Q3), limite superior. Seis componentes contando com os outliers (fora dos limites).
E, na imagem a seguir, uma melhor visualização da relação do boxplot com a distribuição dos dados:
De acordo com Silva et al (2009, p.33), esses são os seguintes parâmetros que podemos visualizar em um boxplot:
• 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.
III — Boxplot com o R
Importando os dados do Índice de Gini do ano de 2010 para os 246 municípios de Goiás, com os dados disponibilizados no reservatório de dados do Instituto Mauro Borges (IMB), podemos começar fazendo um exemplo simples no R. Diga-se de passagem, para uma análise exploratória dos dados do Índice de Gini para os 246 municípios goianos, ver aqui. Dito isso, a seguir pode-se visualizar os argumentos usados no código para a construção do gráfico no R:
Os argumentos mais comuns são:
• x — vetor de dados (necessário);
• main — título do gráfico;
• xlab — texto do eixo x;
• ylab — texto do eixo y;
• col — cor do preenchimento da caixa;
• border — cor da linha/borda da caixa;
• horizontal — se TRUE, a caixa aparece no formato horizontal, se FALSE (default), aparece no formato vertical;
• notch — formato da caixa.
Dito isso, vamos ao R, segue o código:
Horizontal e Vertical lado a lado (configura as linhas de códigos)
Outro comando que pode ser muito útil, é o comando para ver quais pontos, quais dados, são outliers. Para visualizar quais são os pontos que são outliers basta digitar o seguinte código: boxplot.stats(vetor de dados)$out. No caso do dados que estou utilizando fica:
boxplot.stats(Gini)$out, o qual retorna o seguinte resultado:
[1]0.66; 0.66; 0.68; 0.78
IV- Boxplot em ggplot2
À guisa de conclusão, nesta última seção busco lembrar que o R também disponibiliza o pacote ggplot2 que faz belos gráficos boxplot. As linhas de código, ou melhor, os argumentos para a construção dos gráfico disfere pouca coisa. Em linhas gerais é bem semelhante. Disponibiliza também a forma de Violin Plot. Para aqueles que quiserem se aprofundar no tema, deixo o seguinte link para um explicação mais minuciosa aqui.
Os dados para os 246 municípios estão segmentados por mesorregiões: Centro Goiano, Leste Goiano, Noroeste Goiano, Norte Goiano e Sul Goiano. Com isso em mente, podemos plot um boxplot para cada mesorregião no mesmo gráfico utilizando o pacote ggplot2. Observe que nos gráficos anteriormente exposto, consideramos no agregado, agora, nesse vamos dividir por mesorregião. Segue o código:
Referência Bibliográfica:
PACHECO et al. Aprendendo R. Escola Nacional de Saúde Público: Fiocruz, 2017.
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.