Menu

Boxplot no R: boxplot() por Grupo com Exemplos

Como fazer um boxplot no R com boxplot() - ler a caixa e os bigodes, a interface de fórmula para comparar grupos, estilização e como encontrar os números por trás do gráfico.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

Como Ler um Boxplot

Um boxplot comprime uma distribuição inteira em cinco números e os desenha como um único glifo compacto. Aprender a lê-lo leva trinta segundos, então vamos fazer isso primeiro - cada peça tem um significado preciso:

  • A linha grossa dentro da caixa é a mediana: metade dos dados fica abaixo dela, metade acima.
  • A caixa em si cobre o intervalo interquartil (IQR) - do primeiro quartil (25% dos dados abaixo) ao terceiro quartil (75% abaixo). A metade central dos seus dados vive dentro da caixa.
  • Os bigodes são as linhas que se estendem a partir da caixa. Cada um alcança o ponto de dados mais extremo que ainda está dentro de 1,5 × IQR da borda da caixa - então eles cobrem "o intervalo comum" dos dados, não o intervalo completo.
  • Pontos individuais além dos bigodes são valores a mais de 1,5 × IQR da caixa: marcados como outliers suspeitos, desenhados um a um para você poder contá-los.

Uma caixa alta significa dados espalhados; uma linha de mediana descentralizada dentro da caixa significa assimetria; um rastro de pontos depois de um bigode significa uma cauda pesada daquele lado. Um histograma mostra a mesma distribuição com mais detalhe - mas o superpoder do boxplot é que uma dúzia deles cabe lado a lado, o que faz dele o gráfico para comparar grupos.

Um Boxplot de Uma Variável

A função é boxplot(), e para um único vetor numérico é uma chamada:

scores <- c(52, 55, 58, 60, 61, 63, 64, 66, 68, 70, 72, 95)

boxplot(scores,
        main = "Test scores",
        ylab = "Score")

A imagem que isso desenha: uma caixa de 59 a 69 com a linha da mediana em 63,5, bigodes descendo até 52 e subindo até 72, e um ponto solitário flutuando em 95 - o outlier que um resumo de média-e-desvio-padrão teria absorvido em silêncio. Esse instantâneo "um valor não é como os outros" é para isso que boxplots servem.

(Como em todas as páginas deste capítulo, as chamadas de plotagem são trechos estáticos - o executor abaixo mostra apenas saída de texto. Rode-as localmente para ver o desenho.)

Comparando Grupos: a Interface de Fórmula

O uso real do dia a dia é uma caixa por grupo, e para isso boxplot() aceita uma fórmula: y ~ group, lida como "y quebrado por grupo". O dataset embutido do R ToothGrowth - comprimento de dentes em 60 porquinhos-da-índia que receberam vitamina C via suco de laranja (OJ) ou ácido ascórbico (VC) - é a demonstração clássica:

boxplot(len ~ supp,
        data = ToothGrowth,
        main = "Tooth growth by supplement",
        xlab = "Supplement",
        ylab = "Tooth length")

Duas caixas aparecem em uma escala vertical compartilhada: a caixa OJ fica visivelmente mais alta que a caixa VC, com sua mediana em torno de 22 contra cerca de 19. Como as duas caixas compartilham um eixo, a comparação é honesta por construção - sem chance de dois gráficos com escalas diferentes favorecerem um grupo. A coluna de agrupamento deve ser um fator (ou vetor de caracteres); cada nível vira uma caixa.

Fórmulas também se combinam: boxplot(len ~ supp * dose, data = ToothGrowth) desenha seis caixas, uma por combinação de suplemento e dose. Quando uma diferença entre grupos parece real nas caixas, a próxima pergunta natural - é mais do que ruído? - é o que um teste t responde.

Rótulos, Cores e Boxplots Horizontais

Os argumentos de estilização seguem as convenções da plotagem base. names rotula as caixas, col as preenche - passe um vetor para colorir cada grupo de forma diferente:

boxplot(len ~ supp,
        data  = ToothGrowth,
        names = c("Orange juice", "Ascorbic acid"),
        col   = c("orange", "lightblue"),
        main  = "Tooth growth by supplement",
        ylab  = "Tooth length")

Duas outras opções valem seu lugar:

  • horizontal = TRUE rotaciona o gráfico inteiro para que as caixas corram ao longo do eixo horizontal. Faça isso sempre que os nomes dos grupos forem longos - rótulos horizontais permanecem legíveis onde os verticais colidem.
  • notch = TRUE entalha cada mediana; quando os entalhes de dois grupos não se sobrepõem, suas medianas plausivelmente diferem. Trate como uma pista visual, não como um teste.

Os Números por Trás da Caixa

Tudo que o gráfico desenha vem de números que você pode imprimir. quantile() dá o resumo de cinco números, e boxplot.stats()exatamente o que o gráfico usa - incluindo os outliers. Este você pode rodar aqui mesmo:

Note que os dois são primos, não gêmeos: quantile() reporta o mínimo e o máximo verdadeiros, enquanto s$stats termina nos bigodes - os pontos mais extremos dentro da cerca de 1,5 × IQR. A diferença entre eles é precisamente s$out, aqui o 95 solitário. Quando alguém pergunta "quais linhas são aqueles pontos de outlier?", x[x %in% boxplot.stats(x)$out] - ou um filtro pelos valores da cerca - responde.

Boxplots com ggplot2

No ggplot2 o agrupamento entra no mapeamento estético em vez de uma fórmula:

library(ggplot2)

ggplot(ToothGrowth, aes(x = supp, y = len, fill = supp)) +
    geom_boxplot() +
    labs(title = "Tooth growth by supplement",
         x = "Supplement", y = "Tooth length")

As mesmas duas caixas, com legenda e tema de brinde. A versão do ggplot2 escala melhor quando o gráfico cresce - faça facetas por dose, sobreponha os pontos brutos com geom_jitter(width = 0.1), e o código continua declarativo. Para uma comparação pontual durante a análise, boxplot(y ~ g, data = df) continua sendo a coisa mais rápida que você pode digitar.

O Que Você Leva

  • Anatomia da caixa: linha da mediana, caixa = IQR, bigodes = pontos mais extremos dentro de 1,5 × IQR, pontos além = outliers suspeitos.
  • boxplot(x) para uma variável; boxplot(y ~ group, data = df) para comparação de grupos lado a lado em uma escala compartilhada e honesta.
  • Estilize com names, um vetor de col por grupo e horizontal = TRUE quando os rótulos forem longos.
  • boxplot.stats(x)$stats e $out são o gráfico em números - use-os para extrair os outliers que o gráfico aponta.
  • ggplot2: geom_boxplot() com o grupo mapeado para x ou fill.

A seguir: o gráfico de dispersão - da distribuição de uma variável para a relação entre duas.

Perguntas frequentes

Como fazer um boxplot no R?

Chame boxplot(x) em um vetor numérico para uma única caixa, ou use a interface de fórmula boxplot(y ~ group, data = df) para obter uma caixa por grupo, lado a lado. Ambas vêm com o R base - nenhum pacote é necessário.

O que significam as partes de um boxplot?

A linha grossa dentro da caixa é a mediana. A caixa cobre o intervalo interquartil, do primeiro quartil ao terceiro. Os bigodes alcançam os pontos de dados mais extremos dentro de 1,5 vez o IQR a partir da caixa, e qualquer coisa além dos bigodes é desenhada como um ponto individual - um outlier suspeito.

Como fazer um boxplot por grupo no R?

Use uma fórmula: boxplot(len ~ supp, data = ToothGrowth) desenha uma caixa por nível de supp. A variável de agrupamento deve ser um fator ou coluna de caracteres; cada nível vira uma caixa em uma escala compartilhada.

Como encontrar os outliers que um boxplot mostra?

boxplot.stats(x)$out retorna exatamente os valores que o gráfico desenharia como pontos além dos bigodes, e boxplot.stats(x)$stats dá os cinco números por trás da caixa - extremos dos bigodes, quartis e mediana.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR