Bu çok iyi bir soru. İlk önce formülünüzün doğru olup olmadığını kontrol edelim. Verdiğiniz bilgiler aşağıdaki nedensel modele karşılık gelir:
Ve dediğin gibi, tahminini türetebiliriz P( Y| do ( X) )kalkülüs kurallarını kullanarak. R'de bunu paketle kolayca yapabiliriz causaleffect
. İlk olarak igraph
, teklif ettiğiniz nedensel diyagramla bir nesne oluşturmak için yüklüyoruz :
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")
İlk iki terimin X-+Y, Y-+X
,X ve Y ve terimlerin geri kalanı, bahsettiğiniz yönlendirilmiş kenarları temsil eder.
Sonra tahminimizi isteriz:
library(causaleffect)
cat(causal.effect("Y", "X", G = g, primes = TRUE, simp = T, expr = TRUE))
ΣW, Z(ΣX'P( Y| W,X', Z) P(X'| W) ) P( Z| W, X) P( W)
Bu gerçekten formülünüzle çakışıyor --- gözlenen bir karışıklığa sahip bir ön kapı örneği.
Şimdi tahmin kısmına gidelim. Doğrusallığı (ve normalliği) varsayarsanız, işler büyük ölçüde basitleştirilmiştir. Temel olarak yapmak istediğiniz yolun katsayılarını tahmin etmektirX→ Z→ Y.
Bazı verileri simüle edelim:
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)
Simülasyonumuzda bir değişikliğin gerçek nedensel etkisine dikkat edin X üzerinde YBunu iki regresyon çalıştırarak tahmin edebilirsiniz. İlk Y∼ Z+ W+ X etkisini elde etmek Z üzerinde Y ve sonra Z∼ X+ W etkisini elde etmek X üzerinde Z. Tahmininiz her iki katsayının da ürünü olacaktır:
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
Çıkarım için ürünün (asimtotik) standart hatasını hesaplayabilirsiniz:
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)
Testler veya güven aralıkları için kullanabileceğiniz:
c(effect - 1.96*se, effect + 1.96*se) # 95% CI
x x
19.66441 23.08811
Ayrıca (non / semi) -parametrik tahmin yapabilirsiniz, daha sonra diğer prosedürler de dahil olmak üzere bu cevabı güncellemeye çalışacağım.