De l'identification à l'estimation

9

Je lis actuellement l'article de Pearl (Pearl, 2009, 2e édition) sur la causalité et la lutte pour établir le lien entre l'identification non paramétrique d'un modèle et l'estimation réelle. Malheureusement, Pearl lui-même est très silencieux sur ce sujet.

Pour donner un exemple, j'ai en tête un modèle simple avec un chemin causal, , et un facteur de confusion qui affecte toutes les variables , et . De plus, et sont liés par des influences non observées, . Par les règles du do-calcul je sais maintenant que la distribution de probabilité post-intervention (discrète) est donnée par:w x w z w y x y x yxzywxwzwyxyx←→y

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

Je me demande comment je peux estimer cette quantité (de façon non paramétrique ou en introduisant des hypothèses paramétriques)? Surtout dans le cas où est un ensemble de plusieurs variables confondantes et que les quantités d'intérêt sont continues. Estimer la distribution conjointe pré-intervention des données semble très peu pratique dans ce cas. Est-ce que quelqu'un connaît une application des méthodes de Pearl qui traite ces problèmes? Je serais très heureux pour un pointeur. w

PHU
la source
1
Si vous avez des facteurs non observés qui influencent à la fois x et y, je pense que vous ne pouvez pas estimer cela sans randomiser x. Mais, bien que j'en sache beaucoup sur l'approche contrefactuelle de la causalité, je ne connais pas très bien le do-calcul de Pearl (je travaille toujours moi-même dans son livre).
Ellie

Réponses:

7

C'est une très bonne question. Vérifions d'abord si votre formule est correcte. Les informations que vous avez fournies correspondent au modèle causal suivant:

entrez la description de l'image ici

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")

X-+Y, Y-+XXY

Ensuite, nous demandons notre estimation:

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)

Ce qui coïncide en effet avec votre formule --- un cas de porte d'entrée avec un confondant observé.

XZY

Simulons quelques données:

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)

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 

Et pour l'inférence, vous pouvez calculer l'erreur standard (asymptotique) du produit:

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 vous pouvez utiliser pour des tests ou des intervalles de confiance:

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

Vous pouvez également effectuer une estimation (non / semi) -paramétrique, je vais essayer de mettre à jour cette réponse en incluant d'autres procédures plus tard.

Carlos Cinelli
la source