You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

首次使用匹配方法:基于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

火山引擎 最新活动