Sobre Implicit Association Tests (IAT)

IAT: 0.15, 0.35, and 0.65 are considered small, medium, and large level of bias for individual scores.

Positive means bias towards arts / against Math.

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: 125
## Columns: 5
## $ session_id  <chr> "2410996", "2411208", "2411213", "2413016", "2413017", "24…
## $ referrer    <chr> "ufl", "ufl", "ufl", "ufl", "ufl", "ufl", "ufl", "ufl", "u…
## $ sex         <ord> m, f, f, f, f, f, f, f, f, f, m, f, m, f, m, f, f, m, f, m…
## $ d_art       <dbl> 0.86629314, 0.68168619, 0.92370419, 1.23406708, 0.04755330…
## $ 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))
## # A tibble: 2 × 2
##   sex    media
##   <ord>  <dbl>
## 1 m     0.0312
## 2 f     0.419
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.3877554

Comparação via ICs

Utilizando biblioteca de bootstraping

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.3877554
## $ bias      <dbl> -0.002554344
## $ std.error <dbl> 0.1147161
## $ conf.low  <dbl> -0.6021521
## $ conf.high <dbl> -0.1573474
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)

Para o caso da UFL, em média, as mulheres que participaram do experimento apresentaram uma tendência, medida pelo IAT, positiva e moderada às artes (média 0.419, desvio padrão 0.555, N = 94), cabe destacar o alto desvio padrão que indica que talvez a média não represente bem esta amostra. Diferentemente nos homens, em média, não parece haver preferência por nenhuma das áreas (média 0.031, desvio padrão 0.547, N = 31), observamos novamente um alto desvio padrão, que também indica que a média pode ser pouco representativa.

Houve portanto uma diferença entre homens e mulheres (diferença das médias -0.388, 95% CI [-0.602, -0.157]), mas cuja intensidade não pode ser dita com precisão uma vez que temos um intervalo de confiança que contém valores considerados médios e altos. Assim, os dados de nosso experimento apontam que mulheres tem uma maior associação com as artes que os homens, 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.

Utilizando bootstraping implementando (Simple Percentile Boostrap)

simple_percentile_bootstrap_ci <- function(data, metric_function, alpha = 0.05, n_bootstrap = 2000) {
  # Function to generate bootstrap samples
  bootstrap <- function(data, n) {
    indices <- sample(nrow(data), replace = TRUE, size = n)
    data %>% slice(indices)
  }
  
  # Bootstrap procedure
  bootstrap_results <-
    unlist(replicate(n_bootstrap, metric_function(bootstrap(data, nrow(data)))))
  
  # Calculate confidence intervals
  lower <- quantile(bootstrap_results, alpha / 2)
  upper <- quantile(bootstrap_results, 1 - alpha / 2)
  
  # Return confidence interval
  return(list(results = bootstrap_results, ci = c(lower, upper)))
}
diff_mf <- function(d) {
  agrupado <- d %>%
    group_by(sex) %>%
    summarise(media = mean(d_art))
  m <- agrupado %>% filter(sex == "m") %>% pull(media)
  f <- agrupado %>% filter(sex == "f") %>% pull(media)
  m - f
}
rb <- simple_percentile_bootstrap_ci(iat, diff_mf)
rb$ci
##       2.5%      97.5% 
## -0.6027690 -0.1646531

As conclusões anteriroes não mudam considerando o intervalo calculado manualmente 95% CI [-0.603, -0.165], os valores de ambos os extremos do intervalo são bem similares. O método do Simple Percentile Method foi escolhido porque é simples de implementar e interpretar, além de não presumir que os dados sigam uma distribuição normal, mas sim que a distribuição das amostras da estatística siga (o que é verdade pelo Teorema do Limite Central).