จากการระบุถึงการประมาณ


10

ฉันกำลังอ่านชิ้นส่วนของ Pearl (Pearl, 2009, 2nd edition) เกี่ยวกับสาเหตุและการดิ้นรนเพื่อสร้างการเชื่อมโยงระหว่างการระบุแบบไม่มีพารามิเตอร์ของแบบจำลองและการประมาณค่าจริง น่าเสียดายที่ Pearl ตัวเองเงียบมากในหัวข้อนี้

เพื่อให้ตัวอย่างผมมีรูปแบบที่เรียบง่ายในใจมีเส้นทางสาเหตุ,และปัจจัยรบกวนที่มีผลต่อตัวแปรทั้งหมด ,และY นอกจากนี้และเกี่ยวข้องกันโดยไม่มีใครสังเกตอิทธิพล,Y ตามกฎของการคำนวณแคลคูลัสตอนนี้ฉันรู้ว่าการแจกแจงความน่าจะเป็นหลังการแทรกแซง (ไม่ต่อเนื่อง) มอบให้โดย:xzywxwzwyxyx←→y

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

ฉันรู้ว่าฉันสามารถประเมินปริมาณนี้ได้อย่างไร (ไม่ใช่แบบพารามิเตอร์หรือโดยการแนะนำสมมติฐานแบบพารามิเตอร์) โดยเฉพาะอย่างยิ่งในกรณีที่wเป็นชุดของตัวแปรที่รบกวนหลายตัวและปริมาณของดอกเบี้ยจะต่อเนื่อง เพื่อประเมินการกระจายการแทรกแซงล่วงหน้าของข้อมูลที่ดูเหมือนจะเป็นไปไม่ได้ในกรณีนี้ มีใครรู้บ้างว่ามีแอปพลิเคชันของวิธีการของ Pearl ที่จัดการกับปัญหาเหล่านี้หรือไม่? ฉันจะมีความสุขมากสำหรับตัวชี้


1
หากคุณมีปัจจัยที่ไม่ได้สังเกตเห็นซึ่งมีอิทธิพลต่อทั้ง x และ y ฉันคิดว่าคุณไม่สามารถประมาณค่านี้ได้หากไม่ได้ทำการสุ่ม x แต่ถึงแม้ว่าฉันจะรู้วิธีการต่อต้านความเป็นเหตุเป็นผลมากมาย แต่ฉันไม่คุ้นเคยกับการคำนวณแคลคูลัสของเพิร์ล (ฉันยังคงทำงานผ่านหนังสือของเขาเอง)
Ellie

คำตอบ:


7

นี่เป็นคำถามที่ดีมาก ก่อนอื่นเรามาตรวจสอบว่าสูตรของคุณถูกต้องหรือไม่ ข้อมูลที่คุณให้สอดคล้องกับโมเดลเชิงสาเหตุต่อไปนี้:

ป้อนคำอธิบายรูปภาพที่นี่

และอย่างที่คุณบอกว่าเราสามารถหาค่าประมาณสำหรับโดยใช้กฎของdo- แคลคูลัส ใน R เราสามารถทำอย่างนั้นกับแพคเกจ ก่อนอื่นเราจะสร้างวัตถุด้วยแผนผังสาเหตุที่คุณเสนอ: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-+Xเป็นตัวแทนของคู่หูที่ไม่มีใครรู้จักของและและคำศัพท์ที่เหลือแสดงถึงขอบกำกับที่คุณพูดถึงXY

จากนั้นเราขอประมาณของเรา:

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)

ซึ่งสอดคล้องกับสูตรของคุณอย่างแท้จริง --- กรณีของด้านหน้าที่มีคนลวงตาสังเกต

ทีนี้ไปที่ส่วนการประมาณกัน หากคุณถือว่าเป็นเส้นตรง (และปกติ) สิ่งต่าง ๆ จะง่ายขึ้นมาก โดยทั่วไปสิ่งที่คุณต้องการจะทำคือการประเมินค่าสัมประสิทธิ์ของเส้นทางYXZY

ลองจำลองข้อมูล:

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 คุณสามารถประมาณค่านี้ได้ด้วยการรันการถดถอยสองครั้ง แรก ที่จะได้รับผลกระทบจากในแล้วที่จะได้รับผลกระทบของในZค่าประมาณของคุณจะเป็นผลิตภัณฑ์ของสัมประสิทธิ์ทั้งสอง: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 

และสำหรับการอนุมานคุณอาจคำนวณข้อผิดพลาดมาตรฐาน (asymptotic) ของผลิตภัณฑ์:

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 

นอกจากนี้คุณยังสามารถดำเนินการ (ไม่ใช่ / กึ่ง) - การประมาณค่าทางพารามิเตอร์ฉันจะพยายามอัปเดตคำตอบนี้รวมถึงขั้นตอนอื่น ๆ ในภายหลัง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.