이것은 매우 좋은 질문입니다. 먼저 공식이 올바른지 확인하십시오. 제공 한 정보는 다음과 같은 원인 모델에 해당합니다.
그리고 당신이 말했듯이 우리는 do-calculus의 규칙을 사용하여 대한 추정치를 도출 할 수 있습니다 . R에서는 패키지를 사용하여 쉽게 할 수 있습니다 . 먼저 제안하는 인과 관계 다이어그램으로 객체를 만들기 위해 로드 합니다.P(Y|do(X))causaleffect
igraph
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-+X
은 관찰되지 않은 와 혼란을 나타내고 나머지 항은 언급 한 방향을 나타냅니다.XY
그런 다음 우리는 우리의 추정을 요구합니다.
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)
실제로 당신의 공식과 일치합니다 --- 관찰자가 혼란스러운 정문의 경우.
이제 추정 부분으로갑니다. 선형성 및 정규성을 가정하면 상황이 크게 단순화됩니다. 기본적으로 원하는 것은 경로 의 계수를 추정하는 것 입니다.X→Z→Y
일부 데이터를 시뮬레이트합시다 :
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)
시뮬레이션에서 가 에 미치는 변화의 실제 원인 은 21입니다. 두 회귀 분석을 실행하여이를 추정 할 수 있습니다. 먼저 는 에 의 효과를 얻은 다음 는 에 의 효과를 얻는 것 입니다. 추정치는 두 계수의 곱이됩니다.XYY∼Z+W+XZYZ∼X+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
추론을 위해 제품의 (점근) 표준 오류를 계산할 수 있습니다.
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)
테스트 또는 신뢰 구간에 사용할 수있는 것 :
c(effect - 1.96*se, effect + 1.96*se) # 95% CI
x x
19.66441 23.08811
(비 / 반) 모수 추정을 수행 할 수도 있습니다. 나중에 다른 절차를 포함 하여이 답변을 업데이트하려고합니다.