倾向得分匹配案例分析
一、倾向得分匹配法说明
倾向得分匹配模型是由Rosenbaum和Rubin在1983年提出的,首次运用在生物医药领域,后来被广泛运用在药物治疗、计量研究、政策实施评价等领域。倾向得分匹配模型主要用来解决非处理因素(干扰因素)的偏差。
1、基本原理——反事实推断
基本原理是:根据处理组的特征,找出与处理组特征尽可能类似的控制组进行匹配,从而消除非处理因素的干扰。
例如:研究“是否读研”对于“收入”的帮助时,我们只能得到已经读研的处理组的收入情况,但是无法得到处理组的人没有读研的收入情况(反事实)。同时,是否读研和收入本身还受到其他非处理因素(干扰因素)的影响(比如学习成绩、家庭背景、学校差异等),此时,为了明确没有读研的反事实情况,进行反事实推断,校正非处理因素的影响就可以使用倾向得分匹配法,找到与读研的处理组学习成绩、家庭背景、学校差异等非处理因素类似的但是没有读研的控制组进行匹配,然后进行“是否读研”对于“收入”的帮助研究。
2、算法步骤
倾向得分匹配算法步骤如下:
- 计算倾向得分Pscore值
构建一个是否接受培训的二分类变量作为因变量,以干扰因素作为自变量X进行二元logit回归模型构建,然后根据logit模型计算倾向得分Pscore值。Pscore值代表了干扰因素的整体水平情况,Pscore值越接近,说明两个研究对象(员工)的特征(初始工资等)越接近,第二步进行match匹配时,直接针对Pscore值进行。 - 进行匹配
根据计算的倾向得分Pscore值进行处理组和控制组的样本进行匹配。SPSSAU会默认对样本进行编号(id),进行匹配时,针对研究因素Y= 1(处理组)的样本,去找对应Y=0(控制组)的匹配对象。 - PSM效果分析
匹配完成后,需要对匹配效果进行分析,包括分析PSM匹配基本信息、匹配后标准差偏差的变化、平行趋势检验、共同支撑检验等,后续将进行重点说明。
二、案例及SPSSAU实现
1、案例介绍
当前有一个公司,想要研究 “ 是否培训 ” 对于 “ 当前工资 ” 的影响。在公司内部,共收集到78个员工的相关信息,其中有17名员工接受过培训,61名员工未接受培训。已知当前工资会受到 “ 初始工资 ”、“ 工作经验 ”、“ 岗位 ”这3个基本特征的影响。因此,使用倾向得分匹配法找到除 “ 是否培训 ” 这一处理因素不同外,其他基本特征一致的两类人进行研究。
2、SPSSAU匹配操作
SPSSAU进行倾向得分匹配操作如下:将 “ 是否培训 ” 放到研究变量分析框中; “ 初始工资、工作经验、岗位 ” 这三个干扰因素放到特征项分析框中;“ 当前工资 ” 放在结果变量分析框中。同时勾选【保存信息】按钮,SPSSAU会默认输出id、matchid、weight、Pscore四项信息,id和matchid用于展示员工之间的匹配关系;weight用于标识匹配成功的次数;Pscore为二元logit回归模型估计值。SPSSAU操作如下图:

进行匹配时,SPSSAU需要选择匹配方法和抽样方法。
(1)匹配方法选择
SPSSAU提供 “ 最近临法 ”(默认)和 “ 半径匹配法 ” 。“ 最近临法 ” 指找到PScore最接近的意思,“ 半径匹配 ” 找到PScore在可接受范围(阀值,卡钳值)内,阀值越小匹配越精确。本案例选择半径匹配法(0.05)进行匹配,如下图:

(2)抽样方法选择
SPSSAU提供 “ 放回抽样 ”默认和 “ 不放回抽样 ” 两种抽样方式。放回抽样是指某个样本会被重复匹配多次,不放回抽样是指样本最多被匹配1次就截止了。放回抽样的算法运行效率较低,当数据量非常大时可能不合适,本例数据较少,用两种抽样方法都可以,选择使用不放回抽样进行匹配,如下图:

以上操作完成之后,点击【开始分析】按钮,SPSSAU即输出匹配结果,接下来进行匹配效果分析。
3、匹配效果分析
倾向得分匹配效果分析包括分析匹配基本信息、匹配后标准化偏差、PSM平行假设检验、共同支撑检验四个方面。接下来,将逐个进行分析。
(1)匹配基本信息
SPSSAU输出PSM基本信息汇总表如下:

从上表可知,本次匹配使用半径匹配法并且精确匹配优先(精确匹配是指两个样本的Pscore值完全相等),匹配半径值为0.05,使用不放回抽样的方法。需要匹配个数(接受培训人数)为17,最终有16人匹配成功,匹配成功率94.118%。
(2)匹配后标准化偏差
标准化偏差对比图直观展示匹配前和匹配后标准化偏差的变化情况,如果标准化偏差变化明显(或者匹配后标准化偏差<20%),则说明匹配效果较好。
SPSSAU输出标准化偏差变化对比如下:

从上图来看,在匹配后,标准化偏差均小于20%,说明匹配之后,“初始工资”、“工作经验”、“岗位”这3项干扰因素,处理组与控制组特征基本保持一致。说明匹配效果较好。
(3)PSM平行假设检验
倾向得分匹配模型的一个假设是平行假设,即参与匹配的员工必须要各个维度上与处理组员工相似,这样才能保证估计结果的可靠性。
SPSSAU输出PSM平行假设检验如下表:

从上表可以得到:在匹配前,处理组和控制组(是否培训的两类员工),他们的特征项包括“初始工资”、“工作时间”、“岗位”均有显著性差异(p值均小于0.05),说明这3个特征项均属于干扰因素。
匹配后,处理组和控制组的3个特征项之间没有呈现出显著性差异(p值均大于0.05),说明经过匹配,处理组与控制组在这3个特征项上具有一致性。
针对标准化偏差来看,匹配后,特征项的标准化偏差全部低于20%,说明经过匹配处理组与控制组的3个特征项基本一致。标准化偏差减少幅度用于衡量标准化偏差的减少幅度情况,如果该值大于0,说明匹配效果好,该值小于0,说明匹配效果不好。该值越大越好,没有固定标准。从上表来看,3个特征项的标准化偏差减少幅度均大于0,说明匹配效果好。
综上所述,在匹配前,处理组和控制组的3个特征项均存在显著性差异,但经过匹配后,处理组与控制组在3个特征项上无显著性差异,具有一致性。所以PSM模型通过平行假设检验。
(4)共同支撑检验
倾向得分匹配的另一个假设就是共同支撑假设,即处理组与控制组是否具有相同的倾向得分值。共同支撑检验可以通过SPSSAU的核密度图进行检验,检验原理在于对比匹配前与匹配后的倾向得分值的分布情况。
①针对匹配前的Pscore值绘制核密度图,将“是否培训”放入X分析框中,“初始工资”和“工作经验”放入Y分析框中(核密度图Y只针对定量数据,故不分析岗位),SPSSAU操作如下:

得到匹配前初始工资与工作经验的核密度图如下:


从匹配前核密度图来看,处理组与控制组的Pscore值分布存在很大差异。如果忽略这种差异的存在(不进行匹配,直接进行差异分析),很可能导致研究结论偏误。同时看到处理组和控制组存在重叠部分,表明处理组和控制组具备了使用倾向得分匹配模型的条件。
②针对匹配后Pscore值绘制核密度图,筛选出匹配次数weight>0(不放回抽样也可以选择weight=1)的数据后再进行核密度图绘制。SPSSAU操作如下:

再次进行分析,得到匹配后核密度图如下:


从匹配后的核密度图看,经过匹配,处理组和控制组之间出现了显著的靠近与覆盖,存在较大的共同取值区间,表明两组样本在各方面特征已经非常接近,匹配效果较好,即说明通过共同支撑检验。
4、研究结论分析
经过匹配后,研究 “ 是否培训 ” 是否会对 “ 当前工资 ” 产生显著影响可以使用t检验进行分析,但是SPSSAU在倾向得分匹配中可以做到 “ 一步到位 ” ,无需单独进行t检验,在此前将 “ 当前工资 ” 放入【结果变量】中,就是为了直接获得分析结果。SPSSAU输出结果为ATT效应分析,结果如下表:

ATT效应分析的目的在于分析匹配后结果变量在处理组和控制组之间是否有显著性差异。在本例中,即分析匹配后 “ 是否培训 ” 的两类人“当前工资”是否有显著差异。 “ Unmatched匹配前 ” 即第1行数据是指在匹配之前 , “ 研究变量 ” 与 “ 结果变量 ” 之间是否存在着差异性,其意义较小;主要看第二行数据ATT效应。
从上表可以看出,在匹配前,是否培训与当前工资之间呈现性差异(p<0.05)。以及在匹配之后,ATT效应值呈现出显著性(p<0.05),即说明进行PSM分析后显示是否培训与当前工资之间呈现出显著性差异,ATT效应值为17554.412,即意味着是否培训与当前工资起到正向作用。
总结与拓展
倾向得分匹配法是通过对样本建模(logit模型)得到Pscore值,通过Pscore值为处理组在控制组中找到最接近的样本,从而进行研究的。
PSM的优点在于可以控制干扰因素的影响、提高研究的证明力度;但其缺点也不可忽视,例如PSM需要样本量大、可能并非所有样本都能匹配成功,所以导致匹配后引起的样本量的损失问题不能忽视,甚至无法确定匹配后的样本是否能代表原有研究样本。
PSM有优点也有其局限性,但是尽管如此,PSM也是现代研究中一个不可或缺的统计方法,关键在于能够辨别自己的研究问题与PSM的适用性是否匹配,欢迎讨论~
相关文章:
倾向得分匹配案例分析
一、倾向得分匹配法说明 倾向得分匹配模型是由Rosenbaum和Rubin在1983年提出的,首次运用在生物医药领域,后来被广泛运用在药物治疗、计量研究、政策实施评价等领域。倾向得分匹配模型主要用来解决非处理因素(干扰因素)的偏差。 …...
基于SpringCloud的可靠消息最终一致性04:项目基础代码
上一节给出了项目需求和骨架代码,这一节来接着看基础代码。骨架代码和基础代码最主要的区别是:骨架代码都是数据库脚本、POM依赖文件、配置文件内容、运维脚本等,而基础代码则是和业务有关联,但并非关键代码的部分。 这些代码不用一个个地看,主要是看看结构就行。 图二十五…...
操作系统权限提升(十八)之Linux提权-内核提权
Linux 内核提权 Linux 内核提权原理 内核提权是利用Linux内核的漏洞进行提权的,内核漏洞进行提权一般包括三个环节: 1、对目标系统进行信息收集,获取到系统内核信息及版本信息; 2、根据内核版本获取其对应的漏洞以及EXP 3、使…...
华为OD机试真题Java实现【快递运输】真题+解题思路+代码(20222023
快递运输 题目 一辆运送快递的货车,运送的快递均放在大小不等的长方体快递盒中,为了能够装载更多的快递,同时不能让货车超载,需要计算最多能装多少个快递。 注:快递的体积不受限制,快递数最多1000个,货车载重最大50000。 🔥🔥🔥🔥🔥👉👉👉👉👉�…...
java面试题-JVM问题排查
1.常见的Linux定位问题的工具?常见的 Linux 定位问题的命令可以分为以下几类:系统状态命令:包括 top、uptime、vmstat、sar 等命令,用于查看系统整体的状态,如 CPU 使用率、内存使用率、磁盘 I/O 等。进程状态命令&…...
市场上有很多低代码开发平台,不懂编程的人可以用哪些?
市场上有很多低代码开发平台,不懂编程的人可以用哪些?这个问题一看就是外行问的啦,低代码平台主打的就是一个“全民开发”,而且现在很多低代码平台都发展为零代码了,不懂编程也完全可以使用! 所谓低代码开…...
Tina_Linux打包流程说明指南_new
OpenRemoved_Tina_Linux_打包流程_说明指南_new 1 概述 1.1 编写目的 介绍Allwinner 平台上打包流程。 1.2 适用范围 Allwinner 软件平台Tina v3.0 版本以上。 1.3 相关人员 适用Tina 平台的广大客户,想了解Tina 打包流程的开发人员。 2 固件打包简介 固件…...
JVM面试题
JVM 1.jvm的组成部分 类加载器:将javac编译的class文件加载到内存中 运行时数据区:将内存划分成若干个不同的区域。 执行引擎:负责解析命令,提交操作系统执行。 本地接口:融合不同的语言为java所用 2.运行时数据区 方法区&…...
@FeignClient注解
1.在启动类上开启Feign功能 不开会提示找不到所需要的bean Consider defining a bean of type in your configuration SpringBootApplication EnableFeignClients public class AuthApplication {public static void main(String[] args) {SpringApplication.run(AuthApplic…...
一文搞懂如何在 React 中使用 防抖(Debounce)和 节流(Throttle)
在前端的日常开发中,经常会使用到两个函数防抖(Debounce)和节流(Throttle),防抖函数可以有效控制在一段时间内只执行最后一次请求,例如搜索框输入时,只在输入完成后才进行请求接口。…...
Airbyte API
Airbyte API涵盖了Airbyte功能的方方面面,主要分类:Source_definition:来源定义,实现了来源的增删改查功能。Destination_definition:目标定义,实现了目标的增删改查功能。Workspace:工作区管理…...
vue项目使用Electron开发桌面应用
添加npm配置避免安装Electron错误 请确保您的 node 版本大于等于 18. cmd运行: npm config edit 该命令会打开npm的配置文件,请在空白处添加: electron_builder_binaries_mirrorhttps://npmmirror.com/mirrors/electron-builder-binaries/ e…...
std::chrono笔记
文章目录1. radio原型作用示例2. duration原型:作用示例3. time_point原型作用示例4. clockssystem_clock示例steady_clock示例high_resolution_clock先说感觉,这个库真恶心,刚接触感觉跟shi一样,特别是那个命名空间,太…...
接收arp请求并发送回应的实例
本文简单介绍了arp协议,用一个实例查看收到的ARP请求,并对该请求发出ARP回应,实例有完整的源代码,使用C语言在Linux下实现,代码中有详细的注释。 1. ARP协议 ARP(Address Resolution Protocol),地址解析协议;在局域网上通过IP地址获取物理地址MAC的协议,该协议工作在数…...
【高性能计算】TVM使用TE手动优化矩阵乘法算法解析与代码解读
引言 注:本文主要介绍、解释TVM的矩阵优化思想、代码,需要配合代码注释一起阅读。 矩阵乘法是计算密集型运算。为了获得良好的 CPU 性能,有两个重要的优化措施: 提高内存访问的高速缓存命中率。复杂的数值计算和热点内存&#x…...
消息中间件的概念
中间件(middleware)是基础软件的一大类,属于可复用的软件范畴。中间件在操作系统软件,网络和数据库之上,应用软件之下,总的作用是为处于自己上层的应用软件提供运行于开发的环境,帮助用户灵活、高效的开发和集成复杂的…...
窃密恶意软件Raccoon最新样本Stealer v2分析
Raccoon 是一个恶意软件家族,2019 年来一直在地下犯罪论坛中以恶意软件即服务的身份进行售卖。2022 年 7 月,该恶意软件家族发布了 C 语言编写的新版本 Raccoon Stealer v2,打破了以往使用 C 开发的传统。 Raccoon 是一个信息窃密恶意软件&a…...
足球俱乐部管理系统
技术:Java、JSP等摘要:网站是一种主要的渠道。人们通过互联网快速、准确的发布信息、获取信息。而足球俱乐部是足球职业化、专业化的一个标志,是足球运动员以足球谋生时,所被聘用的机构,应运时代发展,规模、…...
2023上半年数学建模竞赛汇总(比赛时间、难易程度、含金量、竞赛官网)
1、美国大学生数学建模竞赛等级:国家级是否可跨校:否竞赛开始时间:2月17日~2月21日综合难度:⭐⭐⭐⭐ 竞赛含金量:⭐⭐⭐⭐⭐竞赛官网:https://www.comap.com/2、MathorCup高校数学建模挑战赛---大数据竞赛…...
【python学习笔记】:PHP7 Null合并运算符
在PHP7,一个新的功能,空合并运算符(??)已被引入。它被用来代替三元运算并与 isset()函数功能结合一起使用。如果它存在并且它不是空的,空合并运算符返回它的第一个操作数;否则返回第二个操作数。 示例 <?php// fetch the value of $_…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
加密通信 + 行为分析:运营商行业安全防御体系重构
在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...
OCR MLLM Evaluation
为什么需要评测体系?——背景与矛盾 能干的事: 看清楚发票、身份证上的字(准确率>90%),速度飞快(眨眼间完成)。干不了的事: 碰到复杂表格(合并单元…...
yaml读取写入常见错误 (‘cannot represent an object‘, 117)
错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...
CSS 工具对比:UnoCSS vs Tailwind CSS,谁是你的菜?
在现代前端开发中,Utility-First (功能优先) CSS 框架已经成为主流。其中,Tailwind CSS 无疑是市场的领导者和标杆。然而,一个名为 UnoCSS 的新星正以其惊人的性能和极致的灵活性迅速崛起。 这篇文章将深入探讨这两款工具的核心理念、技术差…...
