Este relatório apresenta uma análise detalhada dos dados de um experimento replicado sobre as diferenças de gênero nas atitudes implícitas em relação à matemática. Os dados utilizados são provenientes de um estudo de Teste de Associação Implícita (IAT) replicado em múltiplos laboratórios. O objetivo é explorar as associações implícitas com a matemática entre homens e mulheres e quantificar a magnitude de quaisquer diferenças observadas, utilizando métodos de inferência estatística, como o bootstrap.
# Carregando os dados
iat = read_csv("C:/Users/itagi/OneDrive/Desktop/FPCC2-4/fpcc2-lab-4-K010TE/data/sdsu .csv", col_types = "cccdc")
iat = iat %>%
mutate(sex = factor(sex, levels = c("m", "f"), ordered = TRUE))
# Estatísticas descritivas por sexo
estatisticas = iat %>%
group_by(sex) %>%
summarise(
media = mean(d_art),
desvio_padrao = sd(d_art),
n = n()
)
# Calculando a diferença entre as médias
diferenca = estatisticas %>%
filter(sex == "m") %>%
pull(media) -
estatisticas %>%
filter(sex == "f") %>%
pull(media)
# Bootstrap para intervalo de confiança
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)
# Calculando valores para as conclusões
media_f = round(estatisticas$media[estatisticas$sex == "f"], 2)
dp_f = round(estatisticas$desvio_padrao[estatisticas$sex == "f"], 2)
n_f = estatisticas$n[estatisticas$sex == "f"]
media_m = round(estatisticas$media[estatisticas$sex == "m"], 2)
dp_m = round(estatisticas$desvio_padrao[estatisticas$sex == "m"], 2)
n_m = estatisticas$n[estatisticas$sex == "m"]
diff_medias = round(abs(diferenca), 2)
ci_low = round(ci$conf.low, 2)
ci_high = round(ci$conf.high, 2)
# Histograma por sexo
p1 = 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") +
labs(title = "Distribuição dos scores IAT por sexo",
x = "Score IAT",
y = "Frequência")
# Boxplot com pontos
p2 = iat %>%
ggplot(aes(x = sex, y = d_art)) +
geom_quasirandom(width = .1) +
stat_summary(geom = "point", fun.y = "mean", color = "red", size = 5) +
labs(title = "Distribuição dos scores IAT",
x = "Sexo",
y = "Score IAT")
# Intervalo de confiança da diferença
p3 = ci %>%
ggplot(aes(
x = "",
y = statistic,
ymin = conf.low,
ymax = conf.high
)) +
geom_pointrange() +
geom_point(size = 3) +
labs(title = "Intervalo de Confiança da Diferença",
x = "Diferença",
y = "IAT homens - mulheres")
grid.arrange(p1, p2, p3, ncol = 2)
# Exibindo as estatísticas calculadas
estatisticas
ci
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.47, desv. padrão 0.55, N = 117).
Homens tiveram uma associação negativa com a matemática, portanto menor que a das mulheres (média 0.22, desv. padrão 0.49, N = 38).
Houve portanto uma pequena diferença entre homens e mulheres (diferença das médias 0.24, 95% CI [-0.42, -0.06]).
A partir desta amostra, estimamos que mulheres têm uma associação negativa mais forte, porém não é claro se essa diferença é grande, moderada ou pequena. É necessário coletar mais dados para determinar se a diferença é relevante ou negligenciável.
Associação Negativa com a Matemática: Os scores
do IAT (d_art) são construídos de forma que valores
positivos indicam uma associação implícita mais forte entre conceitos de
arte e positividade (ou matemática e negatividade). Como tanto a média
das mulheres (0.47) quanto a dos homens (0.22) são valores positivos,
isso significa que ambos os grupos, em média, apresentaram uma
associação implícita negativa em relação à matemática. Ou seja, tendem a
associar matemática com negatividade e/ou arte com
positividade.
Magnitude da Associação nas Mulheres (Média): A média do score IAT para as mulheres foi de 0.47. De acordo com as diretrizes de interpretação para o IAT, um score de 0.15 é considerado um viés pequeno, 0.35 um viés médio e 0.65 um viés grande. Como 0.47 está entre 0.35 e 0.65, a associação negativa das mulheres com a matemática pode ser classificada como de intensidade média.
Magnitude da Associação nos Homens (Pequena): A média do score IAT para os homens foi de 0.22. Comparando com a mesma escala (0.15 pequeno, 0.35 médio), 0.22 está mais próximo de um viés pequeno. Isso indica que, embora também apresentem uma associação negativa com a matemática, essa associação é menos pronunciada do que a observada nas mulheres.
Diferença entre Homens e Mulheres (Pequena a Média e Estatisticamente Significativa): A diferença das médias (homens - mulheres) foi de -0.24. O sinal negativo indica que a média dos homens é menor (menos negativa/mais próxima de zero) que a das mulheres. O valor absoluto dessa diferença (0.24) sugere uma magnitude de efeito que se aproxima de um viés pequeno a médio na escala do IAT (0.15 para pequeno, 0.35 para médio). O Intervalo de Confiança de 95% para essa diferença foi de [-0.42, -0.06].
Conforme a análise inicial, utilizamos a função boot()
da biblioteca boot para gerar R = 2000
amostras bootstrap e calcular o intervalo de confiança de 95% para a
diferença das médias (homens - mulheres) usando o método BCa
(Bias-Corrected and Accelerated). Este método é robusto e ajusta para o
viés e a assimetria da distribuição bootstrap, oferecendo um intervalo
de confiança mais preciso em muitas situações.
Vamos agora implementar o processo de bootstrap “do zero” para calcular o mesmo estimador (diferença das médias entre homens e mulheres) e construir um intervalo de confiança usando o método percentil.
# Definindo o número de amostras bootstrap
R_manual = 2000
# Vetor para armazenar as diferenças das médias de cada amostra bootstrap
diferencas_bootstrap = numeric(R_manual)
# Realizando o bootstrap manual
for (i in 1:R_manual) {
# Amostrar com reposição da população original
amostra_bootstrap = iat[sample(nrow(iat), replace = TRUE), ]
# Calcular médias para homens e mulheres na amostra bootstrap
estatisticas_bootstrap = amostra_bootstrap %>%
group_by(sex) %>%
summarise(
media = mean(d_art, na.rm = TRUE) # Adicionado na.rm para lidar com NA, se houver
)
# Extrair médias para homens e mulheres (garantir que ambos existem)
media_m_boot = ifelse("m" %in% estatisticas_bootstrap$sex,
estatisticas_bootstrap$media[estatisticas_bootstrap$sex == "m"], NA)
media_f_boot = ifelse("f" %in% estatisticas_bootstrap$sex,
estatisticas_bootstrap$media[estatisticas_bootstrap$sex == "f"], NA)
# Calcular a diferença (homens - mulheres) e armazenar
diferencas_bootstrap[i] = media_m_boot - media_f_boot
}
# Remover NA's se alguma amostra bootstrap não contiver um dos sexos (raro mas possível)
diferencas_bootstrap = na.omit(diferencas_bootstrap)
# Calculando o Intervalo de Confiança de 95% pelo método Percentil
ci_percentil_low = quantile(diferencas_bootstrap, 0.025)
ci_percentil_high = quantile(diferencas_bootstrap, 0.975)
# Exibir os resultados do bootstrap manual
print(paste("IC 95% (Percentil) Manual: [", round(ci_percentil_low, 2), ", ", round(ci_percentil_high, 2), "]", sep = ""))
## [1] "IC 95% (Percentil) Manual: [-0.43, -0.05]"
Agora vamos visualizar a distribuição das amostras bootstrap do estimador. Isso nos ajuda a entender a forma da distribuição, verificar a presença de assimetria ou viés, e complementar a interpretação dos intervalos de confiança.
# Histograma da distribuição das diferenças bootstrap
df_bootstrap = tibble(diferenca = diferencas_bootstrap)
df_bootstrap %>%
ggplot(aes(x = diferenca)) +
geom_histogram(binwidth = 0.02, fill = "skyblue", color = "black", alpha = 0.7) +
geom_density(color = "red", linewidth = 1) +
labs(
title = "Distribuição das Diferenças das Médias (Bootstrap Manual)",
x = "Diferença das Médias (Homens - Mulheres)",
y = "Frequência / Densidade"
) +
geom_vline(xintercept = ci_percentil_low, linetype = "dashed", color = "blue") +
geom_vline(xintercept = ci_percentil_high, linetype = "dashed", color = "blue") +
geom_vline(xintercept = mean(diferencas_bootstrap), linetype = "solid", color = "darkgreen") +
annotate("text", x = mean(diferencas_bootstrap) - 0.05, y = max(ggplot_build(df_bootstrap %>% ggplot(aes(x = diferenca)) + geom_histogram(binwidth = 0.02))$data[[1]]$count)*0.8, label = paste("Média:", round(mean(diferencas_bootstrap), 2)), color = "darkgreen", hjust = 0) +
annotate("text", x = ci_percentil_low, y = max(ggplot_build(df_bootstrap %>% ggplot(aes(x = diferenca)) + geom_histogram(binwidth = 0.02))$data[[1]]$count)*0.7, label = paste("IC 2.5%:", round(ci_percentil_low, 2)), color = "blue", hjust = 0) +
annotate("text", x = ci_percentil_high, y = max(ggplot_build(df_bootstrap %>% ggplot(aes(x = diferenca)) + geom_histogram(binwidth = 0.02))$data[[1]]$count)*0.6, label = paste("IC 97.5%:", round(ci_percentil_high, 2)), color = "blue", hjust = 1)
O método do intervalo de confiança percentil é escolhido para a implementação manual por sua simplicidade conceitual e facilidade de cálculo. Ele simplesmente utiliza os percentis da distribuição empírica das estatísticas bootstrap para definir os limites do intervalo. Para um IC de 95%, por exemplo, tomamos o 2.5º e o 97.5º percentis dos valores bootstrap. Isso é intuitivo, pois se presume que esses percentis englobam 95% dos valores mais prováveis da estatística de interesse.
No entanto, é importante notar que o método percentil assume
que a distribuição bootstrap é simétrica e aproximadamente centrada no
parâmetro real. Se a distribuição for enviesada ou muito
assimétrica, o método percentil pode não ser o mais preciso. O método
BCa, usado na biblioteca boot na Parte 1, é geralmente
preferível por corrigir esses potenciais problemas de viés e assimetria,
tornando-o mais robusto para uma variedade maior de distribuições.
Vamos agora comparar os intervalos de confiança obtidos pelo método
BCa (biblioteca boot) e pelo método Percentil
(implementação manual).
# IC da biblioteca (BCa)
ci_bca_low = round(ci$conf.low, 2)
ci_bca_high = round(ci$conf.high, 2)
# IC manual (Percentil)
ci_percentil_low_exibicao = round(ci_percentil_low, 2)
ci_percentil_high_exibicao = round(ci_percentil_high, 2)
print(paste("IC 95% (BCa) da biblioteca: [", ci_bca_low, ", ", ci_bca_high, "]", sep = ""))
## [1] "IC 95% (BCa) da biblioteca: [-0.44, -0.06]"
print(paste("IC 95% (Percentil) manual: [", ci_percentil_low_exibicao, ", ", ci_percentil_high_exibicao, "]", sep = ""))
## [1] "IC 95% (Percentil) manual: [-0.43, -0.05]"
# Visualização da comparação
comparacao_df = tibble(
Metodo = c("BCa (Biblioteca)", "Percentil (Manual)"),
Estimativa = c(ci$statistic, mean(diferencas_bootstrap)),
Lower = c(ci$conf.low, ci_percentil_low),
Upper = c(ci$conf.high, ci_percentil_high)
)
comparacao_df %>%
ggplot(aes(x = Metodo, y = Estimativa, ymin = Lower, ymax = Upper)) +
geom_pointrange(size = 1.2, linewidth = 1) +
geom_hline(yintercept = 0, linetype = "dashed", color = "gray") +
labs(
y = "Diferença das Médias (Homens - Mulheres)",
x = "Método do Bootstrap"
) +
geom_text(aes(x = Metodo, # Posição horizontal do texto (Método)
y = Upper, # Posição vertical do texto (limite superior do intervalo)
label = paste0("[ ", round(Lower, 2), ", ", round(Upper, 2), " ]")),
nudge_y = 0.02, # Desloca o texto ligeiramente para cima do limite superior
hjust = 0.5, # Centraliza o texto horizontalmente sobre o ponto
vjust = 0, # Alinha o texto na parte de baixo do ponto de início
size = 3.5,
color = "blue") # Mantém a cor para melhor contraste
Ao comparar os intervalos de confiança obtidos pelos dois métodos, observamos que: