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: 97
## Columns: 5
## $ session_id  <chr> "2478532", "2478534", "2478570", "2478574", "2478584", "24…
## $ referrer    <chr> "help", "help", "help", "help", "help", "help", "help", "h…
## $ sex         <ord> f, f, f, m, f, f, f, f, f, m, f, m, f, m, f, f, f, f, m, f…
## $ d_art       <dbl> -0.04271131, 1.05059033, 0.69570986, -0.48594996, 0.032523…
## $ 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.259
## 2 f     0.341
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.08165773

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.08165773
## $ bias      <dbl> 0.001204211
## $ std.error <dbl> 0.09757527
## $ conf.low  <dbl> -0.2628837
## $ conf.high <dbl> 0.1150902
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 de intensidade média (média = 0.4666898, desvio padrão = 0.5475448, N = 117). Homens também apresentaram uma associação negativa com a matemática, menos intensa que a das mulheres (média = 0.2236359, desvio padrão = 0.4850899, N = 38). Houve, portanto, uma diferença considerável entre homens e mulheres (diferença das médias = -0.2430539, 95% IC BCa = [-0.4173037, -0.05494632]).

A partir desta amostra, estimamos que:

  • Mulheres têm uma associação negativa mais forte com a matemática. Entretanto, embora a diferença seja estatisticamente significativa nesta amostra, ainda não é possível concluir com clareza se ela é grande, moderada ou pequena. É necessário coletar mais dados para avaliar a relevância prática dessa diferença.

Além disso, é importante ressaltar que os resultados vieram de um grupo específico da pesquisa, e novas informações podem nos ajudar a confirmar ou ajustar essa estimativa.

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 bibliotece (exemplo acima)
library(boot)
library(ggplot2)

bootstrap_diff <- function(data, indices) {
  sample <- data[indices, ]
  mean(sample$d_art[sample$sex == "m"]) -
    mean(sample$d_art[sample$sex == "f"])
}

amostra_f <- iat %>% filter(sex == "f")
amostra_m <- iat %>% filter(sex == "m")

boot_obj <- boot(iat, statistic = bootstrap_diff, R = 1000)
boot.ci(boot_obj, type = "perc")
## BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
## Based on 1000 bootstrap replicates
## 
## CALL : 
## boot.ci(boot.out = boot_obj, type = "perc")
## 
## Intervals : 
## Level     Percentile     
## 95%   (-0.2720,  0.1093 )  
## Calculations and Intervals on Original Scale
intervalo_confianca <- boot.ci(boot_obj, type = "bca")

limite_inferior <- intervalo_confianca$bca[4]
limite_superior <- intervalo_confianca$bca[5]

bootstrap_resultados <- data.frame(Diferenca.das.Medias = boot_obj$t)

intervalo_confianca
## BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
## Based on 1000 bootstrap replicates
## 
## CALL : 
## boot.ci(boot.out = boot_obj, type = "bca")
## 
## Intervals : 
## Level       BCa          
## 95%   (-0.2696,  0.1097 )  
## Calculations and Intervals on Original Scale
ggplot(bootstrap_resultados, aes(x = Diferenca.das.Medias)) +
  geom_histogram(binwidth = 0.01, fill = "lightblue", color = "black") +
  geom_vline(xintercept = limite_inferior, linetype = "dashed", color = "red", linewidth  = 0.5) +
  geom_vline(xintercept = limite_superior, linetype = "dashed", color = "red", linewidth = 0.5) +
  labs(title = "Distribuição das Diferenças das Médias",
       x = "Diferença das Médias",
       y = "Frequência de reamostragens") +
  theme(plot.title = element_text(hjust = 0.5)) +
  scale_x_continuous(breaks = seq(0, 0.5, by = 0.1),
                     labels = seq(0, 0.5, by = 0.1))

Ao aplicar o método bootstrap utilizando a biblioteca boot, foi obtida uma estimativa para a diferença média entre os grupos (homens e mulheres) de aproximadamente -0.0817. O intervalo de confiança com correção BCa foi:

  • 95% IC BCa = [-0.2676, 0.0988]

Com base nesses resultados, podemos observar que:

  • A diferença média entre os grupos é estimada com base na média das diferenças obtidas nas reamostragens bootstrap.
  • O intervalo de confiança inclui o valor zero, o que sugere ausência de evidência estatística forte de diferença entre as médias nessa amostra.
  • O histograma gerado mostra a distribuição das diferenças das médias reamostradas. Ele permite visualizar a variabilidade das estimativas, que estão concentradas em torno de zero, reforçando a incerteza sobre a existência de uma diferença real entre os grupos.
  1. Bootstraps implementados por você (justifique o método de IC com bootstraps escolhido)
intervalo_diferenca_medias_bca_manual <- function(x, y, nivel_confianca = 0.95) {
  diff_medias <- mean(x) - mean(y)

  num_iterations <- 4000
  mean_diff_boot <- numeric(num_iterations)
  for (i in 1:num_iterations) {
    bootstrap_sample_f <- sample(x, replace = TRUE)
    bootstrap_sample_m <- sample(y, replace = TRUE)
    mean_diff_boot[i] <- mean(bootstrap_sample_f) - mean(bootstrap_sample_m)
  }

  orig_stat <- diff_medias
  bias_est <- mean(mean_diff_boot) - orig_stat
  acceleration <- sum((mean_diff_boot - mean(mean_diff_boot))^3) / (6 * (sum((mean_diff_boot - mean(mean_diff_boot))^2)^(3/2)))
  accel_adjust <- 1 / (1 + acceleration * bias_est)

  quantile_alpha <- quantile(mean_diff_boot, c((1 - nivel_confianca) / 2, (1 + nivel_confianca) / 2))
  limite_inferior <- 2 * orig_stat - quantile_alpha[2]
  limite_superior <- 2 * orig_stat - quantile_alpha[1]

  return(list(
    diferenca_medias = diff_medias,
    limite_inferior = limite_inferior,
    limite_superior = limite_superior,
    nivel_confianca = nivel_confianca,
    bootstrap_sample = mean_diff_boot
  ))
}

resultado_bca_manual <- intervalo_diferenca_medias_bca_manual(amostra_f$d_art, amostra_m$d_art)

cat("Diferença das médias:", resultado_bca_manual$diferenca_medias, "\n")
## Diferença das médias: 0.08165773
cat("Intervalo de Confiança BCa (", 100 * resultado_bca_manual$nivel_confianca, "%): [", resultado_bca_manual$limite_inferior, ",", resultado_bca_manual$limite_superior, "]\n")
## Intervalo de Confiança BCa ( 95 %): [ -0.112465 , 0.2675675 ]
bootstrap_df <- data.frame("Diferenca.das.Medias" = resultado_bca_manual$bootstrap_sample)
ggplot(bootstrap_df, aes(x = Diferenca.das.Medias)) +
  geom_histogram(binwidth = 0.01, fill = "lightblue", color = "black") +
  geom_vline(xintercept = resultado_bca_manual$limite_inferior, linetype = "dashed", color = "red", linewidth = 0.5) +
  geom_vline(xintercept = resultado_bca_manual$limite_superior, linetype = "dashed", color = "red", linewidth = 0.5) +
  labs(title = "Distribuição das Diferenças das Médias (BCa)",
       x = "Diferença das Médias",
       y = "Frequência de reamostragens") +
  theme(plot.title = element_text(hjust = 0.5)) +
  scale_x_continuous(breaks = seq(0, 0.5, by = 0.1),
                     labels = seq(0, 0.5, by = 0.1))

Ao aplicar o bootstrap manualmente, foi utilizada uma função própria para gerar o intervalo de confiança BCa. Os resultados obtidos foram:

  • Diferença das médias = 0.08165773
  • 95% IC BCa = [-0.1046347, 0.2738057]

Com base nesses resultados, podemos observar que:

  • O histograma das diferenças das médias geradas manualmente apresentou uma distribuição simétrica em torno da média.
  • As linhas tracejadas representando o IC mostram que grande parte das reamostragens resulta em diferenças próximas de zero.
  • O intervalo inclui o valor nulo (zero), sugerindo que a diferença observada pode ser atribuída à variação amostral.

Justificativa: O método bootstrap BCa é uma das técnicas mais robustas para calcular intervalos de confiança de maneira não paramétrica. Ele corrige distorções e assimetria na distribuição amostral da estatística de interesse,garantindo estimativas mais precisas mesmo quando os dados fogem da normalidade. Neste caso, foi implementado manualmente, sem o uso direto de bibliotecas como boot, o que permite maior controle e compreensão do processo. Isso é especialmente útil para situações onde a normalidade não pode ser assumida e os tamanhos dos grupos são diferentes.Assim, pode-se obter resultados sem sacrificar a clareza ou o controle sobre as etapas do método.

Comparação entre os dois métodos

Método com biblioteca (boot)

  • Intervalo: [-0.2676, 0.0988]
  • Estimativa: -0.0817

Método manual (BCa personalizado)

  • Intervalo: [-0.1046, 0.2738]
  • Estimativa: 0.0816

Para comparar a diferença entre as médias das duas amostras (mulheres e homens), foi utilizado o intervalo de confiança com método BCa, com biblioteca e de forma manual.

Foi escolhido o método BCa por ser uma técnica robusta e flexível, apropriada quando os dados não seguem uma distribuição normal ou quando existe uma diferença no tamanho dos grupos. Ele corrige o viés da estimativa e incorpora aceleração, permitindo uma maior precisão, mesmo que em distribuições assimétricas.

Implementar o BCa manualmente trouxe maior controle sobre o processo e permitiu visualizar mais claramente os efeitos do viés e da variabilidade amostral. Apesar de que ambos os métodos apresentem intervalos de confiança que incluem o zero, sugerindo ausência de evidência estatística robusta de diferença significativa entre os grupos, as estimativas centrais obtidas apontam em direções opostas, uma negativa e outra positiva. Isso reforça que, nesta amostra, os dados são inconclusivos quanto à existência e direção da diferença, sendo recomendada a coleta de mais dados para uma estimativa mais precisa.