Sobre Implicit Association Tests (IAT)

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: 155
## Columns: 5
## $ session_id  <chr> "2436706", "2436967", "2440429", "2440430", "2440431", "24…
## $ referrer    <chr> "sdsu", "sdsu", "sdsu", "sdsu", "sdsu", "sdsu", "sdsu", "s…
## $ sex         <ord> f, f, f, f, m, f, f, m, f, m, f, f, f, f, f, f, m, m, f, m…
## $ d_art       <dbl> 0.90444320, -0.47402625, 0.46840862, -0.02522412, 0.136813…
## $ 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.224
## 2 f     0.467

Calculando outras estatísticas

estatisticas <- iat %>% 
    group_by(sex) %>% 
    summarise(
        media = mean(d_art, na.rm = TRUE),
        desvio_padrao = sd(d_art, na.rm = TRUE),
        N = n()
    )

print(estatisticas)
## # A tibble: 2 × 4
##   sex   media desvio_padrao     N
##   <ord> <dbl>         <dbl> <int>
## 1 m     0.224         0.485    38
## 2 f     0.467         0.548   117
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.2430539

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.2430539
## $ bias      <dbl> -0.001042916
## $ std.error <dbl> 0.09368346
## $ conf.low  <dbl> -0.423254
## $ conf.high <dbl> -0.05969533
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 - Dataset 1

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ática negativa e média (média 0.4666898, desv. padrão 0.5475448, N = 117). Homens tiveram uma associação negativa e baixa com a matemática (média 0.2236359, desv. padrão 0.4850899, N = 38). Houve portanto uma considerável diferença entre homens e mulheres (diferença das médias -0.2430539, 95% CI [-0.4321136, -0.06442863]). A partir desta amostra, estimamos que mulheres têm uma associação negativa consideravelmente mais forte, com uma diferença que provavelmente está entre -0.064 e -0.432 ponto na escala IAT, o suficiente para diferenciar uma associação fraca de uma média contra a matemática.

Realize novas análises sobre IAT usando as abordagens a seguir

O segundo método de IC com bootstraps escolhido foi por meio do percentil, que utiliza a reamostragem para calcular a diferença das médias entre os dois grupos (feminino e masculino), construindo um IC para essa diferença que é determinado pelos percentis correspondentes ao nível de confiança escolhido. Para um intervalo de confiança de 95%, o IC é construído excluindo os 2,5% mais baixos e os 2,5% mais altos das estimativas, que são os 5% restantes dos dados nas caudas. Esse método foi escolhido por ser um método direto, simples de implementar e interpretar.

O IC obtido pelo segundo método foi [-0.43146917, -0.06811895], similar ao intervalo obtido pelo método da biblioteca [-0.4342267, -0.06599013], o que sugere consistência nos resultados.

bootstrap <- function(data, n_bootstrap, conf_level = 0.95) {
    diffs <- numeric(n_bootstrap)
    
    for (i in 1:n_bootstrap) {
        sample_indices <- sample(1:nrow(data), replace = TRUE)
        sample_data <- data[sample_indices, ]
        
        grouped <- sample_data %>%
            group_by(sex) %>%
            summarise(media = mean(d_art))
        
        m <- grouped %>% filter(sex == "m") %>% pull(media)
        f <- grouped %>% filter(sex == "f") %>% pull(media)
        
        diffs[i] <- m - f
    }
    
    alpha <- (1 - conf_level) / 2
    lower <- quantile(diffs, alpha)
    upper <- quantile(diffs, 1 - alpha)
    
    list(diffs = diffs, conf_int = c(lower, upper))
}

my_bootstrap <- bootstrap(iat, n_bootstrap = 2000)
my_bootstrap$conf_int
##        2.5%       97.5% 
## -0.42324785 -0.06113843
ci <- data.frame(
  statistic = my_bootstrap$diffs,
  conf.low = my_bootstrap$conf_int[1],
  conf.high = my_bootstrap$conf_int[2]
)
## Warning in data.frame(statistic = my_bootstrap$diffs, conf.low =
## my_bootstrap$conf_int[1], : row names were found from a short variable and have
## been discarded
ggplot(ci, aes(x = "", y = statistic)) +
  geom_point(size = 3, color = "gray") +
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high), width = 0.2, color = "black") +
  labs(x = NULL, y = "Diferença (IAT homens - mulheres)") +
  theme_minimal()

Dataset 2 - Análises

iat = read_csv(here::here(params$arquivo_dados_novo), 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)

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.400
## 2 f     0.570

Calculando outras estatísticas

estatisticas <- iat %>% 
    group_by(sex) %>% 
    summarise(
        media = mean(d_art, na.rm = TRUE),
        desvio_padrao = sd(d_art, na.rm = TRUE),
        N = n()
    )

print(estatisticas)
## # 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

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.001352723
## $ std.error <dbl> 0.09195494
## $ conf.low  <dbl> -0.3475196
## $ conf.high <dbl> 0.01647789
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 - Dataset 2

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ática negativa e média (média 0.5703113, desv. padrão 0.4229594, N = 65). Homens também tiveram uma associação negativa e média com a matemática (média 0.3997566, desv. padrão 0.5162869, N = 48). Houve, portanto, uma pequena diferença entre homens e mulheres (diferença das médias -0.1705546, 95% CI [-0.358355, 0.014633]). A partir desta amostra, estimamos que mulheres têm uma associação negativa um pouco mais forte com a matemática do que homens. No entanto, essa diferença não é grande e dado que o intervalo de confiança inclui zero, não podemos afirmar com certeza que existe uma diferença significativa entre os sexos.

Realize novas análises sobre IAT usando as abordagens a seguir

O segundo método de IC com bootstraps escolhido foi por meio do percentil, que utiliza a reamostragem para calcular a diferença das médias entre os dois grupos (feminino e masculino), construindo um IC para essa diferença que é determinado pelos percentis correspondentes ao nível de confiança escolhido. Para um intervalo de confiança de 95%, o IC é construído excluindo os 2,5% mais baixos e os 2,5% mais altos das estimativas, que são os 5% restantes dos dados nas caudas. Esse método foi escolhido por ser um método direto, simples de implementar e interpretar.

O IC obtido pelo segundo método foi [-0.34137595, 0.01034242], similar ao intervalo obtido pelo método da biblioteca [-0.3564613, 0.003911153], o que sugere consistência nos resultados. Ambos os métodos corroboram com a ideia de que a diferença entre as médias dos grupos (masculino e feminino) é pequena e pode não ser estatisticamente significativa.

bootstrap <- function(data, n_bootstrap, conf_level = 0.95) {
    diffs <- numeric(n_bootstrap)
    
    for (i in 1:n_bootstrap) {
        sample_indices <- sample(1:nrow(data), replace = TRUE)
        sample_data <- data[sample_indices, ]
        
        grouped <- sample_data %>%
            group_by(sex) %>%
            summarise(media = mean(d_art))
        
        m <- grouped %>% filter(sex == "m") %>% pull(media)
        f <- grouped %>% filter(sex == "f") %>% pull(media)
        
        diffs[i] <- m - f
    }
    
    alpha <- (1 - conf_level) / 2
    lower <- quantile(diffs, alpha)
    upper <- quantile(diffs, 1 - alpha)
    
    list(diffs = diffs, conf_int = c(lower, upper))
}

meu_bootstrap <- bootstrap(iat, n_bootstrap = 2000)
meu_bootstrap$conf_int
##         2.5%        97.5% 
## -0.345933987  0.006063954
ci <- data.frame(
  statistic = meu_bootstrap$diffs,
  conf.low = meu_bootstrap$conf_int[1],
  conf.high = meu_bootstrap$conf_int[2]
)
## Warning in data.frame(statistic = meu_bootstrap$diffs, conf.low =
## meu_bootstrap$conf_int[1], : row names were found from a short variable and
## have been discarded
ggplot(ci, aes(x = "", y = statistic)) +
  geom_point(size = 3, color = "grey") +
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high), width = 0.2, color = "black") +
  labs(x = NULL, y = "Diferença (IAT homens - mulheres)") +
  theme_minimal()

Comparando os dois datasets

No primeiro dataset, existe uma diferença significativa entre as associações implícitas de homens e mulheres com a matemática, enquanto no segundo dataset, essa diferença é menor e não significativa.