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))
## # A tibble: 2 × 2
##   sex   media
##   <ord> <dbl>
## 1 m     0.400
## 2 f     0.570
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

Tamanho da amostra e desvio padrão por sexo

iat %>% 
    group_by(sex) %>% 
    summarise(N = n(), desvio_padrao = sd(d_art))
## # A tibble: 2 × 3
##   sex       N desvio_padrao
##   <ord> <int>         <dbl>
## 1 m        48         0.516
## 2 f        65         0.423

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.001487529
## $ std.error <dbl> 0.09100328
## $ conf.low  <dbl> -0.3510752
## $ conf.high <dbl> 0.00253288
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

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.570, desvio padrão = 0.422, N = 65). Homens tiveram uma associação negativa com a matemática, com uma média = 0.399. Portanto, homens tiveram uma associação menor que a das mulheres (média = 0.399, desvio padrão = 0.516, N = 48). Houve portanto uma pequena diferença entre homens e mulheres (diferença das médias de -0.17, 95% CI [-0.347, 0.014]), com a amostra de 113 pessoas (base escolhida: BRasilia). Como IC inclui zero, não podemos concluir com 95% de confiança que há uma diferença estatisticamente significativa entre as pontuações dos homens e das mulheres. Portanto, é necessário coletar mais dados para determinar se a diferença é relevante ou negligenciável.

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

Realize a análise e compare as conclusões obtidas nos dois casos experimentados:

  1. bootstraps a partir de uma biblioteca (exemplo acima)
  2. bootstraps implementados por você (justifique o método de IC com bootstraps escolhido)

Bootstrap escolhido implementado

library(rsample)
library(dplyr)

set.seed(123)

calculo_diff <- function(data, n) {
  boot_samples <- replicate(n, {
    sample_data <- data[sample(1:nrow(data), replace = TRUE), ]
    m_mean <- mean(sample_data$d_art[sample_data$sex == "m"])
    f_mean <- mean(sample_data$d_art[sample_data$sex == "f"])
    m_mean - f_mean
  })
  return(boot_samples)
}

boot_diffs <- calculo_diff(iat, 2000)

# Calcular o intervalo de confiança
ci_lower <- quantile(boot_diffs, 0.025)
ci_upper <- quantile(boot_diffs, 0.975)

# Calcular a média das diferenças de médias
mean_diff <- mean(boot_diffs)

# Criar um data frame com os resultados
results <- data.frame(mean_diff = mean_diff,
  ci_lower = ci_lower,
  ci_upper = ci_upper)

# Exibir os resultados
print(results)
##       mean_diff  ci_lower    ci_upper
## 2.5% -0.1699463 -0.346301 0.004294935

Intervalo de Confiança

Visualiza a diferença média e os intervalos de confiança (IC) obtidos manualmente.

point_ci_plot <- ggplot() +
  geom_pointrange(aes(x = 1, y = mean_diff, ymin = ci_lower, ymax = ci_upper), size = 1.5) +
  geom_point(aes(x = 1, y = mean_diff), color = "red", size = 3) +
  scale_x_continuous(breaks = NULL) +
  labs(title = "Diferença das Médias com Intervalo de Confiança",
       x = "Diferença das Médias",
       y = "IAT homens - mulheres") +
  theme_minimal()

print(point_ci_plot)

Comparação das Abordagens

Compara os resultados (diferença média e IC) obtidos pela implementação manual e pela biblioteca boot.

# Realizando a comparação entre as abordagens: com biblioteca boot e minha implementação
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 <- boot.ci(booted, type = "bca")

boot_results <- data.frame(
  method = "Biblioteca boot",
  mean_diff = booted$t0,
  ci_lower = ci$bca[4],
  ci_upper = ci$bca[5]
)

manual_results <- data.frame(
  method = "Implementação Manual",
  mean_diff = results$mean_diff,
  ci_lower = results$ci_lower,
  ci_upper = results$ci_upper
)

combinacao_results <- rbind(boot_results, manual_results)

comparison_plot <- ggplot(combinacao_results, aes(x = method, y = mean_diff)) +
  geom_pointrange(aes(ymin = ci_lower, ymax = ci_upper), size = 1.5) +
  geom_point(color = "red", size = 3) +
  labs(title = "Comparação das Abordagens com biblioteca boot e manual",
       x = "Método",
       y = "Diferença das Médias") +
  theme_minimal()

print(comparison_plot)

Para realizar a comparação, focarei nos seguintes atributos:

Precisão, Clareza da Interpretação dos resultados e Completude - englobando Flexibilidade e Implementação.

Como podemos ver pelo gráfico ambas as abordagens podem ser comparadas visualmente usando gráficos. Isso ajuda a visualizar a média das diferenças de médias e seus intervalos de confiança.

Precisão dos IC (Intervalos de Confiança):

Biblioteca boot utiliza métodos robustos como BCa e ajustam para viés e assimetria. Implementação Manual usa quantis empíricos simples, que podem não ser tão precisos ou robustos.

Completude: Sobre a implementação e Flexibilidade:

A função boot abstrai grande parte do trabalho, tornando a implementação mais limpa e menos propensa a erros. A implementação manual é mais direta e transparente, mas exige mais código e cuidado para evitar erros.

A Biblioteca boot oferece opções para métodos de IC e é fácil de usar com diferentes estatísticas. Implementação Manual oferece controle sobre o processo de bootstrap, mas a adição de novos métodos ou ajustes pode ser mais trabalhosa.

Interpretação dos resultados:

Ambas têm vantagens, podendo se adequar às necessidades do usuário. A biblioteca boot é mais conveniente e robusta para a maioria das aplicações, especialmente quando IC precisos são necessários. A implementação manual oferece mais controle, podendo ser útil para entender o processo de bootstrap ou para casos muito específicos onde é preciso um controle detalhado.

Resultados com boot: Diferença das médias: -0.1705546, IC: [-0.343360, 0.007183281]. Resultados sem boot: Diferença das médias: -0.1699463, IC: [-0.346301, 0.004294935].

Como podemos observar, elas mostraram uma pequena diferença nas associações implícitas com a matemática entre homens e mulheres. Contudo, os IC sugerem que a diferença pode não ser estatisticamente significativa.