DAG 如何幫助減少因果推理中的偏差?
我在幾個地方讀到,使用 DAG 可以幫助減少偏見,因為
- 混雜
- 差異選擇
- 調解
- 以對撞機為條件
我也經常看到*“後門路徑”*這個詞。
我們如何使用 DAG 來減少這些偏差,它與後門路徑有什麼關係?上述真實世界示例的加分(我將獎勵賞金)
DAG是一個****有向A循環圖。
“圖”是一種結構,具有節點(通常是統計中的變量)和將節點連接到其他節點的弧(線)。“有向”是指所有的弧都有一個方向,弧的一端有箭頭,另一端沒有,通常指因果關係。“一個循環”意味著圖不是循環的——這意味著從任何節點都沒有路徑可以返回到同一個節點。在統計學中,DAG 是一種非常強大的工具,可以幫助進行因果推斷——在存在可能是競爭性暴露的其他變量的情況下,估計一個變量(通常稱為主要暴露)對另一個變量(通常稱為結果)的因果影響,混雜因素或中介。DAG 可用於識別要在多變量回歸模型中用於估計所述因果效應的最小足夠變量集。例如,以中介變量(位於主要暴露和結果之間的因果路徑上的變量)為條件通常是一個非常糟糕的主意,而以混雜因素(一個變量為一個原因,或一個原因的代理,主要暴露和結果)。以對撞機為條件(將在下面定義)也是一個壞主意。
但首先,我們要克服的問題是什麼?這是多變量回歸模型在您的統計軟件中的樣子:
該軟件不“知道”哪些變量是我們的主要暴露、競爭暴露、混雜因素或中介。它對待他們都是一樣的。在現實世界中,變量相互關聯更為常見。例如,特定研究領域的知識可能表明以下結構:
請注意,研究人員的工作是使用有關手頭主題的專家知識來指定因果路徑。DAG 代表一組(通常是抽象的)與特定因果關係相關的因果信念。對於相同的關係,一位研究人員的 DAG 可能與另一位研究人員的 DAG 不同,這是完全可以的。同樣,對於相同的因果關係,研究人員可能擁有多個 DAG,並且以如下所述的原則方式使用 DAG 是收集有關特定假設的知識或支持特定假設的一種方式。
假設我們的興趣在於 $ X7 $ 在 $ Y $ . 我們接下來幹嗎?一個非常幼稚的方法是簡單地將所有變量放入一個回歸模型中,並取估計係數為 $ X7 $ 作為我們的“答案”。這將是一個很大的錯誤。事實證明,在這個 DAG 中唯一需要調整的變量是 $ X3 $ ,因為它是一個混雜因素。但是,如果我們的興趣在於 $ X3 $ , 不是 $ X7 $ ? 我們是否簡單地使用相同的模型(也包含 $ X7 $ ) 並且只需估計 $ X3 $ 作為我們的“答案”?不!在這種情況下,我們不調整 $ X7 $ 因為它是一個中介。根本不需要調整。在這兩種情況下,我們也可以調整 $ X1 $ 因為這是一個競爭性的曝光,將提高我們在兩個模型中隨意推斷的精度。在這兩種模型中,我們都不應該調整 $ X2 $ , $ X4 $ , $ X5 $ 和 $ X6 $ 因為他們都是效果的中介 $ X7 $ 在 $ Y $ .
那麼,回到這個問題,DAG 是如何讓我們真正做到這一點的呢?首先,我們需要建立一些基本事實。
- 對撞機是具有多個原因的變量——也就是說,至少有 2 個箭頭指向它(因此傳入的箭頭“碰撞”)。 $ X5 $ 在上面的 DAG 中是一個對撞機
- 如果沒有以任何變量為條件,則當且僅當它包含對撞機時,路徑才會被阻塞。路徑 $ X4 \rightarrow X5 \leftarrow X6 $ 被對撞機擋住 $ X5 $ .
注意:當我們談論對變量的“調節”時,這可能指的是一些事情,例如分層,但可能更常見的是將變量作為協變量包含在多變量回歸模型中。其他同義詞是“控制”和“調整”。 3. 任何包含條件的非碰撞器的路徑都會被阻止。路徑 $ Y \leftarrow X3 \rightarrow X7 $ 如果我們設置條件將被阻止 $ X3 $ . 4. 一個以條件為條件的對撞機(或對撞機的後代)不會阻塞路徑。如果我們以 $ X5 $ 我們將打開道路 $ X4 \rightarrow X5 \leftarrow X6 $ 5. 後門路徑是結果和原因之間的非因果路徑。它是非因果的,因為它包含一個指向原因和結果的箭頭。例如路徑 $ Y \leftarrow X3 \rightarrow X7 $ 是一個後門路徑 $ Y $ 到 $ X3 $ . 6. 當兩個變量存在共同原因時,就會出現因果路徑的混淆。換句話說,混淆發生在存在未阻塞的後門路徑的地方。再次, $ Y \leftarrow X3 \rightarrow X7 $ 就是這樣一條路。
因此,有了這些知識,讓我們看看 DAG 如何幫助我們消除偏見:
- 混雜
混雜的定義如上6。如果我們對混雜因素應用 4 和條件,我們將阻止從結果到原因的後門路徑,從而消除混雜偏差。例如攜帶打火機和肺癌的關聯:
攜帶打火機對肺癌沒有因果關係,但是,它們有一個共同的原因——吸煙——所以應用上面的規則 5,存在從肺癌到攜帶打火機的後門路徑,這導致攜帶打火機和肺癌之間存在關聯. 吸煙條件會消除這種關聯,這可以通過一個簡單的模擬來證明,為了簡單起見,我使用連續變量:
> set.seed(15) > N <- 100 > Smoking <- rnorm(N, 10, 2) > Cancer <- Smoking + rnorm(N) > Lighter <- Smoking + rnorm(N) > summary(lm(Cancer ~ Lighter)) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 0.66263 0.76079 0.871 0.386 Lighter 0.91076 0.07217 12.620 <2e-16 ***
這顯示了打火機和癌症之間的虛假關聯,但是現在當我們以吸煙為條件時:
> summary(lm(Cancer ~ Lighter + Smoking)) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -0.42978 0.60363 -0.712 0.478 Lighter 0.07781 0.11627 0.669 0.505 Smoking 0.95215 0.11658 8.168 1.18e-12 ***
…消除了偏見。
- 調解
中介變量是位於原因和結果之間的因果路徑上的變量。這意味著結果是一個對撞機。因此,應用規則 3 意味著我們不應以調解人為條件,否則原因對結果(即由調解人調解的結果)的間接影響將被阻止。一個很好的例子是學生的成績和他們的幸福感。一個中介變量是自尊:
在這裡,成績對幸福有直接影響,但也有由自尊介導的間接影響。我們想估計成績對幸福的總因果影響。規則 3 說,包含已被條件化的非碰撞器的路徑被阻止。由於我們想要總效果(即包括間接效果),我們不應該以自尊為條件,否則中介路徑將被阻塞,正如我們在以下模擬中看到的:
> set.seed(15) > N <- 100 > Grades <- rnorm(N, 10, 2) > SelfEsteem <- Grades + rnorm(N) > Happiness <- Grades + SelfEsteem + rnorm(N)
所以總效果應該是2:
> summary(m0 <- lm(Happiness ~ Grades)) # happy times Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.05650 0.79509 1.329 0.187 Grades 1.90003 0.07649 24.840 <2e-16 ***
這就是我們所發現的。但是,如果我們現在以自尊為條件:
> summary(m0 <- lm(Happiness ~ Grades + SelfEsteem Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.39804 0.50783 2.753 0.00705 ** Grades 0.81917 0.10244 7.997 2.73e-12 *** SelfEsteem 1.05907 0.08826 11.999 < 2e-16 ***
僅估計成績的直接影響,因為通過調節中介來阻止間接影響
SelfEsteem
。
- 對撞機偏差
這可能是最難理解的一個,但是藉助一個非常簡單的 DAG,我們可以很容易地看出問題所在:
在這裡,X 和 Y 之間沒有因果路徑。但是,兩者都導致 C,即對撞機。如果我們以 C 為條件,那麼應用上面的規則 4,我們將通過打開 X 和 Y 之間的(非因果)路徑來調用對撞機偏差。起初這可能有點難以理解,但通過思考應該變得明顯方程項。我們有 X + Y = C。讓 X 和 Y 是取值 1 或零的二進制變量。因此,C 只能取 0、1 或 2 的值。現在,當我們以 C 為條件時,我們固定它的值。假設我們將其固定為 1。這立即意味著如果 X 為零,則 Y 必須為 1,如果 Y 為零,則 X 必須為 1。也就是說,X = -Y,因此它們完全(負)相關,以 C=1 為條件。我們還可以通過以下模擬看到這一點:
> set.seed(16) > N <- 100 > X <- rnorm(N, 10, 2) > Y <- rnorm(N, 15, 3) > C <- X + Y + rnorm(N)
所以,X 和 Y 是獨立的,所以我們應該找不到關聯:
> summary(m0 <- lm(Y ~ X)) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 14.18496 1.54838 9.161 8.01e-15 *** X 0.08604 0.15009 0.573 0.568
確實沒有發現任何關聯。但現在條件是 C
> summary(m1 <- lm(Y ~ X + C)) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.10461 0.61206 1.805 0.0742 . X -0.92633 0.05435 -17.043 <2e-16 *** C 0.92454 0.02881 32.092 <2e-16 ***
現在我們在 X 和 Y 之間建立了一個虛假的關聯。
現在讓我們考慮一個稍微複雜一點的情況:
在這裡,我們對活動對宮頸癌的因果影響感興趣。疑病症是一個不可測量的變量,它是一種心理狀況,其特徵是擔心輕微的、有時甚至不存在的醫學症狀是重大疾病的徵兆。病變也是一個未觀察到的變量,表明存在癌前病變。測試是早期宮頸癌的診斷測試。在這裡,我們假設兩個未測量的變量都會影響測試,顯然在病變的情況下,以及在疑病症的情況下經常去看醫生。病變也(顯然會導致癌症)和疑病症會導致更多的身體活動(因為患有疑病症的人擔心久坐不動的生活方式會導致晚年生病。
首先請注意,如果對撞機 Test 被移除並替換為從 Lesion 到 Hypochondria 或反之亦然的弧線,那麼我們感興趣的因果路徑 Activity 到 Cancer 將被混淆,但由於上述規則 2,對撞機會阻塞後門路徑 $ \text{Cancer}\leftarrow \text{Lesion} \rightarrow \text{Test} \leftarrow \text{Hypochondria} \rightarrow \text{Activity} $ ,我們可以通過一個簡單的模擬看到:
> set.seed(16) > N <- 100 > Lesion <- rnorm(N, 10, 2) > Hypochondria <- rnorm(N, 10, 2) > Test <- Lesion + Hypochondria + rnorm(N) > Activity <- Hypochondria + rnorm(N) > Cancer <- Lesion + 0.25 * Activity + rnorm(N)
我們假設活動對癌症的影響比病變對癌症的影響要小得多
> summary(lm(Cancer ~ Activity)) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 10.47570 1.01150 10.357 <2e-16 *** Activity 0.21103 0.09667 2.183 0.0314 *
事實上,我們得到了一個合理的估計。
現在,還要觀察活動和癌症與測試的關聯(由於它們常見但無法測量的原因:
> cor(Test, Activity); cor(Test, Cancer) [1] 0.6245565 [1] 0.7200811
混雜因素的傳統定義是混雜因素是與暴露和結果相關的變量。因此,我們可能會錯誤地認為 Test 是一個混雜因素和條件。但是,我們然後打開後門路徑 $ \text{Cancer}\leftarrow \text{Lesion} \rightarrow \text{Test} \leftarrow \text{Hypochondria} \rightarrow \text{Activity} $ ,並引入否則不會出現的混雜,我們可以從:
> summary(lm(Cancer ~ Activity + Test)) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.77204 0.98383 1.801 0.0748 . Activity -0.37663 0.07971 -4.725 7.78e-06 *** Test 0.72716 0.06160 11.804 < 2e-16 ***
現在不僅對活動的估計有偏差,而且幅度更大,符號相反!
- 選擇偏差
前面的例子也可以用來證明選擇偏差。研究人員可能會將測試識別為潛在的混雜因素,然後僅對測試為陰性(或陽性)的那些進行分析。
> dtPos <- data.frame(Lesion, Hypochondria, Test, Activity, Cancer) > dtNeg <- dtPos[dtPos$Test < 22, ] > dtPos <- dtPos[dtPos$Test >= 22, ] > summary(lm(Cancer ~ Activity, data = dtPos)) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 13.15915 3.07604 4.278 0.000242 *** Activity 0.08662 0.25074 0.345 0.732637
因此,對於那些測試為陽性的人,我們獲得了非常小的積極影響,這在 5% 的水平上沒有統計學意義
> summary(lm(Cancer ~ Activity, data = dtNeg)) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 12.18865 1.12071 10.876 <2e-16 *** Activity -0.01553 0.11541 -0.135 0.893
對於那些測試為陰性的人,我們獲得了一個非常小的負面關聯,這也並不重要。