Sobre Implicit Association Tests (IAT) – Olhe o README do repositório.

IAT: 0.15, 0.35, and 0.65 are considered small, medium, and large levels of bias for individual scores. Positive means bias towards arts / against Math.

Exemplo de análise de uma replicação

iat = read_csv(here::here(params$arquivo_dados), col_types = "cccdc")
iat = iat %>% 
    mutate(sex = factor(sex, levels = c("m", "f"), ordered = TRUE))
glimpse(iat)
## Rows: 113
## Columns: 5
## $ session_id  <chr> "2401243", "2401244", "2401246", "2401249", "2401250", "24…
## $ referrer    <chr> "brasilia", "brasilia", "brasilia", "brasilia", "brasilia"…
## $ sex         <ord> m, m, f, f, f, m, f, m, m, f, f, f, f, f, m, m, f, m, f, m…
## $ d_art       <dbl> 0.1480913, 0.6285349, 0.4977736, 0.3999447, 0.8314632, 1.1…
## $ iat_exclude <chr> "Include", "Include", "Include", "Include", "Include", "In…
iat %>%
    ggplot(aes(x = d_art, fill = sex, color = sex)) +
    geom_histogram(binwidth = .2, alpha = .4) +
    geom_rug() +
    facet_grid(sex ~ ., scales = "free_y") + 
    theme(legend.position = "None")

iat %>% 
    ggplot(aes(x = sex, y = d_art)) + 
    geom_quasirandom(width = .1)

iat %>% 
    ggplot(aes(x = sex, y = d_art)) + 
    geom_quasirandom(width = .1) + 
    stat_summary(geom = "point", fun.y = "mean", color = "red", size = 5)
## Warning: The `fun.y` argument of `stat_summary()` is deprecated as of ggplot2 3.3.0.
## ℹ Please use the `fun` argument instead.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Qual a diferença na amostra
iat %>% 
    group_by(sex) %>% 
    summarise(media = mean(d_art), 
              desvio_padrao = sd(d_art), 
              n = n())
## # A tibble: 2 × 4
##   sex   media desvio_padrao     n
##   <ord> <dbl>         <dbl> <int>
## 1 m     0.400         0.516    48
## 2 f     0.570         0.423    65
agrupado = iat %>% 
        group_by(sex) %>% 
        summarise(media = mean(d_art))
    m = agrupado %>% filter(sex == "m") %>% pull(media)
    f = agrupado %>% filter(sex == "f") %>% pull(media)
m - f
## [1] -0.1705546

Comparação via ICs

library(boot)

theta <- function(d, i) {
    agrupado = d %>% 
        slice(i) %>% 
        group_by(sex) %>% 
        summarise(media = mean(d_art))
    m = agrupado %>% filter(sex == "m") %>% pull(media)
    f = agrupado %>% filter(sex == "f") %>% pull(media)
    m - f
}

set.seed(42)
booted <- boot(data = iat, 
               statistic = theta, 
               R = 2000)

ci = tidy(booted, 
          conf.level = .95,
          conf.method = "bca",
          conf.int = TRUE)

glimpse(ci)
## Rows: 1
## Columns: 5
## $ statistic <dbl> -0.1705546
## $ bias      <dbl> 0.001507328
## $ std.error <dbl> 0.09038118
## $ conf.low  <dbl> -0.3483672
## $ conf.high <dbl> 0.01347443
ci %>%
    ggplot(aes(
        x = "",
        y = statistic,
        ymin = conf.low,
        ymax = conf.high
    )) +
    geom_pointrange() +
    geom_point(size = 3) + 
    labs(x = "Diferença", 
         y = "IAT homens - mulheres")

p1 = iat %>% 
    ggplot(aes(x = sex, y = d_art)) +
    geom_quasirandom(width = .1) + 
    stat_summary(geom = "point", fun.y = "mean", color = "red", size = 5)

p2 = ci %>%
    ggplot(aes(
        x = "",
        y = statistic,
        ymin = conf.low,
        ymax = conf.high
    )) +
    geom_pointrange() +
    geom_point(size = 3) + 
    ylim(-1, 1) + 
    labs(x = "Diferença", 
         y = "IAT homens - mulheres")

grid.arrange(p1, p2, ncol = 2)

Atividade

Preencha os resultados e conclusões abaixo

Em média, as mulheres que participaram do experimento tiveram uma associação implícita (medida pelo IAT) com a matemárica positiva e média, próxima de forte (média 0,570, desv. padrão 0,423, N = 65). Homens tiveram uma associação positiva com a matemática, portanto menor que a das mulheres (média 0,400, desv. padrão 0,516, N = 48). Houve portanto uma pequena a considerável diferença entre homens e mulheres (diferença das médias homens - mulheres = -0,171, 95% CI [-0,348; 0,013]). A partir desta amostra, estimamos que mulheres têm uma associação negativa (viés contra matemática) mais forte do que a dos homens, porém não é claro se essa diferença é grande, moderada ou pequena, o intervalo de confiança vai de uma diferença considerável (-0,35, próxima do limiar que separa uma associação “pequena” de uma “média” na escala IAT) até um valor bem próximo de zero (0,01), quase tocando a possibilidade de não haver diferença entre os sexos (ou até os homens terem viés levemente maior). Seria necessário coletar mais dados para reduzir essa incerteza e determinar com mais confiança o tamanho real da diferença.

Realize novas análises sobre IAT usando as abordagens a seguir

Realize a análise e compare as conclusões obtidas nos dois casos experimentados:

  1. bootstraps a partir de uma biblioteca (exemplo acima)
  2. bootstraps implementados por você utilizando pelo menos dois outros métodos de IC com bootstrap
  3. justifique e escolha dos métodos e discuta / explique caso exista impacto nos resultados

1. Bootstrap via biblioteca (boot, método BCa)

Já realizado acima.

Resultado obtido: diferença = -0,171, 95% CI BCa [-0,348; 0,013].

2. Bootstraps implementados manualmente

Abaixo implementamos, manualmente, a reamostragem bootstrap e dois métodos distintos de construção do intervalo de confiança a partir dela: o método percentil e o método básico (pivotal).

m_vals = iat %>% filter(sex == "m") %>% pull(d_art)
f_vals = iat %>% filter(sex == "f") %>% pull(d_art)

n_m = length(m_vals)
n_f = length(f_vals)

diff_obs = mean(m_vals) - mean(f_vals)
diff_obs
## [1] -0.1705546
set.seed(42)
R_reps = 2000

diffs_boot = replicate(R_reps, {
    bm = sample(m_vals, n_m, replace = TRUE)
    bf = sample(f_vals, n_f, replace = TRUE)
    mean(bm) - mean(bf)
})

tibble(diferenca = diffs_boot) %>% 
    ggplot(aes(x = diferenca)) + 
    geom_histogram(binwidth = .02, fill = "steelblue", alpha = .6) +
    geom_vline(xintercept = diff_obs, color = "red") +
    labs(title = "Distribuição bootstrap da diferença (m - f)",
         x = "Diferença de médias (bootstrap)",
         y = "Contagem")

2.1 Método Percentil

O método percentil usa diretamente os percentis 2,5% e 97,5% da distribuição bootstrap das réplicas como limites do intervalo. É o método mais simples e intuitivo, mas assume que a distribuição bootstrap é uma boa aproximação da distribuição amostral da estatística (sem correções de viés/assimetria).

ci_percentil = quantile(diffs_boot, c(.025, .975))
ci_percentil
##         2.5%        97.5% 
## -0.347391524  0.004142901

95% CI (Percentil): [-0.347; 0.004]

2.2 Método Básico (Pivotal)

O método básico (ou pivotal) funciona de forma quase oposta ao percentil, em vez de usar diretamente os valores simulados pelo bootstrap, ele reflete esses valores para o lado oposto da estimativa observada. Essa inversão faz com que o método corrija melhor casos em que a distribuição bootstrap é assimétrica.

ci_basico = 2 * diff_obs - quantile(diffs_boot, c(.975, .025))
ci_basico
##        97.5%         2.5% 
## -0.345252129  0.006282295

95% CI (Básico/Pivotal): [-0.345; 0.006]

3. Comparando os três métodos

comparacao = tibble(
    metodo = c("BCa", "Percentil", "Básico/Pivotal"),
    estimativa = c(ci$statistic, diff_obs, diff_obs),
    ic_inferior = c(ci$conf.low, ci_percentil[1], ci_basico[1]),
    ic_superior = c(ci$conf.high, ci_percentil[2], ci_basico[2])
)

comparacao
## # A tibble: 3 × 4
##   metodo         estimativa ic_inferior ic_superior
##   <chr>               <dbl>       <dbl>       <dbl>
## 1 BCa                -0.171      -0.348     0.0135 
## 2 Percentil          -0.171      -0.347     0.00414
## 3 Básico/Pivotal     -0.171      -0.345     0.00628
comparacao %>% 
    ggplot(aes(x = metodo, y = estimativa, ymin = ic_inferior, ymax = ic_superior)) +
    geom_pointrange() +
    geom_hline(yintercept = 0, linetype = "dashed", color = "gray40") +
    coord_flip() +
    labs(title = "Comparação dos ICs por método de bootstrap",
         x = "Método",
         y = "Diferença IAT (homens - mulheres)")

Discussão:

Os três métodos (BCa via biblioteca, Percentil e Básico/Pivotal) produziram intervalos de confiança muito semelhantes entre si, todos centrados na estimativa de -0,171 para a diferença entre homens e mulheres. O método BCa resultou em IC95% [-0,348; 0,013], o método Percentil em [-0,347; 0,004] e o método Básico/Pivotal em [-0,345; 0,006]. As pequenas diferenças entre os limites dos intervalos são esperadas, pois cada método utiliza uma forma distinta de construir o intervalo de confiança a partir das reamostragens bootstrap. Como a distribuição bootstrap da diferença de médias é aproximadamente simétrica e apresenta pouco viés, os três métodos convergiram para resultados bastante próximos.

Em termos práticos, a escolha do método (Percentil, Básico/Pivotal ou BCa) não alterou a conclusão do estudo. Em todos os casos, o intervalo de confiança de 95% inclui o valor zero, indicando que, embora a estimativa pontual sugira que as mulheres apresentem maior viés implícito contra matemática do que os homens, não há evidência estatística suficiente para afirmar que essa diferença exista na população. Os métodos Percentil e Básico foram úteis por sua simplicidade e transparência de implementação, enquanto o método BCa permanece o mais recomendado para relatórios finais por corrigir possíveis efeitos de viés e assimetria na distribuição bootstrap.