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.
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.
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
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)
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 a análise e compare as conclusões obtidas nos dois casos experimentados:
boot, método BCa)Já realizado acima.
Resultado obtido: diferença = -0,171, 95% CI BCa [-0,348; 0,013].
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")
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]
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]
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.