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.
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.
iat %>%
group_by(sex) %>%
summarise(media = mean(d_art), `Desvio Padrão` = sd(d_art), N = n())
## # A tibble: 2 × 4
## sex media `Desvio Padrão` 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
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.001386363
## $ std.error <dbl> 0.09508192
## $ conf.low <dbl> -0.4431532
## $ conf.high <dbl> -0.06070472
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 média (média = 0.4666898, desvio padrão = 0.5475448, N = 117). Homens tiveram uma associação negativa com a matemática, portanto menor que a das mulheres (média = 0.2236359, desvio 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.4173037, -0.05494632]). A partir desta amostra, estimamos que:
Além disso, é importante observar que os resultados são baseados em uma amostra específica e que coletar mais dados poderia ajudar a confirmar ou refutar essa estimativa.
library(ggplot2)
library(boot)
# Função para calcular a diferença das médias entre duas amostras
diferenca_medias <- function(data, indices) {
x <- data[indices, "d_art"][data[indices, "sex"] == "f"]
y <- data[indices, "d_art"][data[indices, "sex"] == "m"]
mean(x) - mean(y)
}
# Amostras
amostra_f <- iat %>% filter(sex == "f")
amostra_m <- iat %>% filter(sex == "m")
# Número de iterações bootstrap
num_iterations <- 4000
# Realiza o bootstrap
iat <- na.omit(iat)
boot_resultados <- boot(data = iat, statistic = diferenca_medias, R = num_iterations)
# Cálculo dos limites do intervalo de confiança
intervalo_confianca <- boot.ci(boot_resultados, type = "bca")
# Obtém os limites inferiores e superiores do intervalo de confiança
limite_inferior <- intervalo_confianca$bca[4]
limite_superior <- intervalo_confianca$bca[5]
# Converter os resultados do bootstrap para um data frame
bootstrap_resultados <- data.frame(Diferenca.das.Medias = boot_resultados$t)
intervalo_confianca
## BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
## Based on 4000 bootstrap replicates
##
## CALL :
## boot.ci(boot.out = boot_resultados, type = "bca")
##
## Intervals :
## Level BCa
## 95% ( 0.0665, 0.4313 )
## Calculations and Intervals on Original Scale
# Gerar o histograma utilizando ggplot2
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", size = 0.5) +
geom_vline(xintercept = limite_superior, linetype = "dashed", color = "red", size = 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))
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Com base nesses resultados:
Para comparar a diferença entre as médias das duas amostras (mulheres e homens), utilizaremos o Intervalo de Confiança para a Diferença com método BCA. Eu escolhi o método de intervalo de confiança com bootstraps para a diferença das médias utilizando a técnica de correção de viés e aceleração (BCa), devido à sua robustez e flexibilidade. Optei por esse método porque os dados não seguem uma distribuição específica, e o BCa não faz suposições sobre a distribuição subjacente. Além disso, a correção de viés e a incorporação da aceleração no BCa permitem obter estimativas mais precisas da diferença das médias, levando em conta a assimetria e reduzindo o impacto de outliers. Portanto, o método BCa é a escolha adequada para estimar o intervalo de confiança da diferença das médias,
# Função para calcular o intervalo de confiança para a diferença das médias usando o método BCa manualmente
intervalo_diferenca_medias_bca_manual <- function(x, y, nivel_confianca = 0.95) {
diff_medias <- mean(x) - mean(y)
# Estatísticas bootstrap
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)
}
# Estatística bootstrap original
orig_stat <- diff_medias
# Estimativa do viés
bias_est <- mean(mean_diff_boot) - orig_stat
# Aceleração
acceleration <- sum((mean_diff_boot - mean(mean_diff_boot))^3) / (6 * sum((mean_diff_boot - mean(mean_diff_boot))^2)^(3/2))
# Parâmetro de aceleração ajustado
accel_adjust <- 1 / (1 + acceleration * bias_est)
# Limites do intervalo de confiança ajustados
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))
}
# Cálculo do intervalo de confiança para a diferença das médias usando o método BCa manualmente
resultado_bca_manual <- intervalo_diferenca_medias_bca_manual(amostra_f$d_art, amostra_m$d_art)
# Exibir os resultados
cat("Diferença das médias:", resultado_bca_manual$diferenca_medias, "\n")
## Diferença das médias: 0.2430539
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.06052342 , 0.4183544 ]
# Criação do data frame com os resultados do bootstrap
bootstrap_df <- data.frame("Diferenca.das.Medias" = resultado_bca_manual$bootstrap_sample)
# Gerar o histograma utilizando ggplot2 e incluir o intervalo de confiança
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", size = 0.5) +
geom_vline(xintercept = resultado_bca_manual$limite_superior, linetype = "dashed", color = "red", size = 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, podemos estimar de que as duas amostras tendem a apresentar médias próximas. A distribuição dos erros amostrais obtida por meio do bootstrap mostra que a maioria das diferenças das médias está concentrada em torno de um valor central, indicando uma menor variação. Isso sugere que a diferença entre as médias das duas amostras é consistente e não se desvia significativamente do valor central observado.