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: 113
## Columns: 5
## $ session_id <chr> "2401243", "2401244", "2401246", "2401249", "2401250", "24…
## $ referrer <chr> "brasilia", "brasilia", "brasilia", "brasilia", "brasilia"…
## $ sex <ord> m, m, f, f, f, m, f, m, m, f, f, f, f, f, m, m, f, m, f, m…
## $ d_art <dbl> 0.1480913, 0.6285349, 0.4977736, 0.3999447, 0.8314632, 1.1…
## $ 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")
RESPOSTA:
Distribuição para sex = “m”:
Distribuição para sex = “f”:
iat %>%
ggplot(aes(x = sex, y = d_art)) +
geom_quasirandom(width = .1)
RESPOSTA:
O gráfico indica que a variável d_art tem uma distribuição diferente entre os dois grupos de sex.
Para o grupo f, a variável d_art tende a ter valores mais positivos, enquanto para o grupo m, os valores estão mais centralizados em torno de zero.
A densidade e o espalhamento dos pontos sugerem que, enquanto ambos os grupos têm uma certa variabilidade, o grupo f tem uma concentração mais alta de valores positivos.
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.
RESPOSTAS:
O gráfico indica que a variável d_art tem uma média diferente entre os dois grupos de sex.
A média de d_art é maior para o grupo f em comparação com o grupo m.
Esta visualização permite uma comparação clara das médias e das distribuições de d_art entre os sexos.
iat %>%
group_by(sex) %>%
summarise(media = mean(d_art))
## # A tibble: 2 × 2
## sex media
## <ord> <dbl>
## 1 m 0.400
## 2 f 0.570
RESPOSTAS:
Os dados indicam que, em média, a variável d_art tem valores maiores para o grupo feminino (f) comparado ao grupo masculino (m).
Esta diferença é quantificada pelas médias 0.5703113 (feminino) e 0.3997566 (masculino).
iat_custom <- iat %>%
group_by(sex) %>%
summarise(media = mean(d_art), desvio = sd(d_art), N = n());
iat_custom
## # A tibble: 2 × 4
## sex media desvio N
## <ord> <dbl> <dbl> <int>
## 1 m 0.400 0.516 48
## 2 f 0.570 0.423 65
RESPOSTAS:
MASCULINO - A média dos valores de d_art para os homens é aproximadamente 0.399.
O desvio padrão dos valores de d_art para os homens é aproximadamente 0.516, indicando a variabilidade dos dados em torno da média.
Há 48 observações (indivíduos) no grupo masculino.
FEMININO - A média dos valores de d_art para as mulheres é aproximadamente 0.570.
O desvio padrão dos valores de d_art para as mulheres é aproximadamente 0.422, indicando a variabilidade dos dados em torno da média.
Há 65 observações (indivíduos) no grupo feminino.
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.1705546
RESPOSTAS:
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.1705546
## $ bias <dbl> -0.0008454712
## $ std.error <dbl> 0.09257269
## $ conf.low <dbl> -0.3527367
## $ conf.high <dbl> 0.01162218
RESPOSTAS:
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")
RESPOSTAS:
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)
RESPOSTAS:
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.570 desv. padrão = 0.422, N = 65).
Homens tiveram uma associação negativa com a matemática, portanto menor que a das mulheres (média 0.399, des. padrão 0.516, N = 48).
Houve portanto uma pequena diferença entre homens e mulheres (diferença das médias -0,17, 95% CI [-0.347, 0.014]).
Realize a análise e compare as conclusões obtidas nos dois casos experimentados:
Intervalo de confiança (IC) da média de IAT, na amostra de homens em Brasília. Será calculado separadamente o IC do homem e da mulher.A biblioteca utilizada é a boot.
library(boot)
#Definindo a função theta_homens
theta_homens = function(d, i) { #Define uma função que recebe dois argumentos, d (o data frame) e i (índices para as amostras bootstrap).
homens = iat %>%
filter(sex == "m") %>% # Filtra o data frame iat para incluir apenas as observações do sexo masculino.
slice(i) %>% # Seleciona as linhas do data frame filtrado de acordo com os índices i, que são gerados durante o procedimento bootstrap.
summarise(media_homens = mean(d_art)) #Calcula a média da variável d_art para os homens.
homens %>% pull(media_homens) # Extrai a média calculada como um valor único.
}
homens_booted <- boot(data = iat,
statistic = theta_homens,
R = 2000)
homens_ci = tidy(homens_booted,
conf.level = .95,
conf.method = "bca", #método bca (Bias-Corrected and Accelerated) para calcular os intervalos de confiança.
conf.int = TRUE)
homens_ci = cbind(homens_ci, sex = "m", desvio_padrao = (homens_ci$conf.high-homens_ci$conf.low)/2)
glimpse(homens_ci)
## Rows: 1
## Columns: 7
## $ statistic <dbl> 0.3997566
## $ bias <dbl> 0.003856136
## $ std.error <dbl> 0.07585161
## $ conf.low <dbl> 0.239266
## $ conf.high <dbl> 0.5409586
## $ sex <chr> "m"
## $ desvio_padrao <dbl> 0.1508463
Intervalo de confiança (IC) da média de IAT, na amostra de mulheres em Brasília:
library(boot)
theta_mulheres = function(d, i) {
mulheres = iat %>%
filter(sex == "f") %>%
slice(i) %>%
summarise(media_mulheres = mean(d_art))
mulheres %>% pull(media_mulheres)
}
mulheres_booted <- boot(data = iat,
statistic = theta_mulheres,
R = 2000)
mulheres_ci = tidy(mulheres_booted,
conf.level = .95,
conf.method = "bca",
conf.int = TRUE)
mulheres_ci = cbind(mulheres_ci, sex = "f", desvio_padrao = (mulheres_ci$conf.high-mulheres_ci$conf.low)/2)
glimpse(mulheres_ci)
## Rows: 1
## Columns: 7
## $ statistic <dbl> 0.5703113
## $ bias <dbl> -0.0005952318
## $ std.error <dbl> 0.05202349
## $ conf.low <dbl> 0.4626931
## $ conf.high <dbl> 0.6663161
## $ sex <chr> "f"
## $ desvio_padrao <dbl> 0.1018115
Comparação do IC da média de IAT, entre as amostras calculadas acima de homens e mulheres em Brasilia:
library(boot)
#Criação do dataframe mf_cis
mf_cis = rbind(homens_ci, mulheres_ci)
#Criação do Gráfico com ggplot2
mf_cis %>%
ggplot(aes(x = sex, ymin = conf.low, y = statistic, ymax = conf.high)) +
geom_linerange(linewidth=2) +
geom_point(color="red", size = 5) +
geom_hline(yintercept = c(0.15, 0.35, 0.65), linetype = "dashed", color = "darkgreen")
RESPOSTA:
As mulheres, em média, têm uma associação implícita (medida pelo IAT) com a matemática mais negativa do que os homens.
No entanto, os intervalos de confiança para as médias de d_art se sobrepõem, indicando que a diferença observada pode não ser estatisticamente significativa. Isso significa que não há evidência suficiente para afirmar que as médias de d_art são realmente diferentes entre homens e mulheres com um alto nível de confiança.
O método utilizado foi o bootstrap percentil. Este método envolve a criação de várias sub-amostras (no caso, 2000) a partir dos dados originais através de reamostragem com reposição. A partir dessas sub-amostras, foram calculadas as médias para homens e mulheres. As distribuições dessas médias bootstrap foram então usadas para determinar os percentis (2,5% e 97,5%) que definem os limites do intervalo de confiança. Este método é robusto porque não assume uma distribuição específica para os dados e oferece uma estimativa precisa dos intervalos de confiança com base nas propriedades empíricas das amostras reamostradas.
Definir a função theta para calcular a média de uma amostra, agrupada pelo sexo femino e masculino.
# Definição da funcao
funcao_theta = function(df) {
# agrupamento e calculo da media
agrupado = df %>%
group_by(sex) %>%
summarise(media = mean(d_art))
}
Cálculo da média da amostra de homens e mulheres, utilizando a função theta, agrupada pelo sexo:
# Chamada da funcao
THETA = funcao_theta(iat)
# Filtro para sex masculino
THETA_M = (THETA %>% filter(sex == "m") %>% pull(media))
# Filtro para sex feminino
THETA_F = (THETA %>% filter(sex == "f") %>% pull(media))
# Média geral da amostra
THETA
## # A tibble: 2 × 2
## sex media
## <ord> <dbl>
## 1 m 0.400
## 2 f 0.570
RESPOSTAS:
Definir a função para gerar uma amostra bootstrap da média, agrupada por sexo:
# Função my_bootstrap
my_bootstrap <- function(df){
# Filtragem dos dados por sexo
dados_m = df %>% filter(sex == "m") %>% pull(d_art)
dados_f = df %>% filter(sex == "f") %>% pull(d_art)
# Geração de amostras bootstrap
boot_m <- sample(dados_m,size = NROW(dados_m),replace = T)
boot_f <- sample(dados_f, size = NROW(dados_f), replace = T)
# Cálculo das médias das amostras bootstrap
return(c(media_m = mean(boot_m), media_f = mean(boot_f)))
}
RESPOSTAS:
Criar 2000 sub-amostras da media, com bootstrap, agrupada pelo sexo:
# Geração das amostras bootstrap
set.seed(12345)
# Geração de múltiplas amostras bootstrap
amostras <- replicate(2000, my_bootstrap(iat), simplify = FALSE)
# Combinação dos resultados
amostras <- do.call(rbind, amostras)
amostras <- as.data.frame(amostras)
# Visualização da distribuição das amostras bootstrap:
hist_m <- amostras %>%
ggplot(aes(x = media_m)) +
geom_histogram(binwidth = .01,
colour = "black",
fill = "blue") +
labs(title = "Distribuição bootstraps (Homens)")
hist_f <- amostras %>%
ggplot(aes(x = media_f)) +
geom_histogram(binwidth = .01,
colour = "black",
fill = "yellow") +
labs(title = "Distribuição bootstraps (Mulheres)")
grid.arrange(hist_m, hist_f, ncol = 2)
RESPOSTA:
A distribuição das médias para os homens é aproximadamente simétrica, com a maioria das médias concentradas em torno de 0,4. Há uma dispersão menor em direção aos extremos, com algumas médias próximas de 0,2 e outras próximas de 0,6.
A distribuição das médias para as mulheres também é aproximadamente simétrica, mas centrada em torno de 0,55. Há uma dispersão menor nas extremidades, com algumas médias próximas de 0,4 e outras próximas de 0,7.
As distribuições indicam que, em média, as mulheres em Brasília têm uma associação implícita com a matemática mais alta (em torno de 0,55) em comparação aos homens (em torno de 0,4).
Criar amostras de diferenças de médias entre homens e mulheres:
# Visualização da distribuição dos erros amostrais:
hist_erro_m <- amostras %>%
ggplot(aes(x = media_m - THETA_M)) +
geom_histogram(binwidth = .01,
colour = "black",
fill = "blue") +
labs(title = "Distribuição Erro Amostral (Homens)", x = "Diferença de Médias (M - THETA_M)")
hist_erro_f <- amostras %>%
ggplot(aes(x = media_f - THETA_F)) +
geom_histogram(binwidth = .01,
colour = "black",
fill = "yellow") +
labs(title = "Distribuição Erro Amostral (Mulheres)", x = "Diferença de Médias (F - THETA_F)")
grid.arrange(hist_erro_m, hist_erro_f, ncol = 2)
RESPOSTA:
Calcular o Intervalo de Confiança (IC) para homens e mulheres, com C = 95% e, consequentemente, os limites inferior e superior da margem de erro (quantis: 2.5 (-) e 97.5 (+)).
Estamos investigando a associação implícita com a matemática entre mulheres e homens em Brasília, medida pelo IAT. No item 1, utilizamos o método BCA para bootstrap com um intervalo de confiança de 95%. Agora, vamos reproduzir os resultados utilizando nosso próprio método (my_bootstrap), mantendo o mesmo intervalo de confiança, para verificar se há alguma mudança significativa em nossas conclusões.
Cálculo do intervalo de confiança bootstrap percentis para as médias de homens e mulheres:
# Cálculo dos intervalos de confiança bootstrap
intervalo_m = amostras %>%
mutate(erro_m = media_m - THETA_M) %>%
summarise(erro_m_i = quantile(erro_m, .025),
erro_m_s = quantile(erro_m, .975)) %>%
mutate(valor_m_i = THETA_M + erro_m_i,
valor_m_s = THETA_M + erro_m_s) %>%
mutate(desvio_padrao_m = (valor_m_s-valor_m_i)/2)
intervalo_f = amostras %>%
mutate(erro_f = media_f - THETA_F) %>%
summarise(erro_f_i = quantile(erro_f, .025),
erro_f_s = quantile(erro_f, .975)) %>%
mutate(valor_f_i = THETA_F + erro_f_i,
valor_f_s = THETA_F + erro_f_s) %>%
mutate(desvio_padrao_f = (valor_f_s-valor_f_i)/2)
# Construção dos gráficos
hist_comp_m <- hist_m +
geom_vline(xintercept = c(intervalo_m$valor_m_i), linetype = "dashed", color = "darkorange") +
geom_vline(xintercept = c(THETA_M), size=2, color = "red") +
geom_vline(xintercept = c(intervalo_m$valor_m_s), linetype = "dashed", color = "darkgreen")
## 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.
hist_comp_f <-hist_f +
geom_vline(xintercept = c(intervalo_f$valor_f_i), linetype = "dashed", color = "darkorange") +
geom_vline(xintercept = c(THETA_F), size=2, color = "red") +
geom_vline(xintercept = c(intervalo_f$valor_f_s), linetype = "dashed", color = "darkgreen")
grid.arrange(hist_comp_m, hist_comp_f, ncol = 2)
RESPOSTA:
o método de intervalo de confiança com bootstrap, especificamente o percentil bootstrap. O processo envolve:
Geração de múltiplas amostras bootstrap a partir dos dados originais.
Cálculo das médias bootstrap.
Cálculo dos erros amostrais em relação ao valor verdadeiro (THETA_M e THETA_F).
Determinação dos quantis 2.5% e 97.5% dos erros amostrais para construir os intervalos de confiança.
Este método é robusto e amplamente utilizado para estimar intervalos de confiança quando a distribuição da estatística de interesse é desconhecida ou complexa.
# Criação do dataframe masculino
intervalo_m_mycis = data.frame(sex = "m", statistic=THETA_M, conf.low=intervalo_m$valor_m_i, conf.high=intervalo_m$valor_m_s)
# Criação do dataframe feminino
intervalo_f_mycis = data.frame(sex = "f", statistic=THETA_F, conf.low=intervalo_f$valor_f_i, conf.high=intervalo_f$valor_f_s)
# Unindo os dataframes dos dois sexos
my_mf_cis = rbind(intervalo_m_mycis, intervalo_f_mycis)
glimpse(my_mf_cis)
## Rows: 2
## Columns: 4
## $ sex <chr> "m", "f"
## $ statistic <dbl> 0.3997566, 0.5703113
## $ conf.low <dbl> 0.2521724, 0.4687708
## $ conf.high <dbl> 0.5447155, 0.6709123
my_mf_cis %>%
ggplot(aes(x = sex, ymin = conf.low, y = statistic, ymax = conf.high)) +
geom_linerange(linewidth=2) +
geom_point(color="red", size = 5) +
geom_hline(yintercept = c(0.15, 0.35, 0.65), linetype = "dashed", color = "darkgreen")
Realizando a própria função bootstrap para calcular a diferença das médias:
# Diferença da média da amostra
THETA_DIF_MF = THETA_M - THETA_F
# Função bootstrap
my_dif_bootstrap <- function(df){
dados_m = df %>% filter(sex == "m") %>% pull(d_art)
dados_f = df %>% filter(sex == "f") %>% pull(d_art)
boot_m <- sample(dados_m,
size = NROW(dados_m),
replace = T)
boot_f <- sample(dados_f,
size = NROW(dados_f),
replace = T)
return(mean(boot_m) - mean(boot_f))
}
# Criação de 2000 sub-amostras
set.seed(54321)
amostras_dif = tibble(i = 1:2000) %>%
mutate(media_dif = map_dbl(i, ~ my_dif_bootstrap(iat)))
intervalo_dif = amostras_dif %>%
mutate(erro_dif = media_dif - THETA_DIF_MF) %>%
summarise(erro_dif_i = quantile(erro_dif, .025),
erro_dif_s = quantile(erro_dif, .975)) %>%
mutate(valor_dif_i = THETA_DIF_MF + erro_dif_i,
valor_dif_s = THETA_DIF_MF + erro_dif_s) %>%
mutate(desvio_padrao_dif = (valor_dif_s-valor_dif_i)/2)
# IC 95%
intervalo_dif_mycis = data.frame(statistic=THETA_DIF_MF, conf.low=intervalo_dif$valor_dif_i, conf.high=intervalo_dif$valor_dif_s, desvio.padrao = intervalo_dif$desvio_padrao_dif)
intervalo_dif_mycis %>%
ggplot(aes(x = "Diferenças da Média", ymin = conf.low, y = statistic, ymax = conf.high)) +
geom_linerange(linewidth=2) +
geom_point(color="red", size = 5)
RESPOSTA:
Após a análise, observou-se uma mudança mínima apenas confirmamos a conclusão inicial.