Gráficos de Intervalos
Nesta aula, vou mostrar como implementar um gráfico simples mas poderoso para indicar intervalos. Você poderá utilizar esse gráfico para explicar variação em seu conjunto de dados, demonstrar resultados de experimentos, entre muitas outras coisas.
Pra que servem intervalos?
Existem diversos tipos de intervalos de dados para diversas aplicações. Quando você quer resumir um conjunto de dados, você pode utilizar medidas de tendência central como média, mediana e moda e usar medidas de variação, como desvio padrão e variância. Outra forma de demonstrar variação é utilizar técnicas estatísticas e que descrevam a variação de seu conjunto de dados através de intervalos. Desta forma, quando utilizado em comparação, você pode entender intervalos mais estreitos ou mais largos, que indicarão menor ou maior variação, respectivamente. São também úteis para comparações estatísticas entre grupos, onde a visualização pode demonstrar sobreposição e possivelmente diferença (ou ausência de diferença) estatística entre grupos. Nesta aula de visualização, precisaremos de 3 dados principais para construir um intervalo:
- Uma medida de tendência central, que pode ser uma média.
- O limite superior do intervalo, que pode ter um intervalo de confiância ou percentis.
- O limite inferior do intervalo, conforme acima.
Exemplo com percentis:
Vamos utilizar os dados starwars para calcular um intervalo para a medida de altura dos personagens por gênero. Para esse intervalo, vamos usar o método dos percentis 25% e 75%:
library(tidyverse)
library(ggplot2)
data(starwars)
percentis = starwars %>%
filter(!is.na(height)) %>% # Para remover os dados faltantes
group_by(gender) %>%
summarise(
media = mean(height),
pct_25 = quantile(height, 0.25),
pct_75 = quantile(height, 0.75)
)
percentis## # A tibble: 3 x 4
## gender media pct_25 pct_75
## <chr> <dbl> <dbl> <dbl>
## 1 feminine 165. 162. 172
## 2 masculine 177. 171. 193
## 3 <NA> 181. 180. 183
Em seguida, vamos elaborar o gráfico com a média e os percentis 25 e 75:
percentis %>%
ggplot(aes(x = gender, y = media)) +
geom_bar(stat = "identity") +
geom_errorbar(aes(ymin = pct_25, ymax = pct_75), width = 0.2) # IntervaloAlternativamente, podemos usar uma visualização mais limpa: ao invés de usar a barra, colocamos apenas um ponto representando a média e a linha para mostrar o intervalo.
percentis %>%
ggplot(aes(x = gender, y = media)) +
geom_point() + # Para plotar um ponto no local da média
geom_pointrange(aes(ymin = pct_25, ymax = pct_75)) # IntervaloOu então misturar os dois: usar o ponto para a média e a barra de erros com as linhas horizontais:
percentis %>%
ggplot(aes(x = gender, y = media)) +
geom_point() +
geom_errorbar(aes(ymin = pct_25, ymax = pct_75), width = 0.2) # IntervaloExemplo completo de dados de experimento A/B
Um experimento ou teste A/B é um tipo de teste estatístico muito utilizado na área de tecnologia. Normalmente você tem um determinado tratamento (um novo produto ou recurso no aplicativo, ou uma campanha de marketing, ou algo semelhante) e você compara os efeitos desse tratamento com um grupo controle, que não terá essa experiência.
Através de um teste estatístico, você calcula o intervalo de confiança para a diferença de médias e caso esse intervalo possua o valor zero não há diferença estatística entre tratamento e controle, ou seja, não houve efeito do tratamento ou este é irrelevante para a experiência do usuário.
Normalmente, quando se realiza testes A/B, avalia-se um conjunto de métricas ao mesmo tempo para o mesmo experimento e no gráfico a seguir apresento uma visualização com dados teóricos com insights de impacto. Este conjunto de dados possuirá os resultados do teste A/B entre 5 métricas, com os intervalos de confiança para a diferença de médias para cada métrica:
# Criar os dados teóricos/fictícios:
dados = data.frame(
metricas = c("m1","m2","m3","m4","m5"),
limite_inferior = c(-3.5, -2.5, 1, 4, 8),
limite_superior = c(1, 1.5, 3, 7, 10),
significativo = c("não","não","sim","sim","sim")
)
dados## metricas limite_inferior limite_superior significativo
## 1 m1 -3.5 1.0 não
## 2 m2 -2.5 1.5 não
## 3 m3 1.0 3.0 sim
## 4 m4 4.0 7.0 sim
## 5 m5 8.0 10.0 sim
E, por fim, vamos construir a visualização:
dados %>%
ggplot(aes(x = metricas, col = significativo)) +
geom_errorbar(aes(ymin = limite_inferior, ymax = limite_superior), width = 0.2) +
geom_hline(yintercept = 0, linetype = "dotted") +
coord_flip() +
labs(
title = "Tratamento superou o controle para as métricas m3, m4 e m5",
subtitle = "IC 95% para a Diferença de Médias entre Tratamento x Controle",
x = "Métricas",
y = "Intervalo de Confiança 95%"
) +
theme_light() # Para adicionar um tema limpo ao gráficoEste é um gráfico de impacto, com rápida interpretação pelos seguintes motivos:
- O título do gráfico entrega o insight de forma simples e objetiva.
- As cores dos intervalos mostram quais são significativos e quais não são.
- A barra vertical pontilhada demarca bem o zero e sobrepõe as métricas não significativas.
- Os intervalos dão dimensão do tamanho do efeito do tratamento x controle pela dimensão sobre o eixo horizontal, onde o maior efeito observado foi na métrica m5.