Aula Prática - Experimentos Aleatórios

Introdução

Antes de prosseguir com a aula prática sobre experimentos aleatórios, iremos assistir a dois vídeos. O primeiro vídeo serve como uma revisão do conteúdo apresentado nas aulas expositivas sobre o tema. Já o segundo vídeo mostra como ler e interpretar tabelas em textos acadêmicos. O objetivo da aula prática será mostrar como podemos produzir resultados semelhantes aos do vídeo em um exercício aplicado.

Revisão de Conteúdo

Como ler artigos de microeconometria aplicada

Carter, S. P., Greenberg, K., & Walker, M. S. (2017). The impact of computer usage on academic performance: Evidence from a randomized trial at the United States Military Academy. Economics of Education Review, 56, 118–132.

Discussão

Existe discriminação no mercado de trabalho? Como você poderia tentar responder a essa questão utilizando um experimento aleatório? Sua proposta seria eticamente aceitável? Economicamente viável?

Exercício E13.1 Stock e Watson (4a Edição)

Na aula de hoje, iremos fazer o exercício empírico 13.1 do livro de Stock e Watson que é baseado no artigo Are Emily and Greg More Employable Than Lakisha and Jamal? A Field Experiment on Labor Market Discrimination.. No site do livro, você encontrará o arquivo Names, que contém a base de dados e o arquivo Names_Description com a descrição das variáveis.

Um empregador em potencial recebe dois currículos: um de um candidato branco e um semelhante de um candidato negro. O empregador tem maior probabilidade de ligar de volta para o candidato branco para agendar uma entrevista? Marianne Bertrand e Sendhil Mullainathan realizaram um experimento aleatório para responder a essa pergunta.

Como a informação sobre raça normalmente não é incluída em currículos, eles diferenciaram os currículos com base em “nomes que soam como nomes de pessoas brancas” (como Emily Walsh ou Gregory Baker) e “nomes que soam como nomes de pessoas afro-americanas” (como Lakisha Washington ou Jamal Jones).

Foi criada uma grande coleção de currículos fictícios e a “raça” presumida (com base no “som” do nome) foi atribuída aleatoriamente a cada currículo. Esses currículos foram enviados a empregadores potenciais para observar quais deles geravam uma ligação telefônica (um callback) por parte do empregador.

Antes de iniciar a atividade, vamos chamar os pacotes que serão utilizados. Nesta resolução são utilizados os seguintes pacotes do R.

Veja o código
library(tidyverse) # Conjunto de pacotes e funções para realizar análise de dados no R
library(readxl) # Para fazer leitura e também exportar arquivos em formato Excel.
library(gt) # Para elaboração de tabelas com qualidade de publicação
library(here) # Para facilitar trabalhar com caminhos de pastas

Conforme descrito na atividade, o primeiro passo é ler os dados no R. Vamos salvar os dados no objeto names_data.

Veja o código
# Carregar os dados
# Ajuste o caminho conforme a localização do arquivo na sua máquina
names_data <- read_excel(here::here("labs","Names.xlsx"))

a. Defina a taxa de retorno (callback rate) como a fração de currículos que geram uma ligação telefônica do empregador em potencial. Qual foi a taxa de retorno de chamada para brancos? E para afro-americanos? Construa um intervalo de confiança de 95% para a diferença entre as taxas de retorno. A diferença é estatisticamente significativa? Ela é grande em termos práticos no mundo real?

Do dicionário de variáveis, temos que a variável call_back = 1 se o candidato recebeu uma ligação de retorno do empregador em potencial e call_back = 0 caso contrário. Além disso, a variável black identifica se o currículo possui um nome associado a afro-americanos.

Dadas essas variáveis, o primeiro passo é construir as taxas de retorno. Como a variável call_back é uma variável dummy, sua média pode ser interpretada como proporção ou taxa. Assim, podemos calcular a média de call_back para cada grupo racial:

Veja o código
# Calcular taxas de retorno por grupo racial
names_data %>% 
  group_by(black) %>% 
  summarise(
    n = n(), # incluir o total de observações por grupo
    n_callbacks = sum(call_back), # incluir o total de ligações de retorno por grupo
    call_back_rate = mean(call_back)) # taxa como média da dummy
# A tibble: 2 × 4
  black     n n_callbacks call_back_rate
  <dbl> <int>       <dbl>          <dbl>
1     0  2435         235         0.0965
2     1  2435         157         0.0645
Veja o código
# Diferença de médias e intervalo de confiança via teste t
t.test(call_back ~ black, data = names_data)

    Welch Two Sample t-test

data:  call_back by black
t = 4.1147, df = 4711.6, p-value = 3.943e-05
alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
95 percent confidence interval:
 0.01677067 0.04729503
sample estimates:
mean in group 0 mean in group 1 
     0.09650924      0.06447639 

Interpretação:

A taxa de retorno para brancos é igual a 0,0965, o que significa que 9,7% dos currículos com nomes que soam de pessoas brancas receberam uma ligação de retorno. Para os currículos associados a afrodescendentes, a taxa de retorno foi de apenas 6,5%. A diferença entre essas taxas foi de 3,2 pontos percentuais. Como o intervalo de confiança reportado acima não inclui o zero, concluímos que essa diferença é significativa. 1

O mesmo resultado pode ser obtido fazendo uma regressão da taxa de retorno na dummy de raça.

Veja o código
# Calculando a diferença de médias por MQO
mod_1 <- lm(call_back ~ black, data = names_data)
mod_1

Call:
lm(formula = call_back ~ black, data = names_data)

Coefficients:
(Intercept)        black  
    0.09651     -0.03203  
Veja o código
# Resultados completos para inferência
summary(mod_1)

Call:
lm(formula = call_back ~ black, data = names_data)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.09651 -0.09651 -0.06448 -0.06448  0.93552 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.096509   0.005505  17.532  < 2e-16 ***
black       -0.032033   0.007785  -4.115 3.94e-05 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.2716 on 4868 degrees of freedom
Multiple R-squared:  0.003466,  Adjusted R-squared:  0.003261 
F-statistic: 16.93 on 1 and 4868 DF,  p-value: 3.941e-05

Interpretação: A taxa de retorno para brancos é dada pelo valor do intercepto. O coeficiente da variável black mostra exatamente a diferença quando black = 1. Assim, quando estimamos por MQO, para saber se a diferença é significativa, precisamos avaliar a significância da dummy. Usando a regra de bolso, vemos que o valor do coeficiente em módulo é mais que duas vezes o desvio-padrão. Portanto, a dummy é significativa e existe diferencial na taxa de retorno por raça.

b. O diferencial na taxa de retorno entre afro-americanos e brancos é diferente para homens em comparação com mulheres?

Podemos abordar a questão do diferencial racial por gênero fazendo a análise separada por grupos. No dicionário de variáveis, vemos que a variável female = 1 indica se o currículo é identificado com um nome feminino. Assim, temos:

Veja o código
# Calcular taxas de retorno por grupo racial
names_data %>% 
  group_by(black, female) %>% 
  summarise(
    n = n(), # incluir o total de observações por grupo
    n_callbacks = sum(call_back), # incluir o total de ligações de retorno por grupo
    call_back_rate = mean(call_back)) # taxa como média da dummy
# A tibble: 4 × 5
# Groups:   black [2]
  black female     n n_callbacks call_back_rate
  <dbl>  <dbl> <int>       <dbl>          <dbl>
1     0      0   575          51         0.0887
2     0      1  1860         184         0.0989
3     1      0   549          32         0.0583
4     1      1  1886         125         0.0663
Veja o código
# Diferença de médias e intervalo de confiança via teste t
names_data %>% 
  filter(black == 1) %>% 
  t.test(call_back ~ female, data = .)

    Welch Two Sample t-test

data:  call_back by female
t = -0.69284, df = 936.84, p-value = 0.4886
alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
95 percent confidence interval:
 -0.03062227  0.01464219
sample estimates:
mean in group 0 mean in group 1 
     0.05828780      0.06627784 

Interpretação: Pelos resultados, os homens negros têm uma taxa de ligação de retorno de 5,8%, enquanto para mulheres negras essa taxa é de 6,6%. Ou seja, há uma diferença de 0,8 pontos percentuais. Como o intervalo de confiança no teste de diferença de médias inclui o zero, essa diferença de 0,8 pontos percentuais não é estatisticamente significativa. Ou seja, não podemos concluir que há diferencial de gênero por raça.

Do mesmo modo que no item anterior, podemos obter os mesmos resultados por meio de uma regressão. Neste caso, precisamos interagir a variável de raça e gênero, uma vez que queremos ver se há diferenças de gênero por raça.

Veja o código
# Calculando a diferença de médias por MQO
names_data <- names_data |> 
  mutate(black_fem = black*female) # cria variável de interação

mod_2 <- lm(call_back ~ black+black_fem, data = names_data)
mod_2

Call:
lm(formula = call_back ~ black + black_fem, data = names_data)

Coefficients:
(Intercept)        black    black_fem  
    0.09651     -0.03822      0.00799  
Veja o código
# Resultados completos para inferência
summary(mod_2)

Call:
lm(formula = call_back ~ black + black_fem, data = names_data)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.09651 -0.09651 -0.06628 -0.06628  0.94171 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.096509   0.005505  17.531  < 2e-16 ***
black       -0.038221   0.012835  -2.978  0.00292 ** 
black_fem    0.007990   0.013174   0.607  0.54421    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.2717 on 4867 degrees of freedom
Multiple R-squared:  0.003541,  Adjusted R-squared:  0.003132 
F-statistic: 8.648 on 2 and 4867 DF,  p-value: 0.0001781

Interpretação: O intercepto retorna a taxa de retorno quando black = 0 e quando o termo de interação é zero, ou seja, o intercepto é a taxa para homens brancos. Como vemos, a dummy de raça é significativa, dado que seu coeficiente é duas vezes maior que o desvio-padrão, mas a interação entre raça e gênero não é. Assim, concluímos que não há evidências de que haja distinção entre homens e mulheres quando controlado por raça.

c. Qual é a diferença nas taxas de retorno entre currículos de alta qualidade e baixa qualidade? Qual é a diferença nas taxas entre currículos de alta e baixa qualidade para candidatos brancos? E para candidatos afro-americanos? Existe uma diferença significativa nessa diferença entre alta e baixa qualidade para brancos em comparação com afro-americanos?

Assim como nos casos anteriorres, podemos abordar a questão do diferencial da qualidade dos currículos fazendo a análise separada por grupos. No dicionário de variáveis, vemos que a variável high = 1 indica se o currículo é de alta qualidade. Abaixo segue a solução utilizando regressão:

Veja o código
# Calculando a diferença de médias por MQO
names_data <- names_data |> 
  mutate(black_high = black*high) # cria variável de interação

mod_3 <- lm(call_back ~ high, data = names_data)
mod_4 <- lm(call_back ~ black+ high + black_high, data = names_data)
Veja o código
# Resultados completos para inferência
summary(mod_3)

Call:
lm(formula = call_back ~ high, data = names_data)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.08749 -0.08749 -0.07343 -0.07343  0.92657 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 0.073432   0.005525  13.291   <2e-16 ***
high        0.014057   0.007796   1.803   0.0714 .  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.272 on 4868 degrees of freedom
Multiple R-squared:  0.0006675, Adjusted R-squared:  0.0004622 
F-statistic: 3.251 on 1 and 4868 DF,  p-value: 0.07142
Veja o código
summary(mod_4)

Call:
lm(formula = call_back ~ black + high + black_high, data = names_data)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.10793 -0.08498 -0.06705 -0.06188  0.93812 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.084983   0.007801  10.895   <2e-16 ***
black       -0.023102   0.011032  -2.094   0.0363 *  
high         0.022948   0.011007   2.085   0.0371 *  
black_high  -0.017781   0.015566  -1.142   0.2534    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.2716 on 4866 degrees of freedom
Multiple R-squared:  0.0044,    Adjusted R-squared:  0.003787 
F-statistic: 7.169 on 3 and 4866 DF,  p-value: 8.442e-05

Interpretação:

A partir do modelo 3, a taxa de retorno de contato (callback) para currículos de baixa qualidade é 0,073, e a taxa de retorno de contato para currículos de alta qualidade é 0,073 + 0,014 = 0,087. A diferença é 0,014, que não é estatisticamente significativa ao nível de 5%, mas é significativa ao nível de 10% (veja o p-valor).

A partir do modelo 4, a diferença entre (alta qualidade) − (baixa qualidade) para os brancos é 0,023, e para os negros é 0,023 − 0,018 = 0,005; a diferença entre negros e brancos é −0,018, o que não é estatisticamente significativo ao nível de 5%.

d. Os autores do estudo afirmam que a raça foi atribuída aleatoriamente aos currículos. Existe alguma evidência de atribuição não aleatória?

Quando a atribuição aleatória é realizada, espera-se que caracterísiticas dos indivíduos determinadas antes do tratamento não sejam distintas entre os dois grupos. Como os autores aleatorizaram apenas os nomes dos currículos, podemos montar uma tabela de balanceamento de covariáveis pré-determinadas utilizando as demais informações da base de dados. Caso não existam diferenças significativas entre grupo de controle e tratamento para diversas dessas variáveis, teremos evidências que mostram que a atribuição de tratamento foi de fato aleatória.

Como mostram os dados da Tabela 1, há evidências de que a atribuição dos nomes foi, de fato, aleatória. Isto porque apenas uma das variáveis pré-determinadas mostrou diferença significativa, o que pode ter ocorrido apenas por acaso. Assim, não há evidência de diferenças sistemáticas entre os grupos antes do tratamento. 2

Tabela 1: Balanceamento de covariáveis entre tratamento e controle
Médias
Diferença
Controle (black = 0) Tratamento (black = 1)
A. Características do CV
Número de empregos listados 3.664 3.658 -0.006
(0.035)
Anos de experiência 7.856 7.830 -0.027
(0.145)
Menciona honrarias 0.054 0.051 -0.003
(0.006)
Experiência de voluntariado 0.409 0.414 0.006
(0.014)
Experiência militar 0.092 0.102 0.009
(0.008)
Lacunas no histórico de emprego 0.450 0.446 -0.004
(0.014)
Trabalhou durante os estudos 0.558 0.561 0.003
(0.014)
Endereço de e-mail no currículo 0.479 0.480 0.001
(0.014)
Habilidades em informática 0.809 0.832 0.024
(0.011)
Habilidades especiais 0.330 0.327 -0.003
(0.013)
Possui diploma universitário 0.716 0.723 0.007
(0.013)
B. Características da vaga
Experiência mínima exigida 2.913 2.917 0.004
(0.104)
Empregador é EOE 0.291 0.291 -0.000
(0.013)
Vaga de gerente 0.152 0.152 -0.000
(0.010)
Vaga de supervisor 0.077 0.077 -0.000
(0.008)
Vaga de secretário(a) 0.333 0.333 0.000
(0.014)
Vaga de apoio administrativo 0.119 0.119 -0.000
(0.009)
Vaga de representante de vendas 0.151 0.151 -0.000
(0.010)
Vaga de vendedor(a) de varejo 0.168 0.168 0.000
(0.011)
Anúncio menciona algum requisito 0.787 0.787 0.000
(0.012)
Requisito de experiência 0.435 0.435 -0.000
(0.014)
Requisito de habilidades de comunicação 0.125 0.125 0.000
(0.009)
Requisito educacional 0.107 0.107 0.000
(0.009)
Requisito de habilidades em informática 0.437 0.437 0.000
(0.014)
Requisito de habilidades organizacionais 0.073 0.073 -0.000
(0.007)
Setor: indústria de manufatura 0.083 0.083 -0.000
(0.008)
Setor: transporte/comunicação 0.030 0.030 0.000
(0.005)
Setor: finanças, seguros, imóveis 0.085 0.085 -0.000
(0.008)
Setor: comércio atacadista ou varejista 0.214 0.214 0.000
(0.012)
Setor: serviços empresariais e pessoais 0.268 0.268 -0.000
(0.013)
Setor: saúde, educação e serviços sociais 0.155 0.155 -0.000
(0.010)
Setor desconhecido/outro 0.165 0.165 0.000
(0.011)
Variável de Resultado
Callback 0.097 0.064 -0.032
(0.008)
Notas: erros-padrão robustos (HC1) entre parênteses. As diferenças de médias são estimadas por regressão de cada covariável sobre uma dummy de tratamento (black).

Anexo - Prompt para construção da tabela de balancemaneto de covariáveis.

Claude, eu preciso formatar uma tabela de balanceamento de covariáveis. A tabela deverá ter três colunas principais: valores médios do grupo de controle, valores médios do grupo de tratamento e a estimativa da diferença da média dos dois grupos. A diferença da média dever ser obtida por meio de uma regressão, em que a variável black é uma dummy que foi definida de modo aleatório. Black = 0 é o grupo de controle e black = 1 o grupo de tratamento. Na tabela, eu gostaria que na linha abaixo da estimativa da diferenças de médias fosse reportado o desvio-padrão robusto.

A tabela deve ser construída usando o pacote do R gt. Além disso, o arquivo será exportado para html e pdf. Assim, não quero uma formatação rebuscada com cores, etc. Quero uma tabela simples em formato de publicação em periódicos acadêmicos.

A seguir a lista de variáveis pré determinadas do experimento:

Detailed Information on Resume ofjobs number of jobs listed on resume yearsexp number of years of work experience on the resume honors 1=resume mentions some honors volunteer 1=resume mentions some volunteering experience military 1=applicant has some military experience empholes 1=resume has some employment holes workinschool 1=resume mentions some work experience while at school email 1=email address on applicant’s resume computerskills 1=resume mentions some computer skills specialskills 1=resume mentions some special skills college applicant has college degree or more

Detailed Information Concerning Employer expminreq min experience required, if any eoe 1=ad mentions employer is EOE manager 1=manager wanted supervisor 1=supervisor wanted secretary 1=secretary wanted offsupport 1=office support salesrep 1=sales representative wanted retailsales 1=retail sales worker wanted req 1=ad mentions any requirement for job expreq 1=ad mentions some experience requirement comreq 1=ad mentions some communication skills requirement educreq 1=ad mentions some educational requirement compreq 1=ad mentions some computer skill requirement orgreq 1=ad mentions some organizational skills requirement manuf 1=employer industry is manufacturing transcom 1=employer industry is transport/communication bankreal 1=employer industry is finance, insurance, real estate trade 1=employer industry is wholesale or retail trade busservice 1=employer industry is business and personal services othservice 1=employer industry is health, educ. and social services missind 1=employer industry is other/unknown

Separe a tabela em dois painéis: um para as informações do currículo e outro sobre as características do empregador. Após os dois painéis, adicionar uma linha com o resultado para variável tratamento de interesse: call_back, que informa se o candidato teve ou não retorno após se candidatar a vaga.

Recursos adicionais para aprofundar e praticar (opcional)

Observação: Existem vários pacotes que permitem a codificação de tabelas de resultado formatadas no R. O pacote gt é um dos mais complexos. A codificação de tabelas é uma ótima atividade para receber ajuda do seu estagiário IA.

Notas de rodapé

  1. É possível chegar à mesma conclusão analisando a estatística t ou o p-valor.↩︎

  2. Para essa tabela, eu pedi auxílio do Claude. Veja o prompt inicial no anexo. Depois, revisei o código e fiz apenas um ajuste pontual para corrigir o tipo da variável expminreq, que tinha sido lida como string e não numérica pelo comando read_excel.↩︎