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.
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.
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
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)
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
Realize a análise e compare as conclusões obtidas nos dois casos experimentados:
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
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")
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.