Inferência Causal

Estratificação e pós-estratificação

Prof. Carlos Trucíos
ctrucios@unicamp.br

Instituto de Matemática, Estatística e Computação Científica (IMECC),
Universidade Estadual de Campinas (UNICAMP).

Introdução

Introdução

“Block what you can and randomize what you cannot”.

Box et al. (1978, pag 103)

Estratificação

Estratificação

Um CRE pode, ao acaso, gerar uma alocação do tratamento de forma indesejada.

Por exemplo, pense num CRE com covariavel discreta \(X \in \{1, \cdots, K\}\) e defina \[n_{[k]} = \# \{i: X_i = k \}, \quad \pi_{[k]} = n_{[k]}/n,\] como o número e a proporção de unidades na categoria (estrato) \(k\).

Um CRE atribui \(n_1\) unidades ao tratamento e \(n_0\) ao controle (placebo). Assim, \[n_{[k]1} = \# \{ i: X_i = k, Z_i = 1\} \quad e \quad n_{[k]0} = \# \{ i: X_i = k, Z_i = 0\},\] são o número de unidades nos grupos de tratamento e controle no estrato \(k\), respectivamente.

Para algum \(k\), é possível, com alta probabilidade, que \(\dfrac{n_{[k]1}}{n_1} - \dfrac{n_{[k]0}}{n_0}\) seja grande.

Estratificação

Qual o problema em termos, para algum estrato \(k\), \(n_{[k]1} \big / n_1 - n_{[k]0} \big / n_0\) grande?
  • Dados desbalanceados para essa covariável.
  • Dados desbalanceados deterioram a qualidade do experimento.
  • Dados desbalanceados dificultam a interpretação dos resultados, pois a diferença nos resultados podem ser atribuidos ao tratamento ou ao desbalanceamento.

E agora, José?

Estratificação

Simulação

Code
n <- 20
n_masc <- 10
n_feme <- 10
n_1 <- 10
n_0 <- 10
set.seed(123)
x <- sample(c(rep(1, n_masc), rep(0, n_feme)))
z_aux <- combn(n, n_1)
z <- matrix(NA, ncol = ncol(z_aux), nrow = n)
diff_estrato_1 <- c()
diff_estrato_2 <- c()
for (i in 1:ncol(z_aux)) {
  z[, i] <- ifelse(1:n %in% z_aux[, i], 1, 0)
  n_masc_trat <- sum(x[z[, i] == 1])
  n_masc_ctrl <- sum(x[z[, i] == 0])
  diff_estrato_1[i] <- n_masc_trat / n_1 - n_masc_ctrl / n_0
  
  n_feme_trat <- n_1 - n_masc_trat
  n_feme_ctrl <- n_0 - n_masc_ctrl
  diff_estrato_2[i] <- n_feme_trat / n_1 - n_feme_ctrl / n_0
}
z_sim <- z
table(diff_estrato_1)
diff_estrato_1
   -1  -0.8  -0.6  -0.4  -0.2     0   0.2   0.4   0.6   0.8     1 
    1   100  2025 14400 44100 63504 44100 14400  2025   100     1 
Code
table(diff_estrato_2)
diff_estrato_2
   -1  -0.8  -0.6  -0.4  -0.2     0   0.2   0.4   0.6   0.8     1 
    1   100  2025 14400 44100 63504 44100 14400  2025   100     1 

Estratificação

Simulação

Code
Y0 <- rep(0, n)
Y0[x == 0] <- Y0[x == 0] + 5
tau <- 0
Y1 <- tau + Y0
# Focamos apenas nos casos completamente balanceados:
index_completamente_balanceados <- which(diff_estrato_1 == 0)
tau <- c()
for (i in index_completamente_balanceados) {
  tau[i] <- mean(Y1[z[, i] == 1]) - mean(Y0[z[, i] == 0])
}
tau <- tau[!is.na(tau)]
summary(tau)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      0       0       0       0       0       0 

Estratificação

Simulação

Code
# Focamos em alguns casos desbalanceados:
index_desbalanceados <- which(diff_estrato_1 > 0.4)
tau <- c()
for (i in index_desbalanceados) {
  tau[i] <- mean(Y1[z[, i] == 1]) - mean(Y0[z[, i] == 0])
}
tau <- tau[!is.na(tau)]
summary(tau)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 -5.000  -3.000  -3.000  -3.048  -3.000  -3.000 

Simulação

Code
# Focamos em alguns casos desbalanceados:
index_desbalanceados <- which(diff_estrato_1 < -0.4)
tau <- c()
for (i in index_desbalanceados) {
  tau[i] <- mean(Y1[z[, i] == 1]) - mean(Y0[z[, i] == 0])
}
tau <- tau[!is.na(tau)]
summary(tau)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  3.000   3.000   3.000   3.048   3.000   5.000 

Estratificação

Como podemos evitar o problema de desbalanceamento?

SRE: Stratified Randomized Experiments

No SRE, as unidades são agrupadas em estratos segundo alguma caracteristica (pre-tratamento). Dentro de cada estrato, um CRE é aplicado. Isto faz com que os métodos para CRE possam ser aplicados dentro de cada estrato. Contudo, o objetivo não está em testar as hipóteses dentro de cada estrato, mas para a população toda.

Estratificação

Definição: SRE

Fixando os \(n_{[k]1}\)s ou \(n_{[k]0}\)s. Realizamos \(K\) CREs independetes dentro de cada um dos \(K\) estratos da covariável discreta \(X\).

Note que, pelo princípio básico de contagem, o número total de configurações sob SRE é \[\prod_{k = 1}^K \binom{n[k]}{n_{[k]1}},\]

em que cada configuração tem a mesma probabilidade.

Stratified Randomized Experiments também é conhecido como Randomized Block Design

Estratificação

Dentro de cada estrato \(k\), a proporção de unidades recebendo o tratamento é dada por \[e_{[k]} = \dfrac{n_{[k]1}}{n_{[k]}},\] quantidade conhecida como propensity score.

Qual a diferença entre SRE e CRE?

  1. \(\prod_{k = 1}^K \binom{n[k]}{n_{[k]1}} < \binom{n}{n_1}.\)
  2. \(e_{[k]}\) é fixo no SRE mas aleatório no CRE.

Estratificação

Para cada unidade \(i\), temos:

  • Resultados potenciais: \(Y_i(1)\) e \(Y_i(0)\).
  • Efeito causal individual: \(\tau_i = Y_i(1) - Y_i(0)\).

Para cada estrato \(k\), temos:

  • Efeito causal médio (especifico de cada estrato): \(\tau_{[k]} = n_{[k]}^{-1} \displaystyle \sum_{X_i = k} \tau_i\).

Assim, o efeito causal médio é dado por: \[\tau = n^{-1} \displaystyle \sum_{i = 1}^n \tau_i = n^{-1} \sum_{k = 1}^K \sum_{X_i = k} \tau_i = \sum_{k = 1}^K \pi_{[k]}\tau_{[k]}.\]

Inferência sob SRE

FRT sob SRE

Seja \[H_{0F}: Y_i(1) = Y_i(0), \quad \forall i = 1, \cdots, n.\]

A ideia fundamenta do FRT pode ser aplicada a qualquer experimento randomizado.

Seja a estatística \[T = T(\textbf{Z}, \textbf{Y}, \textbf{X}),\] em que \(\textbf{Z}\) é o vetor indicador de tratamento, \(\textbf{Y}\) é o vetor de resultados observados e \(\textbf{X}\) é a covariável (ou matriz de covariáveis).

Note que sob SRE, é importante notar que no vetor de tratamentos (\(\textbf{Z}\)) a permutação aleatória deve ser feita dentro de cada estrato (motivo pelo qual o teste é muitas vezes chamado de Conditional Randomization Test ou Conditional Permutation Test). Ademais, a estatística utilizada deve evidenciar a natureza do SRE.

FRT sob SRE

Exemplo 1 (Estimador Estratificado)

\[\hat{\tau}_S = \displaystyle \sum_{k = 1}^K \pi_{[k]}\hat{\tau}_{[k]},\] em que \(\hat{\tau}_{[k]} = n_{[k]1}^{-1} \displaystyle \sum_{i = 1}^n I(X_i = k, Z_i = 1)Y_i - n_{[k]0}^{-1} \sum_{i = 1}^n I(X_i = k, Z_i = 0)Y_i\).

FRT sob SRE

Exemplo 1 (Estimador Estratificado)

Implementação:

Code
ee <- function(y, z, x) {
  x_levels <- unique(x)
  K <- length(x_levels)
  pi_k <- rep(0, K)
  tau_k <- rep(0, K)
  n <- length(z)
  for (k in 1:K) {
    x_k <- x_levels[k]
    z_k <- z[x == x_k]
    y_k <- y[x == x_k]
    pi_k[k] <- length(z_k)/n
    tau_k[k] <- mean(y_k[z_k == 1]) - mean(y_k[z_k == 0])
  }
  tau_S <- sum(pi_k * tau_k)
  return(tau_S)
}

FRT sob SRE

Exemplo 2 (Combinação da estatística de postos de Wilcoxon)

\[W_S = \displaystyle \sum_{k = 1}^K c_{[k]} W_{[k]},\] em que \(W_{[k]}\) é a estatística soma de postos de Wilcoxon para o estrato \(k\), e escolhas comuns para \(c_{[k]}\) são \[c_{[k]} = \dfrac{1}{n_{[k]1} n_{[k]0}} \quad ou \quad c_{[k]} = \dfrac{1}{n_{[k]} + 1}\]

FRT sob SRE

Exemplo 2 (Combinação da estatística de postos de Wilcoxon)

Implementação

Code
comb_wilcoxon <- function(y, z, x) {
  x_levels <- unique(x)
  K <- length(x_levels)
  c_k <- rep(0, K)
  w_k <- rep(0, K)
  for (k in 1:K) {
    x_k <- x_levels[k]
    z_k <- z[x == x_k]
    y_k <- y[x == x_k]
    c_k[k] <- 1 / (length(z_k) + 1)
    w_k[k] <- wilcox.test(y_k[z_k == 1], y_k[z_k == 0])$statistic
  }
  w_S <- sum(c_k * w_k)
  return(w_S)
}

FRT sob SRE

Exemplo 3 (Estimador Estratificado Studentizado)

\[t_S = \dfrac{\hat{\tau}_S}{\sqrt{\hat{V}_S}},\] em que \(\hat{V}_S = \displaystyle \sum_{k = 1}^K \pi_{[k]}^2 \Big (\dfrac{\hat{S}^2_{[k]}(1)}{n_{[k]1}} + \dfrac{\hat{S}^2_{[k]}(0)}{n_{[k]0}} \Big ),\) com \(\hat{S}^2_{[k]}(1)\) e \(\hat{S}^2_{[k]}(0)\) sendo as variâncias amostrais para o estrato \(k\) sob tratamento e controle, respectivamente.

FRT sob SRE: Aplicação

No seguinte link encontra-se o dataset utilizado em Koenker e Xiao (2002). Nele, temos informação a respeito da participação (ou não) em um programa de treinamento profissional (treatment), estrato (quarter) e duração antes do emprego (duration) em escala logaritmica.

Utilizaremos FRT com as estatísticas dos exemplos 1 (estimador estratificado) e 2 (Wilcoxon) para testar \[H_{0F}: Y_i(1) = Y_i(0), \quad \forall i\]

FRT sob SRE: Aplicação

Os dados:

Code
dados <- read.table("datasets/Penn46_ascii.txt")
z <- dados$treatment
x <- dados$quarter
y <- log(dados$duration)

Calculando os p-valores:

Code
z_permuta_SRE <- function(z, x) {
  x_levels <- unique(x)
  K <- length(x_levels)
  z_perm <- z
  for (k in 1:K) {
    x_k <- x_levels[k]
    z_perm[x == x_k] <- sample(z[x == x_k])
  }
  return(z_perm)
}

FRT sob SRE: Aplicação

Calculando os p-valores:

Code
mc <- 10^4
estatisticas <- matrix(NA, ncol = 2, nrow = mc)
for (i in 1:mc) {
  z_perm <- z_permuta_SRE(z, x)
  estatisticas[i, 1] <- ee(y, z_perm, x)
  estatisticas[i, 2] <- comb_wilcoxon(y, z_perm, x)
}
Code
# Unilateral p-values
ee_obs <- ee(y, z, x)
wilcoxon_obs <- comb_wilcoxon(y, z, x)
mean(estatisticas[, 1] < ee_obs)
[1] 0.0015
Code
mean(estatisticas[, 2] < wilcoxon_obs)
[1] 5e-04

Neyman sob SRE

Inferência estatística num contexto SRE é construida baseada no fato de que SRE consiste em \(K\) CRE independentes (um para cada estrato).

Para cada estrato, \(\hat{\tau}_{[k]}\) é não viesado para \(\tau_{[k]}\), com variância \[\mathbb{V}(\hat{\tau}_{[k]}) = \dfrac{S^2_{[k]}(1)}{n_{[k]1}} + \dfrac{S^2_{[k]}(0)}{n_{[k]0}} - \dfrac{S^2_{[k]}(\tau)}{n_{[k]}},\] em que \(S^2_{[k]}(1)\), \(S^2_{[k]}(0)\) e \(S^2_{[k]}(\tau)\) são as variâncias dos resultados potenciais e do efeito causal individual para o \(k\)-éssimo estrato.

Assim, o estimador \(\hat{\tau}_S = \displaystyle \sum_{k = 1}^K \pi_{[k]} \hat{\tau}_{[k]}\) é não viesado para \(\tau = \displaystyle \sum_{k = 1}^K \pi_{[k]} \tau_{[k]}\) e tem variância
\(\mathbb{V}(\hat{\tau}_S) = \displaystyle \sum_{k = 1}^K \pi_{[k]}^2 \mathbb{V}(\hat{\tau}_{[k]}).\)

Neyman sob SRE

Um estimador (conservador) para \(\mathbb{V}(\hat{\tau}_S)\) é dado por:

\[\hat{V}_S = \displaystyle \sum_{k = 1}^K \pi_{[k]}^2 \Big(\dfrac{\hat{S}^2_{[k]}(1)}{n_{[k]1}} + \dfrac{\hat{S}^2_{[k]}(0)}{n_{[k]0}} \Big),\] em que \(\hat{S}^2_{[k]}(1)\) e \(\hat{S}^2_{[k]}(0)\) são as variâncias amostrais dos resultados sob tratamento e controle no estrato \(k\).

Seguindo a mesma lógica, um intervalo de confiança (conservador) para \(\tau\) é dado por \[\hat{\tau}_S \pm z_{1-\alpha/2} \sqrt{\hat{V}_S},\] e podemos utilizar \(\hat{\tau}_S \big / \sqrt{\hat{V}_S} \xrightarrow D N(0,1)\) (sob \(H_0\)) para testar \(H_{0N}\).

Neyman sob SRE

Implementação

Code
neyman_sre <- function(y, z, x) {
  x_levels <- unique(x)
  K <- length(x_levels)
  pi_k <- rep(0, K)
  tau_k <- rep(0, K)
  v_k <- rep(0, K)
  n <- length(z)
  for (k in 1:K) {
    x_k <- x_levels[k]
    z_k <- z[x == x_k]
    y_k <- y[x == x_k]
    pi_k[k] <- length(z_k)/n
    tau_k[k] <- mean(y_k[z_k == 1]) - mean(y_k[z_k == 0])
    v_k[k] <- var(y_k[z_k == 1]) / sum(z_k) + var(y_k[z_k == 0]) / sum(1 - z_k)
  }
  tau_s <- sum(pi_k * tau_k)
  v_s <- sum(pi_k^2 * v_k) 
  return(c(tau_s, v_s))
}

Neyman sob SRE: Aplicação

Utilizaremos o mesmo conjunto de dados utilizado na aplicação do FRT sob SRE, mas neste caso queremos testar \[H_{0N}: \tau = 0\]

Code
est_neyman <- neyman_sre(y, z, x)
lim_inf <- est_neyman[1] - 1.96*sqrt(est_neyman[2])
lim_sup <- est_neyman[1] + 1.96*sqrt(est_neyman[2])
c(lim_inf, lim_sup)
[1] -0.15027005 -0.02954287

O programa de treinamento profissional diminuiu (em log) o tempo de duração antes do emprego.

Estratificação: Resumo

  • Estratificação evita o desbalanceamento (e inclussive, evita que \(n_{[k]1}\) ou \(n_{[k]0}\) sejam zero).
  • Ambos abordagens, FRT e Neyman, podem ser facilmente calculadas sob SRE.
  • Estratificação requer que, pre-tratamento, o desenho de estratificação seja especificado. Isto implica que desde o começo deve-se tratar o estudo com muito cuidado e atenção.

Pós-estratificação

Pós-estratificação

  • Pós-estratificação é uma alternativa à estratificação quando esta última não é possível.
  • Quando estratificação não é realizada, uma prática comúm é ajustar por covariáveis.
  • Pós-estratificação é uma forma simples de ajustar por covariáveis.
    • O pesquisador estratifica unidades experimentais com uma covariável de pré-tratamento,
    • estima os efeitos do tratamento dentro dos estratos,
    • usa a média ponderada para estimar a média geral do efeito do tratamento.
  • Pós-estratificaçao pode também reduzir a variância.
  • Em amostras pequenas, a pós-estratificação pode ser prejudicial, especialmente se o número de estratos for grande e a variável de estratificação for mal escolhida.

Pós-estratificação

  • No CRE com covarável discreta \(X\), o número de unidades que recebem o tratamento e o controle dentro de cada estrato é aleatório. Já no SRE estas quantidades são fixas.
  • Se fizermos inferência condicionando em \(\textbf{n} = \{n_{[k]1}, n_{[k]0} \}_{k = 1}^K\), então CRE torna-se SRE. De fato, se nenhum das componentes de \(\textbf{n}\) for zero, temos que \[P_{CRE}(\textbf{Z} = \textbf{z}| \textbf{n}) = \dfrac{1}{\prod_{k=1}^K \binom{n_{[k]}}{n_{[k]1}}}=P_{SRE}(\textbf{Z} = \textbf{z}).\]
  • Ou seja, condicionado em \(\textbf{n}\), podemos analisar CRE com covariável discreta da mesma forma que analisamos SRE.
  • FRT torna-se conditional FRT.

Pós-estratificação

  • Abordagem de Neyman torna-se pós-estratificação, \[\hat{\tau}_{ps} = \displaystyle \sum_{k = 1}^K \pi_{[k]} \hat{\tau}_{[k]},\] que é exatamente igual a \(\hat{\tau}_s\) mas na estratificação os \(\pi_{[k]}\) são fixos e na pós-estratificação são aleatórios. Ademais, \(\mathbb{V}_{CRE}(\hat{\tau}_{ps} | \textbf{n}) = \mathbb{V}_{SRE}(\hat{\tau}_s).\)

Observação:

Em geral, se \(X\) for preditiva para \(Y\) e os estratos são grandes, conditional FRT é mais poderoso do que FRT (Hennessy et al. (2016)) e em muitos casos, pós-estratificação melhora a eficiência comparado com \(\hat{\tau}\) (Maritrix et al. (2013)).

Contudo, devemos ter cuidado com valores de \(K\) muito grandes, pois isto aumenta a chance que \(n_{[k]1}\) ou \(n_{[k]0}\) sejam zero (ou muito pequenos), o que reduz o poder do teste.

Pós-estratificação

Observação

Estratificação utiliza \(X\) na etapa do planejamento, já pós-estratificação utiliza \(X\) na etapa de análise. Asintóticamente, a diferença é pequena com grandes estratos.

Exemplo

Chong et al. (2016) realizaram um SRE em 219 estudantes do ensino médio da área rual de Cajamarca (Peru) durante o 2009. Eles fornecerem suplemento de ferro ao hospital da região e capacitaram a equipe hospitalar para distribuir um comprimido a qualquer adolescente que o solicita-se pessoalmente. Eles, então, atribuem aleatoriamente esses adolescentes em três grupos, cada um dos quais é submetido a um tipo diferente de video motivacional.

  • No primeiro video, um famoso jogador de futebol os motiva a utilizar o suplemento de ferro para ter mais energia.
  • No segundo video, um físico os motiva a utilizar o suplemento de ferro para melhorar a saude.
  • No terceiro video (controle), não se faz menção alguma ao suplemento de ferro.

O pesquisador faz estratificação considerando o nível escolar (1–5) (class_level). O conjunto de dados está disponível aqui.

Pós-estratificação

Code
library(foreign)
dados <- read.dta("datasets/chong.dta")
table(dados$treatment, dados$class_level)
               
                 1  2  3  4  5
  Soccer Player 16 19 15 10 10
  Physician     17 20 15 11 10
  Placebo       15 19 16 12 10

Um dos resultados de interesse é a nota média no terceiro e quarto trimestre de 2009 (gradesq34). O pesquisador, após a coleta dos dados, menciona que uma importante covariável é se o indíviduo tem ou não anemia (anemic_base_re). Com fins ilustrativos vamos apenas considerar os videos 2 e 3.

Code
dados <- dados |> dplyr::select(treatment, gradesq34, class_level, anemic_base_re) |> 
                   dplyr::filter(treatment != "Soccer Player")
z <- (dados$treatment == "Physician")
y <- dados$gradesq34
x <- dados$class_level

Pós-estratificação

Code
# Estraificação
est <- neyman_sre(y, z, x)
tau_s <- est[1]
v_s <- est[2]
c(tau_s, v_s)
[1] 0.40589074 0.04096198

Como podemos incluir a outra covariável? Pós-estratificação!

Code
# Estratificação + Pós-estratificação
anemia <- dados$anemic_base_re
sps <- interaction(x, anemia)
est <- neyman_sre(y, z, sps)
tau_sps <- est[1]
v_sps <- est[2]
c(tau_sps, v_sps)
[1] 0.46334322 0.03624965
Code
est_s <- tau_s / sqrt(v_s)
est_sps <- tau_sps / sqrt(v_sps)
pvalor_s <- 2 - 2*pnorm(abs(est_s))       # Bilateral
pvalor_sps <- 2 - 2*pnorm(abs(est_sps))   # Bilateral
c(est_s, pvalor_s, est_sps, pvalor_sps)
[1] 2.00548160 0.04491159 2.43360967 0.01494911

Pós-estratificação

Simulação

Code
alguns_index_desbalanceados <- which(diff_estrato_1 > 0.3 & diff_estrato_1 < 0.9)
tau <- c()
for (i in alguns_index_desbalanceados) {
  Y = z_sim[, i]*Y1 + (1 - z_sim[, i])*Y0
  tau[i] <- ee(Y, z_sim[, i], x)
}
tau <- tau[!is.na(tau)]
summary(tau)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
                                                

Pós-estratificação

Como saber se devo ou não estratificar (pós-estratificar)?

Se \(X\) estiver associada a \(Y\) e se \(X\) não é afetada pelo tratamento, então estratificação (pós-estratificação) trará ganhos quandos comparados com CRE!.

Comentários Finais

Comentários Finais

Qual a vantagem de utilizar SRE comparado com CRE?

  • Em geral, o ganho é na estimação da variância (se bem conduzida, estratificação reduz a variância). Por exemplo, pode-se mostrar que, se \(e_{[k]} = e\) \(\forall k\), \[\mathbb{V}_{CRE}(\hat{\tau}) \geq \mathbb{V}_{SRE}(\hat{\tau}_S).\]
  • Se a covariável for preditiva para os resultados potenciais, o ganho na eficiência do SRE em comparação com CRE é claro.
  • No caso extremo de que a covariável não for preditiva para os resultados potenciais, em grandes amostras o ganho é zero. Em pequenas amostras, CRE pode ser mais eficiente do que SRE (este é o sentido da frase do Box mostrada no início da aula).
  • A variável utilizada como estrato não é afetado pelo tratamento.

Referências

  • Peng Ding (2023). A First Course in Causal Inference. Capítulo 5
  • Box, G. E., Hunter, W. H., & Hunter, S. (1978). Statistics for Experimenters: An Introduction to Design Analysis, and Model Building. New York: John Wiley and Sons.
  • Koenker, R., & Xiao, Z. (2002). Inference on the quantile regression process. Econometrica, 70(4), 1583-1612.
  • Hennessy, J., Dasgupta, T., Miratrix, L., Pattanayak, C., & Sarkar, P. (2016). A conditional randomization test to account for covariate imbalance in randomized experiments. Journal of Causal Inference, 4(1), 61-80.
  • Miratrix, L. W., Sekhon, J. S., & Yu, B. (2013). Adjusting treatment effect estimates by post-stratification in randomized experiments. Journal of the Royal Statistical Society Series B: Statistical Methodology, 75(2), 369-396.
  • Chong, A., Cohen, I., Field, E., Nakasone, E., & Torero, M. (2016). Iron deficiency and schooling attainment in Peru. American Economic Journal: Applied Economics, 8(4), 222-255.