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 every 8 hours.
## 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),
    desviopadrao = sd(d_art),
        N = n()
    )
## # A tibble: 2 × 4
##   sex   media desviopadrao     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
}

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.0003476165
## $ std.error <dbl> 0.09028029
## $ conf.low  <dbl> -0.3451162
## $ conf.high <dbl> 0.00438194
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)

Conclusão

Em média, as mulheres que participaram do experimento tiveram uma associação implícita (medida pelo IAT) com a matemática negativa e média (média 0.57 , desv. padrão 0.423 , N = 65). Homens tiveram uma associação positiva com a matemática, portanto maior que a das mulheres (média 0.40, desv. padrão 0.51, N = 48 ). Houve portanto uma pequena diferença entre homens e mulheres (diferença das médias -0170, 95% CI [-0,479, 0.009]). A partir desta amostra, estimamos que pode não haver uma diferença entre sexos, ou se ela existir, ela provavelmente é pequena em qualquer das direções.

A partir desses dados, podemos analisar algumas questões, como: eles representam apenas uma amostra, logo, não refletem esse caso de forma geral, pois com outra amostra, os resultados podem ser diferentes. É é possível entender que não é discrepante a aptidão com a matemática entre homens e mulheres. —

bootstrap

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…
set.seed(123)  


diff_means <- function(data) {
  agrupado = data %>% 
    group_by(sex) %>% 
    summarise(media = mean(d_art))
  m = agrupado %>% filter(sex == "m") %>% pull(media)
  f = agrupado %>% filter(sex == "f") %>% pull(media)
  return(m - f)
}

R = 2000


bootstrap_results <- numeric(R)


for (i in 1:R) {
  sample_data <- iat %>% sample_frac(1, replace = TRUE)
  bootstrap_results[i] <- diff_means(sample_data)
}

# Intervalos de confiança
ci_manual <- quantile(bootstrap_results, c(0.025, 0.975))
mean_diff_manual <- mean(bootstrap_results)
ci_manual
##         2.5%        97.5% 
## -0.346301011  0.004294935
ci_boot <- tidy(booted, 
                conf.level = .95,
                conf.method = "bca",
                conf.int = TRUE)

# Resultados
p1 <- ggplot(data.frame(bootstrap_results), aes(x = bootstrap_results)) +
  geom_histogram(binwidth = 0.03, fill = "blue", alpha = 0.7) +
  geom_vline(xintercept = ci_manual, color = "red", linetype = "dashed") +
  labs(title = "Histograma com IC BCa", x = "Diferença de médias(Bootstrap)", y = "Densidade")

p2 <- ggplot(data.frame(booted$t), aes(x = booted$t)) +
  geom_histogram(binwidth = 0.03, fill = "green", alpha = 0.7) +
  geom_vline(xintercept = ci_boot$conf.low, color = "red", linetype = "dashed") +
  geom_vline(xintercept = ci_boot$conf.high, color = "red", linetype = "dashed") +
  labs(title = "Histograma com IC percentil", x = "Diferença de médias(Bootstrap)", y = "Densidade")


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

Conclusão

Uso de métodos robustos e intervalos de confiança não enviesados e mais precisos.

Utilização do método percentil, considerado mais simples e fácil de entender.