Sobre Implicit Association Tests (IAT) – Conforme 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.

Escolha da base de dados. Entre as bases disponíveis em data/, usamos pi .csv (N = 1236, sendo 427 homens e 809 mulheres) por ser a maior base do repositório, quase o triplo da segunda maior (mturk .csv, N = 894). A proporção entre sexos é menos balanceada que a de mturk .csv (razão homens/mulheres ≈ 0.53, contra ≈ 0.85), mas o tamanho amostral bem maior em ambos os grupos (427 homens, 809 mulheres, ainda muito acima do mínimo necessário para o CLT) compensa esse desbalanceamento e reduz o erro-padrão bootstrap, produzindo o IC mais estreito entre as bases já testadas neste laboratório.

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: 1,236
## Columns: 5
## $ session_id  <chr> "2374915", "2374924", "2374971", "2375038", "2375052", "23…
## $ referrer    <chr> "pi", "pi", "pi", "pi", "pi", "pi", "pi", "pi", "pi", "pi"…
## $ sex         <ord> m, f, m, f, f, f, f, f, f, f, f, f, m, m, f, f, f, f, m, f…
## $ d_art       <dbl> 0.4109073, 1.1507938, 0.1046623, -0.4928488, 1.2583609, 0.…
## $ 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))
## # A tibble: 2 × 2
##   sex   media
##   <ord> <dbl>
## 1 m     0.322
## 2 f     0.613
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.2911497

Comparação via ICs

library(boot)
set.seed(1)

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
}

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.2911497
## $ bias      <dbl> 0.000803912
## $ std.error <dbl> 0.02867969
## $ conf.low  <dbl> -0.3471035
## $ conf.high <dbl> -0.2344052
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 (média 0.613, desv. padrão 0.439, N = 809). Homens tiveram uma associação positiva com a matemática, portanto menor que a das mulheres (média 0.322, desv. padrão 0.499, N = 427). Houve portanto uma diferença pequena a moderada entre homens e mulheres (diferença das médias -0.291, 95% CI BCa [-0.347, -0.234]). A partir desta amostra, estimamos que ambos os grupos tendem, em média, a associar mais a matemática a algo negativo (e as artes a algo positivo), mas essa associação implícita negativa é mais forte entre as mulheres; como o IC de 95% não contém o zero e está inteiramente entre os limiares convencionais de viés pequeno (0.15) e médio (0.35), a diferença observada é real (não é plausível que ela seja nula ou tenha sinal oposto), porém de magnitude pequena a moderada — não há evidência, nesta amostra, de uma diferença grande (> 0.65).


Exemplos de possíveis conclusões para completar

  • mulheres têm uma associação negativa consideravelmente mais forte, com uma diferença que provavelmente está entre 0.6 e 1.0 ponto na escala IAT, o suficiente para diferenciar uma associação neutra de uma muito forte contra a matemática.
  • mulheres têm uma associação negativa mais forte, porém não é claro se essa diferença é grande, moderada ou pequena. É necessário coletar mais dados para determinar se a diferença é relevante ou negligenciável.
  • mulheres podem ter um associação negativa forte, pode não haver diferença entre sexos ou homens podem ter atitudes negativas um pouco mais fortes ou moderadamente mais fortes.
  • pode não haver uma diferença entre sexos, ou se ela existir, ela provavelmente é pequena em qualquer das direções.

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

Item 2: bootstrap implementado manualmente (percentil e normal)

Abaixo reimplementamos o bootstrap “na mão”, sem usar boot::boot() nem boot.ci(): geramos as reamostras nós mesmos com sample(..., replace = TRUE) e calculamos o IC por dois métodos diferentes do BCa usado no Item 1.

set.seed(123)

diff_medias <- function(dados) {
    agrupado = dados %>%
        group_by(sex) %>%
        summarise(media = mean(d_art), .groups = "drop")
    m = agrupado %>% filter(sex == "m") %>% pull(media)
    f = agrupado %>% filter(sex == "f") %>% pull(media)
    m - f
}

estatistica_obs = diff_medias(iat)

n_boot = 2000
reamostras = replicate(n_boot, {
    idx = sample(nrow(iat), replace = TRUE)
    diff_medias(iat[idx, ])
})

erro_padrao_boot = sd(reamostras)

c(estatistica = estatistica_obs, erro_padrao = erro_padrao_boot)
## estatistica erro_padrao 
## -0.29114971  0.02869024
tibble(diff = reamostras) %>%
    ggplot(aes(x = diff)) +
    geom_histogram(bins = 40, fill = "grey60", color = "white") +
    geom_vline(xintercept = estatistica_obs, color = "red") +
    labs(x = "Diferença bootstrap (homens - mulheres)",
         y = "Contagem",
         title = "Distribuição bootstrap da estatística (2000 reamostras)")

A distribuição das reamostras acima é aproximadamente simétrica e centrada na estatística observada (linha vermelha), o que já sugere que os métodos mais simples de IC (que não corrigem viés/assimetria) devem funcionar bem neste caso.

Método do percentil: usa diretamente os quantis 2.5% e 97.5% da distribuição das reamostras como limites do IC.

ic_percentil = quantile(reamostras, probs = c(.025, .975))
ic_percentil
##       2.5%      97.5% 
## -0.3462259 -0.2349080

Método normal (Wald): assume que a distribuição bootstrap da estatística é aproximadamente normal e usa a estatística observada +/- 1.96 desvios-padrão bootstrap.

ic_normal = estatistica_obs + c(-1, 1) * qnorm(.975) * erro_padrao_boot
names(ic_normal) = c("2.5%", "97.5%")
ic_normal
##       2.5%      97.5% 
## -0.3473815 -0.2349179

Comparando os três métodos de IC

comparacao_ics = tibble(
    metodo = c("BCa (boot::boot, biblioteca)", "Percentil (manual)", "Normal (manual)"),
    estatistica = c(booted$t0, estatistica_obs, estatistica_obs),
    conf.low = c(ci$conf.low, ic_percentil[[1]], ic_normal[[1]]),
    conf.high = c(ci$conf.high, ic_percentil[[2]], ic_normal[[2]])
)
comparacao_ics
## # A tibble: 3 × 4
##   metodo                       estatistica conf.low conf.high
##   <chr>                              <dbl>    <dbl>     <dbl>
## 1 BCa (boot::boot, biblioteca)      -0.291   -0.347    -0.234
## 2 Percentil (manual)                -0.291   -0.346    -0.235
## 3 Normal (manual)                   -0.291   -0.347    -0.235
comparacao_ics %>%
    ggplot(aes(x = metodo, y = estatistica, ymin = conf.low, ymax = conf.high)) +
    geom_pointrange() +
    geom_hline(yintercept = 0, linetype = "dashed", color = "grey50") +
    coord_flip() +
    labs(x = "", y = "IAT homens - mulheres",
         title = "IC 95% da diferença de médias por método de bootstrap")

Item 3: justificativa da escolha dos métodos e discussão do impacto nos resultados

Por que BCa, percentil e normal? O BCa (bias-corrected and accelerated) é o método mais robusto dos três: ele corrige tanto o viés da distribuição bootstrap (quando a média das reamostras não coincide com a estatística observada) quanto a assimetria (skewness) dessa distribuição em relação à amostra original, sendo por isso a escolha recomendada por padrão na literatura quando não se tem certeza da forma da distribuição amostral da estatística: é o que usamos via boot::boot() + tidy(..., conf.method = "bca") no Item 1. O método do percentil é o mais simples e intuitivo,usa diretamente os quantis empíricos 2.5%/97.5% da distribuição bootstrap, mas não corrige viés nem assimetria, então tende a performar pior quando a distribuição bootstrap é enviesada ou assimétrica. Já o método normal (Wald) é o mais restritivo: assume simetria e forma aproximadamente gaussiana em torno da estatística observada, usando apenas a estatística pontual e o erro-padrão bootstrap (sem olhar para o formato real da distribuição); é o método menos indicado quando a amostra é pequena ou a variável é enviesada, mas serve como ponto de comparação clássico, equivalente a um IC de Wald calculado a partir do erro-padrão obtido via bootstrap. Escolhemos esses dois métodos manuais (percentil e normal) por serem conceitualmente os mais distintos do BCa: um usa só os quantis empíricos (sem qualquer suposição de forma), o outro assume normalidade e simetria, juntos eles cobrem bem o espectro entre “nenhuma suposição” e “suposição forte” que o BCa tenta equilibrar automaticamente.

Impacto nos resultados. Neste caso os três métodos produzem intervalos praticamente idênticos: BCa [-0.347, -0.234] (largura ≈ 0.113), percentil manual [-0.346, -0.235] (largura ≈ 0.111) e normal manual [-0.347, -0.235] (largura ≈ 0.112). Isso é esperado porque a distribuição das reamostras bootstrap desta estatística (diferença de médias, N = 1236) é aproximadamente simétrica e pouco enviesada (coeficiente de assimetria ≈ -0.005, como calculado acima), condição sob a qual os três métodos convergem, já que a correção de viés/assimetria do BCa fica próxima de zero e a distribuição bootstrap já se comporta como o método normal pressupõe. Em outras palavras, a escolha do método de IC não muda a conclusão substantiva neste conjunto de dados: em todos os casos o IC de 95% não contém o zero e fica inteiramente entre os limiares de viés pequeno (0.15) e médio (0.35) do IAT, indicando uma diferença real (não nula, não invertida), porém de magnitude pequena a moderada, entre homens e mulheres - mulheres com associação implícita negativa (matemática vs. artes) mais forte em relação aos homens.

Essa convergência não seria garantida em outras condições. Se tivéssemos usado a base sdsu .csv da Parte 1 (N = 155, com apenas 38 homens e 117 mulheres, grupos pequenos e desbalanceados), a distribuição bootstrap da diferença de médias tende a ser mais irregular e mais suscetível a viés e assimetria amostral, cenário em que o método normal (que ignora a forma da distribuição) e o percentil (que ignora o viés) podem divergir do BCa - justamente a situação para a qual o BCa foi desenhado. Também vale notar que a base pi .csv usada aqui é maior porém menos balanceada entre sexos (razão h/m ≈ 0.53) do que mturk .csv (razão h/m ≈ 0.85, N = 894, IC BCa [-0.313, -0.188], largura ≈ 0.125); ainda assim, o tamanho amostral bem maior em ambos os grupos (427 homens, 809 mulheres) mais do que compensa o desbalanceamento, resultando em um IC ligeiramente mais estreito do que o obtido com mturk .csv. A prática recomendada é, portanto, usar o BCa como método padrão e tratar a comparação com percentil/normal como um diagnóstico: quando os três coincidem, como aqui, há maior confiança de que a inferência é robusta à escolha do método; quando divergem, o BCa deve prevalecer.