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.
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.
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
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)
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:
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 a análise e compare as conclusões obtidas nos dois casos experimentados:
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:
Com base nesses resultados, podemos observar que:
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:
Com base nesses resultados, podemos observar que:
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)
Método manual (BCa personalizado)
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.