Da identificação à estimativa

9

Atualmente, estou lendo a peça de Pearl (Pearl, 2009, 2ª edição) sobre causalidade e luta para estabelecer o elo entre a identificação não paramétrica de um modelo e a estimativa real. Infelizmente, o próprio Pearl não fala nada sobre esse assunto.

Para dar um exemplo, tenho um modelo simples em mente com um caminho causal, , e um fator de confusão que afeta todas as variáveis , e . Além disso, e estão relacionados por influências não observadas, . Pelas regras do cálculo, agora eu sei que a distribuição de probabilidade pós-intervenção (discreta) é dada por:xzywxwzwyxyx←→y

P(ydo(x))=w,z[P(zw,x)P(w)x[P(yw,x,z)P(xw)]].

Eu sei como é que posso estimar essa quantidade (não parametricamente ou introduzindo suposições paramétricas)? Especialmente no caso em que é um conjunto de várias variáveis ​​de confusão e as quantidades de interesse são contínuas. Estimar a distribuição conjunta pré-intervenção dos dados parece ser muito impraticável neste caso. Alguém conhece uma aplicação dos métodos de Pearl que lida com esses problemas? Eu ficaria muito feliz por um ponteiro. w

PHU
fonte
11
Se você possui fatores não observados que influenciam x e y, acho que não pode estimar isso sem, de fato, randomizar x. Mas, embora eu saiba bastante sobre a abordagem contrafactual da causalidade, não conheço tanto o cálculo de Pearl (ainda estou trabalhando no livro dele).
Ellie

Respostas:

7

Esta é uma pergunta muito boa. Primeiro, vamos verificar se sua fórmula está correta. As informações que você forneceu correspondem ao seguinte modelo causal:

insira a descrição da imagem aqui

E como você disse, podemos derivar a estimativa para usando as regras do do-calculus. Em R, podemos fazer isso facilmente com o pacote . Primeiro, carregamos para criar um objeto com o diagrama causal que você está propondo:P(Y|do(X))causaleffectigraph

library(igraph)
g <- graph.formula(X-+Y, Y-+X, X-+Z-+Y, W-+X, W-+Z, W-+Y, simplify = FALSE)
g <- set.edge.attribute(graph = g, name = "description", index = 1:2, value = "U")

Onde os dois primeiros termos X-+Y, Y-+Xrepresentam os fatores de confusão não observados de e e o restante dos termos representam as arestas direcionadas que você mencionou.XY

Então pedimos nossa estimativa:

library(causaleffect)
cat(causal.effect("Y", "X", G = g, primes = TRUE, simp = T, expr = TRUE))

W,Z(XP(Y|W,X,Z)P(X|W))P(Z|W,X)P(W)

O que de fato coincide com a sua fórmula - um caso de porta da frente com um fator de confusão observado.

Agora vamos para a parte de estimativa. Se você assume linearidade (e normalidade), as coisas são muito simplificadas. Basicamente o que você quer fazer é estimar os coeficientes do caminho .XZY

Vamos simular alguns dados:

set.seed(1)
n <- 1e3
u <- rnorm(n) # y -> x unobserved confounder
w <- rnorm(n)
x <- w + u + rnorm(n)
z <- 3*x + 5*w + rnorm(n)
y <- 7*z + 11*w + 13*u + rnorm(n)

Observe em nossa simulação que o verdadeiro efeito causal de uma mudança de em é 21. Você pode estimar isso executando duas regressões. Primeiro para obter o efeito de em e, em seguida, para obter o efeito de em . Sua estimativa será o produto de ambos os coeficientes:XYYZ+W+XZYZX+WXZ

yz_model <- lm(y ~ z + w + x)
zx_model <- lm(z ~ x + w)

yz <- coef(yz_model)[2]
zx <- coef(zx_model)[2]
effect <- zx*yz
effect
       x 
21.37626 

E, por inferência, você pode calcular o erro padrão (assintótico) do produto:

se_yz <- coef(summary(yz_model))[2, 2]
se_zx <- coef(summary(zx_model))[2, 2]
se <- sqrt(yz^2*se_zx^2 + zx^2*se_yz^2)

Que você pode usar para testes ou intervalos de confiança:

c(effect - 1.96*se, effect + 1.96*se) # 95% CI
       x        x 
19.66441 23.08811 

Você também pode realizar uma estimativa (não / semi) paramétrica, tentarei atualizar esta resposta, incluindo outros procedimentos posteriormente.

Carlos Cinelli
fonte