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: 267
## Columns: 5
## $ session_id <chr> "2478783", "2478785", "2478786", "2478787", "2478789", "24…
## $ referrer <chr> "lse", "lse", "lse", "lse", "lse", "lse", "lse", "lse", "l…
## $ sex <ord> m, f, f, f, m, m, f, m, m, f, f, f, f, f, f, f, f, f, f, m…
## $ d_art <dbl> 0.80543823, 0.31463632, 0.60437687, 0.32284672, 0.73121367…
## $ 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.160
## 2 f 0.522
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.3617526
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.3617526
## $ bias <dbl> 0.0009624536
## $ std.error <dbl> 0.05916021
## $ conf.low <dbl> -0.4803892
## $ conf.high <dbl> -0.249492
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)
iat %>%
group_by(sex) %>%
summarise(amostra = n(), desvio_padrao = sd(d_art))
## # A tibble: 2 × 3
## sex amostra desvio_padrao
## <ord> <int> <dbl>
## 1 m 91 0.483
## 2 f 176 0.453
# Calcula 2 mil amostras da média de amostras de tamanho 60
amostras_media_dif <- replicate(2000, {
amostra <- iat %>%
sample_n(60, replace = TRUE)
m <- amostra %>% filter(sex == "m") %>% summarise(media = mean(d_art)) %>% pull(media)
f <- amostra %>% filter(sex == "f") %>% summarise(media = mean(d_art)) %>% pull(media)
m - f
})
# Calcula a média das diferenças de médias
media_dif <- mean(amostras_media_dif)
# Calcula um IC usando t de Student para um nível de confiança de 95%
ic_test <- t.test(amostras_media_dif)
lower_ci <- ic_test$conf.int[1]
upper_ci <- ic_test$conf.int[2]
# Dataframe com o IC para plotar
df_ic <- data.frame(
x = 1,
lower_ci = lower_ci,
upper_ci = upper_ci
)
# Plota o intervalo de confiança
ggplot(df_ic, aes(x = x, y = NULL)) +
geom_linerange(mapping=aes(ymin = lower_ci, ymax = upper_ci), linewidth = 1) +
geom_point(aes(y = media_dif), color = "red", size = 3) +
labs(x = "Diferença", y = "IAT homens - mulheres", title = "Intervalo de Confiança das Diferenças de Médias", subtitle = "Bootstrap manual (sem biblioteca)") +
theme_minimal() +
theme(
axis.ticks.x = element_blank(),
axis.text.x = element_blank()
)
Em média, as mulheres que participaram do experimento (London School of Economics and Political Science, LSE) tiveram uma associação implícita (medida pelo IAT) com a matemática negativa e média (média 0.5218680, desv. padrão = 0.4526697, N = 176). Homens tiveram uma associação negativa com a matemática, portanto menor que a das mulheres (média = 0.1601154, desv. padrão = 0.4826767, N = 91).
## Houve portanto uma pequena diferença entre homens e mulheres (diferença das médias -0.361753, 95% CI [-0.480389, -0.249492]). A partir desta amostra, estimamos que mulheres têm uma associação negativa mais forte, porém a diferença sendo de pequena a considerável (em alguns casos), considerando o IC.
Exemplos de possíveis conclusões para completar
Realize a análise e compare as conclusões obtidas nos dois casos experimentados:
Para o bootstrap implementado manualmente optei por considerar uma reamostragem de tamanho 2000 com amostras de tamanho 60 com a opção replace ativada, para ser uma amostragem com reposição. O tamanho das amostras foi definido como 60, dado que para cada uma calcula-se a diferença por sexo e para isso ter maior representativade, optei por ter o dobro que o tamanho padrão que geralmente é 30.
## [1] "O IC com a biblioteca boot foi de [-0.480389, -0.249492] e o IC do bootstrap sem biblioteca foi de [-0.367959, -0.356744], com 95% de nível de confiança em ambos os casos. Em ambos os casos existe a diferença já que o intervalo não contém o zero, mas a diferença é pequena (se considerar que maior intervalo absoluto entre as observações, acima de 2). Embora o intervalo gerado manualmente tenha uma maior precisão no intervalo, a variação sendo apenas na segunda casa decimal. Essa maior precisão pode ter acontecido por possivelmente a quantidade de elementos nas amostras individuais ser maior no bootstrap manual."