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: 125
## Columns: 5
## $ session_id <chr> "2410996", "2411208", "2411213", "2413016", "2413017", "24…
## $ referrer <chr> "ufl", "ufl", "ufl", "ufl", "ufl", "ufl", "ufl", "ufl", "u…
## $ sex <ord> m, f, f, f, f, f, f, f, f, f, m, f, m, f, m, f, f, m, f, m…
## $ d_art <dbl> 0.86629314, 0.68168619, 0.92370419, 1.23406708, 0.04755330…
## $ 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.0312
## 2 f 0.419
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.3877554
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.3877554
## $ bias <dbl> -0.002554344
## $ std.error <dbl> 0.1147161
## $ conf.low <dbl> -0.6021521
## $ conf.high <dbl> -0.1573474
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)
Para o caso da UFL, em média, as mulheres que participaram do experimento apresentaram uma tendência, medida pelo IAT, positiva e moderada às artes (média 0.419, desvio padrão 0.555, N = 94), cabe destacar o alto desvio padrão que indica que talvez a média não represente bem esta amostra. Diferentemente nos homens, em média, não parece haver preferência por nenhuma das áreas (média 0.031, desvio padrão 0.547, N = 31), observamos novamente um alto desvio padrão, que também indica que a média pode ser pouco representativa.
Houve portanto uma diferença entre homens e mulheres (diferença das médias -0.388, 95% CI [-0.602, -0.157]), mas cuja intensidade não pode ser dita com precisão uma vez que temos um intervalo de confiança que contém valores considerados médios e altos. Assim, os dados de nosso experimento apontam que mulheres tem uma maior associação com as artes que os homens, 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.
simple_percentile_bootstrap_ci <- function(data, metric_function, alpha = 0.05, n_bootstrap = 2000) {
# Function to generate bootstrap samples
bootstrap <- function(data, n) {
indices <- sample(nrow(data), replace = TRUE, size = n)
data %>% slice(indices)
}
# Bootstrap procedure
bootstrap_results <-
unlist(replicate(n_bootstrap, metric_function(bootstrap(data, nrow(data)))))
# Calculate confidence intervals
lower <- quantile(bootstrap_results, alpha / 2)
upper <- quantile(bootstrap_results, 1 - alpha / 2)
# Return confidence interval
return(list(results = bootstrap_results, ci = c(lower, upper)))
}
diff_mf <- function(d) {
agrupado <- d %>%
group_by(sex) %>%
summarise(media = mean(d_art))
m <- agrupado %>% filter(sex == "m") %>% pull(media)
f <- agrupado %>% filter(sex == "f") %>% pull(media)
m - f
}
rb <- simple_percentile_bootstrap_ci(iat, diff_mf)
rb$ci
## 2.5% 97.5%
## -0.6027690 -0.1646531
As conclusões anteriroes não mudam considerando o intervalo calculado manualmente 95% CI [-0.603, -0.165], os valores de ambos os extremos do intervalo são bem similares. O método do Simple Percentile Method foi escolhido porque é simples de implementar e interpretar, além de não presumir que os dados sigam uma distribuição normal, mas sim que a distribuição das amostras da estatística siga (o que é verdade pelo Teorema do Limite Central).