역자주 - 원문의 내용 자체가 IHDP 데이터셋에 대한 설명이나 인과분석 과정에 대한 설명이 생략되어 있습니다.
해당 문서의 주요 목적은 여러 Propensity Score 방법론과 Refute 방법론을 사용하는 코드 레퍼런스를 남기는 것에 있기 때문에 관련 내용에 대한 학습이 필요한 경우 DOWHY KEY CONCEPTS의 성향점수(Propensity Score)와 추정치를 검증하는 방법를 참고하시면 좋습니다.
# importing required libraries : 필요 라이브러리 불러오기import dowhyfrom dowhy import CausalModelimport pandas as pdimport numpy as np
# Create a causal model from the data and given common causes. : 데이터와 공통 원인으로 인과 모델 생성xs =""for i inrange(1,26): xs += ("x"+str(i)+"+")model=CausalModel( data = data, treatment='treatment', outcome='y_factual', common_causes=xs.split('+') )
2. Identify
#Identify the causal effect : 인과 효과 규명하기identified_estimand = model.identify_effect(proceed_when_unidentifiable=True)print(identified_estimand)
Estimand type: nonparametric-ate
### Estimand : 1
Estimand name: backdoor1 (Default)
Estimand expression:
d
────────────(Expectation(y_factual|x18,x17,x11,x2,x5,x14,x22,x23,x24,x21,x16,x20,x8,x4,x7,x19,x10,x15,x25,x9,x12,x3,x6,x1,x13))
Estimand assumption 1, Unconfoundedness: If U→{treatment} and U→y_factual then P(y_factual|treatment,x18,x17,x11,x2,x5,x14,x22,x23,x24,x21,x16,x20,x8,x4,x7,x19,x10,x15,x25,x9,x12,x3,x6,x1,x13,U) = P(y_factual|treatment,x18,x17,x11,x2,x5,x14,x22,x23,x24,x21,x16,x20,x8,x4,x7,x19,x10,x15,x25,x9,x12,x3,x6,x1,x13)
3. Estimate (using different methods)
3.1 Using Linear Regression
# Estimate the causal effect and compare it with Average Treatment Effect : 인과 효과를 추정하고 ATE와 비교estimate = model.estimate_effect(identified_estimand, method_name="backdoor.linear_regression", test_significance=True)print(estimate)print("Causal Estimate is "+str(estimate.value))data_1 = data[data["treatment"]==1]data_0 = data[data["treatment"]==0]print("ATE", np.mean(data_1["y_factual"])- np.mean(data_0["y_factual"]))
*** Causal Estimate ***
## Identified estimand
Estimand type: nonparametric-ate
## Realized estimand
b: y_factual~treatment+x18+x17+x11+x2+x5+x14+x22+x23+x24+x21+x16+x20+x8+x4+x7+x19+x10+x15+x25+x9+x12+x3+x6+x1+x13
Target units: ate
## Estimate
Mean value: 3.928671750872714
p-value: [1.58915682e-156]
Causal Estimate is 3.928671750872714
ATE 4.021121012430829
3.2 Using Propensity Score Matching
estimate = model.estimate_effect(identified_estimand, method_name="backdoor.propensity_score_matching")print("Causal Estimate is "+str(estimate.value))print("ATE", np.mean(data_1["y_factual"])- np.mean(data_0["y_factual"]))
Causal Estimate is 3.9791388232170393
ATE 4.021121012430829