在Python上做PSM,可以使用causalinference这个库。以下介绍使用方法。
import pandas as pd
import statsmodels.api as sm
# 拿数据集
dataset = sm.datasets.get_rdataset('Wages',package = 'plm')
dataset = dataset.data
dataset
这个数据集是员工的个人信息(经验、性别、种族等等)和工资。假如我们要看性别这一个因素对工资的影响。
首先把类别变量转换为dummy变量。
# 类别变量转换为dummy变量
dataset = pd.get_dummies(data = dataset,
drop_first=True
)
dataset
拆分出Y、X、confounders,分别是工资、性别、其他因素
# 拆分出Y、X、confounders,分别是工资、性别、其他因素
Y = dataset['lwage'].values
X = dataset['sex_male'].values
confounders = dataset.drop(columns = ['lwage','sex_male']).values
PSM倾向性得分匹配
# PSM倾向性得分匹配
from causalinference import CausalModel
model = CausalModel(Y,X,confounders)
model.est_via_matching(bias_adj = True)
print(model.estimates)
结果的通俗理解:
ATT=0.258,你们这些男人,你的“男人”身份给你带来了25.8%的工资加成。
ATC=0.421,女人们,以你们的条件,如果你是男人的话,工资能涨42.1%。
ATE=0.276,所有同志们,“男人”这个标签,可以给带来27.6%的工资加成。
(这个数据集是国外几十年前的数据,现在应该不会有这么大的差距了。)