首次使用匹配方法:基于Propensity score matching的国家特征分组咨询
使用Stata的psmatch2进行国家相似特征分组(倾向得分匹配)
嘿,刚接触倾向得分匹配(PSM)用来做国家相似特征分组是吧?我来一步步给你捋清楚怎么用Stata的psmatch2实现你的需求,完全贴合你给的示例数据集来讲解~
1. 先理清核心逻辑
PSM原本是用来做因果推断的,但用来给特征相似的国家分组完全可行——核心是先计算每个国家的倾向得分(基于你指定的特征,比如收入、人口,计算出来的一个综合得分,得分越接近说明特征越相似),再基于得分进行分组。
2. 准备工作:安装psmatch2(如果还没装)
如果你的Stata里还没装这个命令,先执行:
ssc install psmatch2
(执行后会自动下载安装,确保你的Stata能连外网)
3. 计算每个国家的倾向得分
首先,PSM需要一个“处理组”的定义——如果你没有特定的参照国家,我们可以先选一个基准(比如示例里的US),把它设为处理组,其他国家作为对照组,这样就能计算所有国家和US特征相似的倾向得分:
// 1. 创建处理组虚拟变量:US为处理组(取值1),其他为对照组(取值0) gen treat = (Country == "US") // 2. 用logit模型估计倾向得分,协变量是income和population psmatch2 treat income population, logit
执行完后,Stata会自动生成一个pscore变量,这就是每个国家的倾向得分啦——得分越接近1,说明和US的特征越相似。
4. 按高倾向得分分组
有了pscore之后,就可以灵活分组了,给你几个常用的方法:
方法一:按得分分位数分组(比如高、中、低三组)
把所有国家的倾向得分分成3组,得分最高的组就是你要的高倾向得分组:
// 按3分位数分组,pscore_group=3对应高得分组 xtile pscore_group = pscore, nq(3)
方法二:按阈值筛选高得分国家
比如把得分排在前30%的国家归为高分组:
// 筛选出得分高于70分位数的国家(即前30%) gen high_pscore = (pscore > percentile(pscore, 70))
方法三:直接匹配相似国家成组
如果想让每个国家匹配1个最相似的国家,生成一对一的匹配组:
// 指定匹配1个最相似的邻居,生成匹配标识 psmatch2 treat income population, logit neighbor(1)
执行后会生成_id(国家自身ID)和_n1(匹配到的相似国家ID),你可以用这两个变量对应出相似的国家对。
5. 验证分组是否合理
分组后记得检查一下高分组里的国家特征是不是真的相似,比如看高分组的收入和人口均值:
// 按分组统计特征均值 bysort pscore_group: summarize income population
如果高分组的income和population均值差异很小,说明分组是合理的~
一些小提示
- 要是你没有特定的参照国家,也可以先尝试无监督聚类(比如
kmeans)结合倾向得分,不过psmatch2的框架需要一个处理组,所以先选一个基准国是最直接的方式。 - 处理数据前记得先清理缺失值:
drop if missing(income, population),不然会影响得分计算。 - 想深入了解命令参数的话,直接在Stata里输
help psmatch2就能看到详细文档。
内容的提问来源于stack exchange,提问作者neto333




