Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Explorando a Base de Dados do artigo "Temperature and Decisions: Evidence from 207,000 Court Cases" de Heyes & Saberian (2019).

0 votos
19 visitas
perguntada Mai 18 em Economia por João Isidio (26 pontos)  
editado Mai 18 por João Isidio

Reprodução em R dos principais resultados do artigo - Por João Isidio Freitas Martins. Apresentado no dia 11/05/2021.

Temperature and Decisions: Evidence from 207,000 Court Cases
Anthony Heyes & Soodeh Saberian - University of Ottawa

American Economic Journal: Applied Economics
Vol. 11, n° 2 (pp. 238-65), Abril 2019
https://doi.org/10.1257/app.20170223

Compartilhe

1 Resposta

0 votos
respondida Mai 18 por João Isidio (26 pontos)  
editado Mai 18 por João Isidio

Referência e motivação

O objetivo do trabalho é o de avaliar se existe impacto da temperatura diária nas decisões de juízes de imigração dos EUA, não obstante estes realizarem suas tarefas em instalações internas climatizadas.

A importância do trabalho reside no fato de que decisões com consequências duradouras podem estar sistematicamente influenciadas por fatores irrelevantes, gerando clara perda de bem-estar aqueles que tiveram recusados o pedido de imigração por motivo tão fútil.

Um dos aspectos mais interessantes do trabalho é que nele os agentes decisores são observados como organismos biológicos (“wet machines”), sensíveis ao ambiente no qual estão inseridos.

Outro aspecto relevante do trabalho é a replicabilidade. Todos os dados do artigos estão disponíveis no link https://www.openicpsr.org/openicpsr/project/113722/version/V1/view, bastando apenas o usuário realizar cadastro.

Os dados encontram-se minimamente tratados e arranjados, permitindo ao usuário a imediata avaliação. No mesmo link é possível também ter acesso aos códigos em STATA, sem os quais a reprodução deste trabalho teria sido impossível, afinal, muitas das escolhas metodológicas não foram explicitadas no corpo do artigo, mas sim no código.

Mesmo dispondo de todos estes recursos, a tradução dos comandos em STATA para o R foi trabalhosa. A verdade é que existem uma série de processos implícitos que só puderam ser verificados com a reprodução linha a linha dos códigos.

Revisão da literatura

Existem alguns estudos de como a temperatura externa diária pode afetar o desempenho intelectual.

Graff Zivin et al. (2018) mostrou que uma temperatura (externa) acima de 79°F em um dia específico prejudica o desempenho das crianças em tarefas de matemática (mas não de leitura).

Park (2016) investigou a relação entre a temperatura externa diária e os exames finais do ensino médio na cidade de Nova York e descobriu que, em comparação com um dia de 72°F, fazer um exame em um dia de 90°F reduz o desempenho de um aluno típico em 0,19 desvios padrão.

Com relação a estudos que se dão no contexto de decisões de tribunal Chen (2016) descobriu que a probabilidade de uma decisão favorável por juízes de imigração dos EUA aumenta em 1,4% no dia seguinte a uma vitória da equipe local da NFL, enquanto Danzinger et al. (2011) conclui que a probabilidade de julgamentos favoráveis pelos conselhos de liberdade condicional israelenses é maior após uma pausa para comer.

Base de dados

Os registros de julgamentos de pedidos de asilo nos EUA tem como fonte o sítio asylumlaw.org. De lá foram extraídas as 206.924 decisões de 43 cidades onde as cortes de imigração estão localizadas no período que vai de Janeiro de 2000 a Setembro de 2004 (58 meses). Na base estão disponíveis campos como:

  • Data da audiência, ID do juiz (266 juízes), nacionalidade do requerente e categoria de aplicação.

Do National Oceanic and Atmospheric Administration (NOAA) foram extraídas as informações de clima. Alguns campos disponíveis são:

  • Temperatura do ar, ponto de orvalho (condensação da água), pressão do ar, precipitação e velocidade do vento
  • Nebulosidade - Northeast Regional Climate Center (NRCC)

Os dados de poluição são da United States Environmental Protection Agency (USEPA), de lá formar extraídas as informações de material particulado (\(PM_{2.5}\)), monóxido de carbono (\(CO\)) e ozônio (\(O_3\)).

Os dados de clima e poluição são fornecidos em base horária, e para o exercício do artigo foram computadas médias diárias para os períodos de 6 da manhã a 4 da tarde.

Metodologia estatística: Estimação

No trabalho estimou-se o seguinte modelo de probabilidade linear com inserção de efeitos fixos:

\[ g_{it}=\beta_0+\beta_1 temp_{it}+W_{it}\beta_2+P_{it}\beta_3+X_{it}\beta_4+\gamma_i+\Psi_{ct}+\theta_t+\epsilon_{it} \]

  • \(g_{it}\): Dummy da aprovação ou não do pleito \(i\) na data \(t\)
  • \(temp_{it}\): Temperatura média das 6h as 16h na data \(t\) do caso \(i\)
  • \(W_{it}, P_{it}, X_{it}\): Variáveis de clima, poluição e de características do caso \(i\) na data \(t\)
  • \(\gamma_i\): Juiz do caso \(i\) na data \(t\)
  • \(\Psi_{ct}\): Cidade-Mês do caso \(i\) na data \(t\)
  • \(\theta_t\): Dia da semana e Ano do caso \(i\) na data \(t\)
  • \(\epsilon_{it}\): Erros do pleito \(i\) na data \(t\)

No trabalho adotaram-se clusters de Cidade-Mês para o estimador da matriz de variância-covariância \(\hat\sigma^2\), mais especificamente, usou-se de estimadores sanduíche clusterizados para ajustar a inferência quando os erros são correlacionados dentro (mas não entre) os clusters.

Figura

A figura evidencia a natureza binária da variável de interesse, bem como as dificuldades associadas aos resíduos (em vermelho está reta de regressão estimada).

A estimação deste modelo tem como fragilidade o fato de que os valores estimados da variável resposta podem estar fora do intervalo [0,1], que é um requisito básico de uma função de probabilidade.

Quanto aos erros de um modelo de probabilidade linear, estes não serão normais, muito menos homocedásticos, o que justifica a escolha de um estimador alternativo para variância.

A imagem será apresentada aqui.

Resultados econométricos

A temperatura da variável de interesse está dividida por mil, assim um aumento de 10° dará um interpretação percentual ao resultado.

A imagem será apresentada aqui.

No principal resultado (1), é possível observar que aumento de 10°F na temperatura reduz a probabilidade de uma decisão favorável ao requerente em 1,075%. Comparado a taxa de concessão média de 16,4%, isso representaria uma redução de 6,55% de tal patamar.

Código

Basta cópiar e colar os comandos abaixo no Rmarkdown para que toda a apresentação e resultados sejam replicados. Deve-se verificar antes a disponibilidade de memória e RAM e a instalação prévia dos pacotes mencionados e do \(\LaTeX\).

enter code here
 ---
 title: "Temperature and Decisions: Evidence from 207,000 Court Cases"
 subtitle: "Reprodução em R - Por João Isidio Freitas Martins"
 author: |
         | Anthony Heyes & Soodeh Saberian
         | University of Ottawa
 institute: |
            | American Economic Journal: Applied Economics
            | Vol. 11, n° 2 (pp. 238-65), Abril 2019
            |
            | https://doi.org/10.1257/app.20170223
 date: "11/05/2021"
 output:
   beamer_presentation:
     theme: "Antibes"
     colortheme: "default"
     fonttheme: "structurebold"
 header-includes:
     - \usepackage{caption}
 ---

 ```{r setup, include=FALSE}
 knitr::opts_chunk$set(echo = FALSE)

 library(dplyr)
 library(ggplot2)
 library(haven)
 library(lubridate)
 library(ggthemes)
 ```

 ## Referência e motivação

 - Impacto da temperatura nas decisões de juízes de imigração dos EUA
     - Espaços internos e climatizados
 - Decisões com consequências duradouras sistematicamente influenciadas por fatores irrelevantes
     - Perda de bem-estar
 - Agentes como organismos biológicos (“wet machines”), sensíveis ao ambiente.
 - Replicabilidade
   - Dados minimamente tratados e arranjados
   - Código em STATA: A tradução para o R foi trabalhosa, pois existem processos implícitos.

 ## Revisão da literatura

 - Estudos de como a temperatura externa diária afeta o desempenho intelectual:
   - Graff Zivin et al. (2018) mostrou que uma temperatura (externa) acima de 79°F em um dia específico prejudica o      desempenho das crianças em tarefas de matemática (mas não de leitura).
   - Park (2016) investiga a relação entre a temperatura externa diária e os exames finais do ensino médio na cidade de      Nova York e descobre que, em comparação com um dia de 72°F, fazer um exame em um dia de 90°F reduz o desempenho de um      aluno típico em 0,19 desvios padrão.
   - Chen (2016) descobriu que a probabilidade de uma decisão favorável por juízes de imigração dos EUA aumenta em 1,4%      no dia seguinte a uma vitória da equipe local da NFL.
   - Danzinger et al. (2011) conclui que a probabilidade de julgamentos favoráveis pelos conselhos de liberdade      condicional israelenses é maior após uma pausa para comer.

 ## Base de dados

 - Julgamentos de pedidos de asilo nos EUA
   - 206.924 decisões - asylumlaw.org
     - Data da audiência, ID do juiz (266 juízes), nacionalidade do requerente e categoria de aplicação.
     - 58 meses - Jan/2000-Set/2004
     - 43 cidades onde as cortes de imigração estão localizadas

 - Clima
   - Temperatura do ar, ponto de orvalho (condensação da água), pressão do ar, precipitação e velocidade do vento -      National Oceanic and Atmospheric Administration (NOAA)
   - Nebulosidade - Northeast Regional Climate Center (NRCC)

 - Poluição
   - Material particulado ($PM_{2.5}$), monóxido de carbono (CO) e ozônio ($O_3$) - United States Environmental      Protection Agency (USEPA)

 - Foram computadas médias diárias para os períodos de 6 da manhã a 4 da tarde.

 ## Metodologia estatística: Estimação

 Modelo de probabilidade linear com inserção de efeitos fixos:
 $$
 g_{it}=\beta_0+\beta_1 temp_{it}+W_{it}\beta_2+P_{it}\beta_3+X_{it}\beta_4+\gamma_i+\Psi_{ct}+\theta_t+\epsilon_{it}
 $$

 - $g_{it}$: _Dummy_ da aprovação ou não do pleito $i$ na data $t$
 - $temp_{it}$: Temperatura média das 6h as 16h na data $t$ do caso $i$
 - $W_{it}, P_{it}, X_{it}$: Variáveis de clima, poluição e de características do caso $i$ na data $t$
 - $\gamma_i$: Juiz do caso $i$ na data $t$
 - $\Psi_{ct}$: Cidade-Mês do caso $i$ na data $t$
 - $\theta_t$: Dia da semana e Ano do caso $i$ na data $t$
 - $\epsilon_{it}$: Erros do pleito $i$ na data $t$

 Adoção de _clusters_ de Cidade-Mês para $\hat\sigma^2$. Uso estimadores sanduíche clusterizados para ajustar a      inferência quando os erros são correlacionados dentro (mas não entre) os _clusters_.

 ## Figura

 ```{r}
 base<- haven::read_dta(file = "2.data/matched.dta")

 base$year<- lubridate::year(base$date)
 base$month<- lubridate::month(base$date)
 base$cm<- paste0(base$city,"-",base$month)
 base$dayofweek<- lubridate::wday(base$date)

 names(base)[names(base) %in% c("city","c_asy_type","nat_name")]<- 
   c("ct","type","nati")

 base$temp6t410<-base$temp6t4/1000
 base$ltemp6t410<-base$ltemp6t4/1000
 base$letemp6t410<-base$letemp6t4/1000

 # O STATA descarta os elementos vazios, o R não (apenas NAs)
 filtro<- base$nati == "" | base$type == "" | base$cm == ""

 base<- base[!filtro,]

 rm(filtro)

 base_6t4<-
   lm(formula = res~
        temp6t410+press6t4+dew6t4+prcp6t4+wind6t4+skycover+
        ozone+co+pm25+
        factor(dayofweek)+
        factor(nati)+
        factor(type)+
        factor(year)+
        factor(cm)+
        factor(chair), # Fatores sendo processados como númerico
      data = base)
 ```

 ```{r warning=FALSE, fig.height=7, fig.width=10}
 ggplot(data = base,
        mapping = aes(x = temp6t410, y = res))+
   geom_point()+
   geom_abline(intercept = base_6t4$coefficients["(Intercept)"],
               slope = base_6t4$coefficients["temp6t410"], color = "red", size = 1.5)+

   ylab(label = "g_{it}")+
   xlab(label = "temp_{it}")+
   annotate(geom = "label", x = 0.005, y = 0.25, hjust =0,
            fill = "#56B4E9", colour = "white", fontface = "bold",
            label = "Problemas com o MPL:\n- Resíduos não tem distribuição Normal\n- Pode assumir valores negativos e      maiores que um\n- Heterocedasticidade")+
   labs(caption = "Obs1: Temperatura em °F/1000.\nObs2: Média calculada de 6h as 16h.")+

   ggtitle(label = "Decisão do pleito Vs. Temperatura média diária",
           subtitle = "Reta de regressão")+

   ggthemes::theme_fivethirtyeight()+

   theme(plot.title = element_text(hjust = 0.5),
         plot.subtitle = element_text(size = 12, hjust = 0.5),
         axis.text.x = element_text(angle = 90, size = 8, vjust = 0.4),
         axis.title.x = element_text(),
         legend.title = element_blank(),
         plot.caption = element_text(size = 8), )
 ```

 ## Resultados econométricos

 ```{r}
 matrix<- sandwich::vcovCL(base_6t4, cluster = ~ cm)

 base_6t4<-lmtest::coeftest(base_6t4, vcov = matrix, type = "HC1")

 # Lag

 lag_6t4<-
   lm(formula = res~
        temp6t410+ltemp6t410+
        press6t4+dew6t4+prcp6t4+wind6t4+skycover+
        ozone+co+pm25+
        factor(dayofweek)+
        factor(nati)+
        factor(type)+
        factor(year)+
        factor(cm)+
        factor(chair), # Fatores sendo processados como númerico
      data = base)

 matrix<- sandwich::vcovCL(lag_6t4, cluster = ~ cm)

 lag_6t4<-lmtest::coeftest(lag_6t4, vcov = matrix, type = "HC1")

 # Lead

 lead_6t4<-
   lm(formula = res~
        temp6t410+letemp6t410+
        press6t4+dew6t4+prcp6t4+wind6t4+skycover+
        ozone+co+pm25+
        factor(dayofweek)+
        factor(nati)+
        factor(type)+
        factor(year)+
        factor(cm)+
        factor(chair), # Fatores sendo processados como númerico
      data = base)

 matrix<- sandwich::vcovCL(lead_6t4, cluster = ~ cm)

 lead_6t4<-lmtest::coeftest(lead_6t4, vcov = matrix, type = "HC1")

 # Lead and lag

 all_6t4_one<-
   lm(formula = res~
        temp6t410+ltemp6t410+letemp6t410+
        press6t4+dew6t4+prcp6t4+wind6t4+skycover+
        ozone+co+pm25+
        factor(dayofweek)+
        factor(nati)+
        factor(type)+
        factor(year)+
        factor(cm)+
        factor(chair), # Fatores sendo processados como númerico
      data = base)

 matrix<- sandwich::vcovCL(all_6t4_one, cluster = ~ cm)

 all_6t4_one<-lmtest::coeftest(all_6t4_one, vcov = matrix, type = "HC1")
 ```

 \captionsetup[table]{labelformat=empty}

 ```{r warning=FALSE, results='asis', tab.cap = NULL}
 stargazer::stargazer(base_6t4, lag_6t4,lead_6t4,all_6t4_one,
                      # type = "text",
                      # covariate.labels = c("Temperatura_t",
                      #                      "Temperatura_{t-1}",
                      #                      "Temperatura_{t+1}"), 
                      dep.var.labels = "Decisão",
                      header = FALSE,
                      font.size = "tiny",
                      notes = "Demais variáveis omitidas do resultado.",
                      omit = c("Constant","press6t4","dew6t4",
                               "prcp6t4","wind6t4","skycover",
                               "ozone","co","pm25",
                               "dayofweek", "nati", "type",
                               "year","cm","chair"))
                      # omit.labels = c("Constante",
                      #                 "Pressão do ar",
                      #                 "Ponto de orvalho",
                      #                 "Precipitação",
                      #                 "Velocidade do vento",
                      #                 "Nebulosidade",
                      #                 "Ozônio",
                      #                 "Monóxido de carbono",
                      #                 "Material particulado",
                      #                 "Dia da semana",
                      #                 "Naturalidade",
                      #                 "Tipo",
                      #                 "Ano",
                      #                 "Cidade-Mês",
                      #                 "Juiz"),
                      # omit.yes.no = c("Sim","Não"))
 ```


 Um aumento de 10°F na temperatura reduz a probabilidade de uma decisão favorável ao requerente em 1,075%. Comparado a      taxa de concessão média de 16,4%, isso representaria uma redução de 6,55% de tal patamar.

 ## Código

 ```{r echo=TRUE, eval=FALSE}
 base_6t4<-
   lm(formula = res~
        temp6t410+press6t4+dew6t4+
        prcp6t4+wind6t4+skycover+
        ozone+co+pm25+
        factor(dayofweek)+
        factor(nati)+
        factor(type)+
        factor(year)+
        factor(cm)+
        factor(chair),
      data = base)
 matrix<- sandwich::vcovCL(base_6t4, cluster = ~ cm)
 base_6t4<-lmtest::coeftest(base_6t4,vcov = matrix,
                            type = "HC1")
 ```
...