引言
在社会科学和经济学研究中,倾向得分匹配(Propensity Score Matching,PSM)是一种常用的因果推断方法。它通过比较处理组和对照组的倾向得分,以减少样本选择偏差。在PSM中,匹配方式主要有放回和不放回两种。本文将深入探讨这两种匹配方式的差异,并分析它们在实际应用中的具体案例。
PSM匹配原理
倾向得分
倾向得分是估计个体接受某种处理(如药物治疗、政策干预等)的概率。在PSM中,我们通常使用逻辑回归模型来估计倾向得分。
匹配过程
- 估计倾向得分:使用逻辑回归模型估计处理组和对照组的倾向得分。
- 计算倾向得分比:计算处理组和对照组的倾向得分比。
- 匹配:根据倾向得分比,对处理组和对照组进行匹配。
放回与不放回匹配
放回匹配
在放回匹配中,处理组和对照组的每个个体都有相同的匹配概率。这意味着每个个体都可以与处理组和对照组中的任何个体匹配。
import pandas as pd
from sklearn.linear_model import LogisticRegression
# 示例数据
data = pd.DataFrame({
'group': ['treatment', 'control'] * 10,
'x1': [1, 2, 1, 2, 1, 2, 1, 2, 1, 2],
'x2': [2, 1, 2, 1, 2, 1, 2, 1, 2, 1]
})
# 训练逻辑回归模型
model = LogisticRegression()
model.fit(data[['x1', 'x2']], data['group'])
# 估计倾向得分
data['propensity'] = model.predict_proba(data[['x1', 'x2']])[:, 1]
# 放回匹配
from sklearn.model_selection import StratifiedKFold
kf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
for train_index, test_index in kf.split(data, data['group']):
train_set, test_set = data.iloc[train_index], data.iloc[test_index]
for i in range(len(train_set)):
match_index = train_set[train_set['propensity'] > test_set['propensity']].index[i]
test_set.loc[match_index, 'matched'] = True
不放回匹配
在不放回匹配中,处理组和对照组的每个个体只能与对方中的一个个体匹配。这意味着某些个体可能无法找到匹配对象。
# 不放回匹配
for i in range(len(train_set)):
match_index = train_set[train_set['propensity'] > test_set['propensity']].index[0]
test_set.loc[match_index, 'matched'] = True
放回与不放回差异
匹配效率
放回匹配通常比不放回匹配具有更高的匹配效率。这是因为放回匹配允许每个个体与多个潜在匹配对象进行比较,从而找到最佳匹配。
偏差
放回匹配可能产生更大的偏差,因为它允许处理组和对照组中的个体相互匹配。这可能导致处理组和对照组在某些特征上存在较大差异。
应用场景
- 放回匹配:适用于样本量较大、处理组和对照组特征差异较小的情况。
- 不放回匹配:适用于样本量较小、处理组和对照组特征差异较大的情况。
实战应用
案例一:药物治疗效果评估
假设我们想评估某种药物对高血压患者的治疗效果。我们可以使用PSM匹配来比较接受药物治疗和未接受药物治疗的高血压患者的血压变化。
案例二:政策干预效果评估
假设我们想评估某项政策对失业率的影响。我们可以使用PSM匹配来比较接受政策干预和未接受政策干预的地区的失业率变化。
结论
放回与不放回匹配是PSM匹配中的两种主要方法。它们各有优缺点,适用于不同的应用场景。在实际应用中,我们需要根据具体问题选择合适的匹配方法,并注意匹配过程中的偏差。