Este tutorial incide sobre a construção e parametrização de histogramas no R.
Ao longo do texto será utilizado um vetor com 80 observações, coin, gerado de forma aleatória. Admita-se que se trata de 80 réplicas da contagem do número de caras (ou coroas) em 100 lançamentos de uma moeda.
A função replicate() é bastante útil para simular a replicação de experiências aleatórias. Pode ler mais sobre a função com ?replicate.
Para construir um histograma basta invocar a função gráfica de alto nível hist(), fornecendo o vetor de observações, tal como no código abaixo que produz a Figura 12.1.
hist(coin)
Figura 12.1: Exemplo de um histograma (sem configurações adicionais)
Como se pode verificar, a determinação do número de classes e dos respetivos limites é automática, mas havendo a possibilidade de configurar este e outros aspetos, como indicado nas restantes secções deste tutorial.
12.2 Visualização dos detalhes
A informação sobre as classes e as contagens pode ser acedida inspecionando o objeto devolvido pela função hist(), neste caso, h.
Os limites das classes, em $breaks, sendo as classes abertas à esquerda (exceto a primeira) e fechadas à direita.
As frequências absolutas ou contagens, \(f_k\), em $counts.
As densidades estimadas, \(\hat{f_k}(x)\), em $density: \(\hat{f_k}(x) = \frac{f_k}{n \times a_k}\).
Os pontos intermédios as classes, em $mids.
A função devolve sempre este objeto, que pode ser acedido mais tarde. Também seria possível mostrar o histograma posteriormente com plot(h).
12.3 Classes e contagens
Um dos aspetos mais importantes do histograma é a definição das classes, ou seja, quer o número de classes, quer os respetivos limites. Por omissão, o R utiliza a regra de Sturges para determinar o número aproximado de classes (aproximado apenas, pois o R tenta ajustar os limites das classes a valores redondos). Também por omissão, as classes têm todas a mesma amplitude.
Regra de Sturges
O número de classes, \(K\), é dado arredondando por excesso o seguinte cálculo:
\[K = 1+\log_2 n \approx 1+3.322\log_{10}n \approx 1+1.443\ln n\]
No exemplo acima, para \(n=80\), \(K=\lceil 7.32\rceil=8\)
Como se pode verificar, o histograma apenas tem 6 classes, em vez de 8, pois o R, por motivos estéticos e práticos, arredondou os limites das classes a múltiplos de 5 unidades.
Embora o algoritmo automático seja satisfatório na maior parte das situações, pode haver necessidade de ajustar os intervalos de cada classe. A forma de o fazer é fornecer o argumento breaks, que pode ter vários formatos.
O código que se segue produz a Figura 12.2 e ilustra as várias formas de fornecer o argumento breaks.
Resulta na Figura 12.2 (a) e é o mesmo que especificar breaks = "Sturges ou breaks =8.
2
Também resulta na Figura 12.2 (a) e é o mesmo que especificar breaks =6
3
Resulta na Figura 12.2 (b), tendo-se especificado o número de classes diretamente.
4
Também resulta na Figura 12.2 (b), tendo-se especificado o número de classes através de uma função, myRule1. No caso concreto, esta função devolve 9 classes, pelo que é equivalente à anterior.
5
Resulta na Figura 12.2 (c), tendo-se fornecido um vetor com os 9 intervalos desejados.
6
Também resulta na Figura 12.2 (c), mas os intervalos são indicados fornecendo o nome de uma função, myRule2, que calcula os intervalos, sendo equivalente à anterior.
(a) Sem configurações (Sturges)
(b) Uma regra
(c) Número de classes
Figura 12.2: Diferentes formas de ajustar o número de classes
Importante
Note-se que nos casos 1 a 4, o número de classes é apenas uma sugestão, podendo o R respeitar ou não, pois vai tentar ajustar os limites das classes a números redondos. Caso seja fornecido um vetor com os intervalos, quer diretamente, quer através de uma função, o histograma será produzido de acordo com as classes definidas nesse vetor.
12.4 Outros ajustes
Para lá dos ajustes que é possível fazer em qualquer gráfico (títulos, eixos, escalas, etc.), a Tabela 12.1 lista alguns argumentos que se podem passar à função hist() para ajustar outros aspetos do histograma.
Tabela 12.1: Configuração de histogramas
Argumento
Elemento
freq = FALSE
Para utilizar as densidades, em vez das frequências, no eixo vertical
right = TRUE
Para fechar os intervalos das classes à direita, em vez de fechar à esquerda
plot = FALSE
O gráfico não é desenhado e a função apenas devolve a informação sobre as classes, o que é útil caso se necessite essa informação
labels =
Caso labels = TRUE, coloca o valor das contagens (ou densidades) no topo das barras. Caso se passe um vetor de texto, os elementos desse vetor serão colocados no topo das barras
col =, border =
Para especificar a cor e o bordo das barras
Na Figura 12.3 exemplifica-se a utilização de alguns dos argumentos apresentados e é construída pelo código que se segue.
Note-se que foi utilizada a função plot() à qual foi passado o objeto h. Este procedimento é equivalente a invocar hist(coin) e passar os restantes argumentos. De facto, tanto a função plot(), como a função hist(), nos bastidores, vão invocar o mesmo código para desenhar o histograma.
Nota
A função curve() serve para desenhar curvas definidas por funções de \(x\), neste caso, a linha vermelha da Figura 12.3. Sem entrar em detalhes, a função dnorm() produz uma curva de densidade conhecida, a curva Normal. Como se trata de uma função gráfica de alto nível, o argumento add = TRUE especifica que a curva deve ser acrescentada ao gráfico existente, ao invés de ser criado um novo gráfico.
Dinnes, J., Sharma, P., Berhane, S., Wyk, S. S. van, Nyaaba, N., Domen, J., Taylor, M., Cunningham, J., Davenport, C., Dittrich, S., Emperador, D., Hooft, L., Leeflang, M. M. G., McInnes, M. D. F., Spijker, R., Verbakel, Y., J, Takwoingi, Y., Taylor-Phillips, S., Van den Bruel, A., & Deeks, J. J. (2022). Rapid, point‐of‐care antigen tests for diagnosis of SARS‐CoV‐2 infection. Cochrane Database of Systematic Reviews, 7. https://doi.org/10.1002/14651858.CD013705.pub3
Guimarães, R. C., & Cabral, J. S. (2010). Estatística. Verlag Dashöfer Portugal.
Hyndman, R. J., & Athanasopoulos, G. (2021). Forecasting: principles and practice (3rd edition). OTexts. https://otexts.com/fpp3/
Lusinchi, D. (2012). «President» Landon and the 1936 Literary Digest Poll: Were Automobile and Telephone Owners to Blame? Social Science History, 36(1), 23–54. https://doi.org/10.1017/S014555320001035X
Mann, P. S. (2010). Introductory Statistics. John Wiley & Sons.