在Python上做PSM,可以使用causalinference這個(gè)庫(kù)。以下介紹使用方法。
import pandas as pd
import statsmodels.api as sm
# 拿數(shù)據(jù)集
dataset = sm.datasets.get_rdataset('Wages',package = 'plm')
dataset = dataset.data
dataset

數(shù)據(jù)集
這個(gè)數(shù)據(jù)集是員工的個(gè)人信息(經(jīng)驗(yàn)、性別、種族等等)和工資。假如我們要看性別這一個(gè)因素對(duì)工資的影響。
首先把類別變量轉(zhuǎn)換為dummy變量。
# 類別變量轉(zhuǎn)換為dummy變量
dataset = pd.get_dummies(data = dataset,
drop_first=True
)
dataset

get_dummies
拆分出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)

計(jì)算結(jié)果
結(jié)果的通俗理解:
ATT=0.258,你們這些男人,你的“男人”身份給你帶來(lái)了25.8%的工資加成。
ATC=0.421,女人們,以你們的條件,如果你是男人的話,工資能漲42.1%。
ATE=0.276,所有同志們,“男人”這個(gè)標(biāo)簽,可以給帶來(lái)27.6%的工資加成。
(這個(gè)數(shù)據(jù)集是國(guó)外幾十年前的數(shù)據(jù),現(xiàn)在應(yīng)該不會(huì)有這么大的差距了。)