As chamadas Nuvens de Chuva não apenas incluem as informações de distribuição de um Boxplot, mas também a distribuição dos valores brutos. Pois diferentes distribuições podem levar a um mesmo Boxplot. O exemplo a seguir é de um post de blog de Cédric Scherer, onde é explicado (em inglês) muito bem por que os Boxplots às vezes não são tão bons.
Temos um conjunto de dados fictício que resulta no seguinte Boxplot:
Portanto, à primeira vista, os dados parecem ser semelhantes com base nas estatísticas do Boxplot. Vamos adicionar agora os números de casos:
Embora o mesmo Boxplot seja gerado, o número de casos por grupo é muito diferente. Agora vamos adicionar os valores brutos (geom_point()
):
ggplot(
data,
aes(
x = group,
y = value
)
) +
geom_boxplot(fill = "grey92") +
geom_point(
size = 2,
alpha = .3,
position = position_jitter(
seed = 1,
width = .2
)
)
À primeira vista, já é evidente que a distribuição entre os grupos não é tão semelhante como os Boxplots podem ter sugerido.
Para incluir essas informações em um Raincloud-Plot, os dados brutos e a distribuição são plotados. Para isso, você precisa instalar e carregar a biblioteca ggdist
:
install.packages("ggdist")
library("ggdist")
Da biblioteca ggdist
, você utiliza a função stat_halfeye()
para exibir a distribuição. Vamos dar esse primeiro passo:
ggplot(data, aes(x = group, y = value)) +
## add half-violin from {ggdist} package
stat_halfeye(
## custom bandwidth
adjust = .5,
## adjust height
width = .6,
## move geom to the right
justification = -.2,
## remove slab interval
.width = 0,
point_colour = NA
) +
geom_boxplot(
width = .12,
## remove outliers
outlier.color = NA ## `outlier.shape = NA` works as well
)
Agora você vê a distribuição ao lado do Boxplot. Mas a informação dos pontos de dados brutos também foi muito útil para entender visualmente os dados. Para isso, você utiliza a função stat_dots()
de ggdist
.
ggplot(
data,
aes(
x = group,
y = value
)
) +
stat_halfeye(
adjust = .5,
width = .6,
justification = -.2,
.width = 0,
point_colour = NA
) +
geom_boxplot(
width = .12,
outlier.color = NA
) +
## Rohdatenpunkte hinzfügen
stat_dots(
# in welche Richtung die Punkt sich türmen sollen, probiere right einfach aus!
side = "left",
# leichtes Einrücken von geom_boxplot()
justification = 1.1,
# Größe der Punkte
binwidth = .25
)
Por último, você pode remover o white space limitando o eixo x:
ggplot(
data,
aes(
x = group,
y = value
)
) +
stat_halfeye(
adjust = .5,
width = .6,
justification = -.2,
.width = 0,
point_colour = NA
) +
geom_boxplot(
width = .12,
outlier.color = NA
) +
## Rohdatenpunkte hinzfügen
stat_dots(
# in welche Richtung die Punkt sich türmen sollen, probiere right einfach aus!
side = "left",
# leichtes Einrücken von geom_boxplot()
justification = 1.1,
# Größe der Punkte
binwidth = .25
) +
# Entferne white space
coord_cartesian(
xlim = c(
1.2,
NA
)
)
Quando você tem muitos pontos de dados e muitos grupos, a visualização com stat_dots()
às vezes pode ser confusa. Alternativamente, você pode usar: geom_halfpoint()
!
ggplot(
data,
aes(
x = group,
y = value
)
) +
stat_halfeye(
adjust = .5,
width = .6,
justification = -.2,
.width = 0,
point_colour = NA
) +
geom_boxplot(
width = .12,
outlier.color = NA
) +
geom_half_point(
# links ausgerichtet
side = "l",
## horizontale Linien anstatt Punkten
shape = 95,
# kein jittern
range_scale = 0,
size = 10,
alpha = .2
) +
# Entferne white space
coord_cartesian(
xlim = c(
1.2,
NA
)
)
Ou com pontos jitterizados:
ggplot(
data,
aes(
x = group,
y = value
)
) +
stat_halfeye(
adjust = .5,
width = .6,
justification = -.2,
.width = 0,
point_colour = NA
) +
geom_boxplot(
width = .12,
outlier.color = NA
) +
geom_half_point(
# Ausrichtung links
side = "l",
# jittering
range_scale = .4,
# Transparenz
alpha = .3
) +
coord_cartesian(
xlim = c(
1.2,
NA
)
)
Portanto, um Raincloud fornece uma visão muito melhor do que um Boxplot!