dados <- read_csv(
    here::here("data/participation-per-country.csv"),
    col_types = cols(
        .default = col_double(),
        site = col_character(),
        country = col_character(),
        geo = col_character(),
        four_regions = col_character(),
        eight_regions = col_character(),
        six_regions = col_character(),
        `World bank income group 2017` = col_character()
    )
) %>% 
    filter(usuarios > 200)

Estamos interessados na relação entre quanto as pessoas de diferentes países comentam em questões dos outros. A proporção das pessoas do país que comentou nas questões de outros está medido na variável comentaram_prop.

Considerando essa variável, queremos examinar a relação entre ela e o quão hierárquicas são as relações em um país (PDI). Queremos também levar em conta o quanto as pessoas daquele país têm acesso à Internet (Internet) e qual o tamanho da base de dados que detectamos daquele país (usuarios).

dados <-
  dados %>% select(
    cprop = comentaram_prop,
    pdi = PDI,
    internet = Internet,
    nuser = usuarios,
    region = six_regions
  )
dados <- dados %>% filter(if_all(everything(), \(x) ! is.na(x)))

Examinando essa relação

Faça uma visualização que usa os princípios de eficácia no projeto de visualizações para facilitar as comparações que você acha que são as mais importantes para entendermos esse contexto.

dados %>%
  ggplot(aes(
    x = pdi,
    y = cprop,
    color = internet,
    shape = nuser
  )) +
  geom_point(size = 2.5) +
  geom_abline(slope = 0.006, intercept = 0.05, linetype = "dotted") +
  geom_abline(slope = 0.006, intercept = -0.2, linetype = "dashed", linewidth = .25) +
  scale_color_stepsn(
    colours = turbo(8, direction = -1),
    breaks = c(0, 25, 50, 75, 100),
    limits = c(0, 100),
    labels = scales::number_format(suffix = "%")
  ) +
  scale_shape_binned(breaks = c(0, 2500, 5000, 7500, 25000), solid = F) +
  scale_y_continuous(labels = scales::percent, breaks = seq(0, 1, .05)) +
  labs(color = "% pop. com\ninternet",
       shape = "# usuários",
       x = "PDI",
       y = "% de usuários com comentários",
       title = "Comentários em posts do StackOverflow e hierarquia dos países")

É possível ver pelo gráfico acima que existe uma certa correlação linear entre PDI e a % de comentários, países com PDI mais altos tendem a ter menos comentários. Calculando a correlação de Pearson, temos um valor de -0.65, ou seja, uma correlação moderada.

É possível vermos ainda uma correlação positiva entre o acesso a internet e a % de comentários, países com mais acesso a internet tendem a ter mais comentários. As linhas no plot, separam-no em três regiões e é possível ver que os grupos de países nessas regiões são semelhantes na faixa de acesso à internet. Com o grupo mais a esquerda concentrando países com alto acesso a internet e as maiores recorrências de comentários, enquanto o mais a direita reúne os países com menor acesso e menor comentários. Correlação de Pearson: 0.62.

Quanto ao número de usuários este parece ter pouca correlação, tendo em vista que se apresenta disperso em todas as regiões do gráfico, o que é comprovado pelo valor da correlação de Pearson: 0.14. A correlação também é baixa nos métodos não lineares: Spearman (0.29) e Kendall (0.2). Sendo assim, o plot a seguir remove essa dimensão do plot, uma vez que ela não tem tanta influência na relação e pode prejudicar a visualização.

dados %>%
  ggplot(aes(
    x = pdi,
    y = cprop,
    color = internet
  )) +
  geom_point(size = 2.5) +
  geom_abline(slope = 0.006, intercept = 0.05, linetype = "dotted") +
  geom_abline(slope = 0.006, intercept = -0.2, linetype = "dashed", linewidth = .25) +
  scale_color_stepsn(
    colours = turbo(8, direction = -1),
    breaks = c(0, 25, 50, 75, 100),
    limits = c(0, 100),
    labels = scales::number_format(suffix = "%")
  ) +
  scale_y_continuous(labels = scales::percent, breaks = seq(0, 1, .05)) +
  labs(color = "% pop. com\ninternet",
       shape = "# usuários",
       x = "PDI",
       y = "% de usuários com comentários",
       title = "Comentários em posts do StackOverflow e hierarquia dos países")

Outras formas de ver

Em seguida, faça 5 visualizações que usem as mesmas variáveis e também pontos, mas que sejam menos eficazes que a que você escolheu acima.

dados %>%
  mutate(faixa_internet = cut(
    internet,
    breaks = c(0, 25, 50, 75, 100),
    labels = c(
      "Quase nenhum acesso à internet",
      "Pouco acesso à internet",
      "Acesso moderado à internet",
      "Muito acesso à internet"
    )
  )) %>%
  ggplot(aes(
    x = pdi,
    y = cprop,
    size = nuser,
    color = nuser
  )) +
  geom_point(alpha = .7) +
  scale_color_binned(breaks = c(0, 2500, 5000, 7500, 25000), type = "viridis") +
  facet_wrap( ~ faixa_internet) +
  guides(size = "none") +
  labs(color = "# Usuários",
       x = "PDI",
       y = "% de usuários com comentários",
       title = "Comentários em posts do StackOverflow e hierarquia dos países",
       subtitle = "Ruim, pois dificulta visualizar a relação PDI vs % Com. nos eixos") +
  theme(plot.subtitle = element_text(color = "red"))

dados %>%
  ggplot(aes(
    x = pdi,
    y = cprop,
    size = internet,
    color = nuser
  )) +
  geom_point(alpha = .7) +
  scale_color_binned(breaks = c(0, 2500, 5000, 7500, 25000), type = "viridis") +
  labs(color = "# Usuários",
       x = "PDI",
       y = "% de usuários com comentários",
       size = "% pop. com\ninternet",
       title = "Comentários em posts do StackOverflow e hierarquia dos países",
       subtitle = "Ruim, pois o tamanho dos pontos é difícil de distinguir") +
  theme(plot.subtitle = element_text(color = "red"))

dados %>%
  ggplot(aes(
    x = pdi,
    y = cprop,
    color = internet,
    shape = nuser
  )) +
  geom_point(size = 2.5) +
  geom_abline(slope = 0.006, intercept = 0.05, linetype = "dotted") +
  geom_abline(slope = 0.006, intercept = -0.2, linetype = "dashed", linewidth = .25) +
  scale_shape_binned(breaks = c(0, 2500, 5000, 7500, 25000), solid = F) +
  scale_y_continuous(labels = scales::percent, breaks = seq(0, 1, .05)) +
  labs(color = "% pop. com\ninternet",
       shape = "# usuários",
       x = "PDI",
       y = "% de usuários com comentários",
       title = "Comentários em posts do StackOverflow e hierarquia dos países",
       subtitle = "Ruim, pois a escala gradiente na % de acesso a internet é ruim de distinguir") +
  theme(plot.subtitle = element_text(color = "red"))

dados %>%
  ggplot(aes(
    x = pdi,
    y = cprop,
    size = internet,
    shape = nuser
  )) +
  geom_point(alpha = .7) +
  scale_shape_binned(breaks = c(0, 2500, 5000, 7500, 25000)) +
  labs(shape = "# Usuários",
       x = "PDI",
       y = "% de usuários com comentários",
       size = "% pop. com\ninternet",
       title = "Comentários em posts do StackOverflow e hierarquia dos países",
       subtitle = "Ruim, pois os shapes de diferente tamanhos deixa a visualização poluída") +
  theme(plot.subtitle = element_text(color = "red"))

dados %>%
  ggplot(aes(
    x = internet,
    y = cprop,
    size = pdi,
    color = nuser
  )) +
  geom_point(alpha = .7) +
  scale_color_binned(breaks = c(0, 2500, 5000, 7500, 25000), type = "viridis") +
  labs(color = "# Usuários",
       size = "PDI",
       y = "% de usuários com comentários",
       x = "% pop. com internet",
       title = "Comentários em posts do StackOverflow e hierarquia dos países",
       subtitle = "Ruim, pois é difícil distinguir o tamanho dos pontos para o PDI") +
  theme(plot.subtitle = element_text(color = "red"))

Bônus

Inclua o continente dos países (six_regions) na visualização.