Rerandomização e ajuste de regressão
Instituto de Matemática, Estatística e Computação Científica (IMECC),
Universidade Estadual de Campinas (UNICAMP).
Planejamento | Análise | |
---|---|---|
Covariável Discreta | Estratificação | Pós-estratificação |
Covariável Geral | Rerandomizar | Ajuste de regressão |
Sob CRE, a diferença de médias das covariáveis, \[\hat{\tau}_X = n_1^{-1} \displaystyle \sum_{i = 1}^n Z_i X_i - n_0^{-1}\sum_{i = 1}^n (1- Z_i) X_i,\] tem \(\mathbb{E}(\hat{\tau}_X) = 0\) e \(\mathbb{V}(\hat{\tau}_X) = \dfrac{n}{n_1 n_0}S^2_X\), em que \(S^2_X = (n - 1)^{-1} \displaystyle \sum_{i = 1}^nX_i X_i'.\)
Uma forma de avaliar a diferença entre os grupos de tratamento e controle é através da distância de Mahalanobis:
\[M = \hat{\tau}_X' \Big (\underbrace{\dfrac{n}{n_1n_0}S^2_X}_{\mathbb{V}(\hat{\tau}_X)} \Big )^{-1}\hat{\tau}_X.\]
Sob CRE e para valores grandes de \(n\), \(M \sim \chi^2_K.\) Assim, \(M\) pode ter valores realizados grandes, afinal, \(M\) tem média \(K\) e variância \(2K\).
Como escolher a?
Uma prática comúm é escolher \(a\) pequeno ou utilizar algum quantil da \(\chi^2_K\).
Note que, o número de rerandomizações até o primeiro aceitável é \(1/p_a\). Dependendo do tempo computacional necessário (o que tem testes de permutação é um fator importante), o 5% adicional na redução da variância pode ou não valer a pena.
Como analisar dados sob ReM?
\[R^2 = \mathbb{C}or(\hat{\tau}, \hat{\tau}_X) = \dfrac{n_1^{-1}S^2(1|X) + n_0^{-1}S^2(0|X) - n^{-1}S^2(\tau | X)}{_1^{-1}S^2(1) + n_0^{-1}S^2(0) - n^{-1}S^2(\tau)},\] em que \(S^2(1)\), \(S^2(0)\), \(S^2(\tau)\) são as variâncias de \(\{Y_i(1)\}_{i = 1}^n\), \(\{Y_i(0)\}_{i = 1}^n\), \(\{\tau_i\}_{i = 1}^n\) e \(S^2(1|X)\), \(S^2(0|X)\), \(S^2(\tau|X)\) são as variâncias das suas projeções em \((1, X)\).
Quando \(0<a<\infty\), a distribuição de \(\hat{\tau}\) é bem mais complexa mas é mais concentrada em \(\tau\). Assim, \(\hat{\tau}\) é mais preciso sob ReM do que sob CRE.
Observação: Se ignorarmos o ReM e ainda utilizarmos o intervalo de confiança baseado na fórmula de variância de Neyman (1923) e na aproximação Normal, este será excessivamente conservador.
Obviamente não somos Marty McFly e não podemos voltar no tempo para utilizar rerandomização. Contudo, não todo está perdido e é aqui que ajuste de regressão entra no jogo.
As covariáveis \(\textbf{X}\) são todas fixas e, sob \(H_{0F}\), os resultados observados também são fixos. Assim, podemos simular a distribuição de qualquer test \(T = T(\textbf{Y}, \textbf{Z}, \textbf{X})\) e calcular p-valores. A ideia central do FRT continua a mesma na presença de covariáveis.
Existem duas estratégias gerais para construir a estatística de teste, as quais são apresentadas a seguir:
Na primeira estratégia, precisamos rodar o modelo de regressão apenas uma vez. Já na segunda estratégia precisamos rodar o modelo várias vezes.
Observação: Um dos modelos ajustados mais utilizado é regressão linear (por MQO), mas nada impede que outras abordagens tais como regressão logística ou mesmo modelos de machine learning sejam utilizados.
E se não quisermos testar \(H_{0F}\) mas \(H_{0N}\)?
Os seguintes métodos focam na estimação do efeito médio causal, \(\tau\).
Pode ser o caso de termos um SRE, estratificado numa variável discreta \(C\) e também termos outras covariáveis \(X\). Se todos os estratos são grandes, podemos obter um estimador de Lin como \[\hat{\tau}_{L,S} = \displaystyle \sum_{k = 1}^K \pi_{[k]} \hat{\tau}_{L,[k]},\] e um estimador (conservador) de \(\mathbb{V}(\hat{\tau}_{L,S})\) dado por \[\hat{V}_{L,S} = \displaystyle \sum_{k = 1}^K \pi_{[k]}^2 \hat{V}_{EHW, [k]}\]
library(ggplot2)
x2 <- cbind(x, x[, 2]^2)
dados_sim <- data.frame(y = y, z = z, x2 = x2)
y1lm <- lm(y ~ x2, weights = z, data = dados_sim)
sigma1 <- summary(y1lm)$sigma
y0lm <- lm(y ~ x2, weights = 1 - z, data = dados_sim)
sigma0 <- summary(y0lm)$sigma
a <- 0.05
mc <- 2000
n1 <- sum(z)
n0 <- sum(1 - z)
n <- n1 + n0
rescale <- 0.2
y1_sim <- predict(y1lm, data = dados_sim) + rnorm(n)*sigma1*rescale
y0_sim <- predict(y0lm, data = dados_sim) + rnorm(n)*sigma0*rescale
tau <- mean(y1_sim - y0_sim)
tau_hat_cre <- rep(0, mc)
tau_hat_lim <- rep(0, mc)
tau_hat_rem <- rep(0, mc)
tau_hat_rem_lim <- rep(0, mc)
for (i in 1:mc) {
## CRE
z_cre <- sample(z)
y_cre <- z_cre * y1_sim + (1 - z_cre) * y0_sim
tau_hat_cre[i] <- mean(y_cre[z_cre == 1]) - mean(y_cre[z_cre == 0])
## Regression Adjustement (Lim)
tau_hat_lim[i] <- lm(y_cre ~ z_cre * x)$coef[2]
## ReM
z_rem <- rem(x, n1, n0, a)
y_rem <- z_rem * y1_sim + (1 - z_rem) * y0_sim
tau_hat_rem[i] <- mean(y_rem[z_rem == 1]) - mean(y_rem[z_rem == 0])
tau_hat_rem_lim[i] = lm(y_rem ~ z_rem * x)$coef[2]
}
Carlos Trucíos (IMECC/UNICAMP) | ME920/MI628 - Inferência Causal | ctruciosm.github.io