Rosenbaum P. and Rubin D. The Central Role of the Propensity Score in Observational Studies For Causal Effects. Biometrika, 1983, 70(1): 41-55.
Propensity score matching, wiki.
Austin P. An Introduction to Propensity Score Methods for Reducing the Effects of Confounding in Observational Studies.Multivariate behavioral research, 2011, 46(3): 399-424.
基本的概念
符号 |
说明 |
X |
covariate, 用于决策何种treatment |
Z∈{0,1} |
Treatment |
rni |
第n个实例, zn=i 下的反应(outcome) |
Strongly ignorable treatment assignment:
即满足条件可交换性:
(r0,r1)⊥Z|X.
Balancing Score:
一个关于随机变量X的函数b(X)被称为balancing score, 若:
X⊥Z|b(X).
Propensity Score:
e(x):=P(Z=1|X=x).
重要的结果
X⊥Z|b(X)
一个函数b(X)是balancing score, 当且仅当存在一个映射f使得e(X)=f((b(X)).
⇐
当, b(x)≠b的时候, 显然P(Z=z,X=x|b(X)=b)=0, 此时满足条件独立性, 故只需考虑b(x)=b的情况.
P(Z=z,X=x|b(X)=b)=P(Z=z|X=x,b(X)=b)P(X=x|b(X)=b)=P(Z=z|X=x)P(X=x|b(X)=b)?=P(Z=z|b(X)=b)P(X=x|b(X)=b).
显然最后一个等式成立, 只需满足:
P(Z=z|b(X)=b)=P(Z=z|X=x)=e(x′)z⋅(1−e(x′))1−z,∀x′∈{x|b(X)=b}
注: 最后一个等式成立, 是因为e(x′)=f(b(x′))=f(b).
又
P(Z=z|b(X)=b)=∑x′∈{b(X)=b}P(Z=z|X=x′,b(X)=b)P(X=x′|b(X)=b)=∑x′∈{b(X)=b}P(Z=z|X=x′)P(X=x′|b(X)=b)=∑x′∈{b(X)=b}e(x′)z⋅(1−e(x′))1−zP(X=x′|b(X)=b)=e(x′)z⋅(1−e(x′))1−z=P(Z=z|X=x).
注: 显然上面的证明是要求Z∈{0,1}的, 即二元的treatment.
除非有额外的条件, 比如:
P(Z=z|X=x)=P(Z=z|X=x′)=p(z,b)
对所有的x,x′∈{x|b(X)=b}.
⇒
首先, 如果b(X)本身从X的一个单射, 那么显然存在这样的f.
若b()不是单射, 且不存在f使得e(X)=f(b(X)), 则一定存在x,x′使得
e(x)≠e(x′),b(x)=b(x′).
此时:
P(Z=1|X=x)≠P(Z=z|X=x′)→P(Z=1|X=x,b(x))≠P(Z=z|X=x′,b(x′)).
故b(X)不是balancing score, 矛盾.
注: 显然e(X)以及b(X)=X均为balancing score.
(r0,r1)⊥Z|b(X)
若:
(r0,r1)⊥Z|X,0<P(Z=1|X)<1,
则:
(r0,r1)⊥Z|b(X),0<P(Z=1|b(X))<1.
不等式的证明是显然的.
只需证明:
P(Z=1|r0,r1,b(X)=b)=P(Z=1|b(X)=b)=e(X).
P(Z=1|r0,r1,b(X)=b)=ExEz[[Z|X=x,r0,r1,b(X)=b)]|r0,r1,b(X)=b]=ExEz[[Z|X=x)]|r0,r1,b(X)=b]=Ex[e(X)|r0,r1,b(X)=b]=e(X)
最后一个等式成立, 是因为, b(X)=b→e(X)=f(b).
倘若上面的额外的条件成立, 即
P(Z=z|X=x)=P(Z=z|X=x′)=p(z).
则有:
P(Z=z|r0,r1,b(X)=b)=∑x′∈{b(X)=b}P(Z=z,X=x′|r0,r1,b(X)=b)=∑x′P(Z=z|r0,r1,X=x′,b(X)=b)P(X=x′|r0,r1,b(X)=b)=∑x′P(Z=z|X=x′)P(X=x′|r0,r1,b(X)=b)=∑x′p(z)P(X=x′|r0,r1,b(X)=b)=p(z)=P(Z=z|X=x)=P(Z=z|b(X)=b).
总结为:
若:
(r0,r1)⊥Z|X,0<P(Z=z|X)<1,
且:
P(Z=z|X=x)=P(Z=z|X=x′)=p(z;b),∀x,x′∈{b(x)=b}.
则:
(r0,r1)⊥Z|b(X),0<P(Z=z|b(X))<1.
应用
假设X包含所有地confounders, 即
r⊥Z|X.
Propensity Score Matching
既然, 在e(x)下:
r⊥Z|e(x),
那么:
E[r1−r0]=Ee(x){E[r|e(x),Z=1]−E[r|e(x),Z=0]}.
这个期望的过程可以分解为:
- 随机采样e(x);
- 在所有e(X)=e(x)的样本中, 随机选择Z=0和Z=1的样本;
通过此过程构造的新的数据集, 显然只需要将treated group中的群体对r取平均减去control group中的平均就能得到最后的treatment effect的估计了.
通过 propensity score matching 重采样构造的数据集满足:
Z⊥e(X).
因为对于每一个treated group 中有一个样本e(x)=e, 在control group中就有一个对应的e(x′)=e.
propensity score matching 重采样的实际方式可以简化为:
- 从treated group 中随机采样一个样本(x,z,r);
- 计算其propensity score e(x);
- 从control group 中找到一个对应的(x′,z′,r′) 满足e(x′)=e(x);
- 若存在多个x′, 在其中随机采样一个.
上述采样过程中, 会遇到的问题:
-
不存在x′, 这种情况是很容易遇到的, 一般, 我们可以选取x′使得e(x′)最接近e(x), 这种方式一般称为greedy matching; 或者, 我们可以指定一个threshold, 在threshold内的{x′}中采样, 若一个都没有, 则舍弃x.
-
x,x′被选中之后, 是否仍有机会被采样, 这是俩种策略;
Stratification on the Propensity Score
即将e(X)的值域分割成互斥的K个部分, 每个部分所包含的样本数量相近.
然后对每一个部分计算treatment effect, 最后再平均(加权平均, 权重为样本数量).
一般情况下, K=5, 就能使得每一个stratum内的e(X)的值非常接近, 这就能够近似保证:
X⊥Z
在每一个stratum内成立.
那么, 此时我们只需通过取平均就能直接计算出每一个stratum的treatment effect.
Inverse Probability of Treatment Weighting Using the Propensity Score
这个实际上就是普通的 IP weighting.
评估
显然, 我们多半需要从已有的数据中估计出 propensity score, 比如用常见的逻辑斯蒂回归模型. 自然地, 我们需要判断我们拟合的模型是否正确.
既然propensity score 也是一个 balancing score, 那么如果拟合的比较正确, 就应该有:
X⊥Z|e(X).
也就是说, 我们需要判断, 在每一个e(x)下, X,Z是否独立.
对于matching, 若条件独立满足, 则有:
Ee(x){E[X|Z=1,e(x)]|Z=1}=Ee(x){E[X|Z=0,e(x)]|Z=0}
一个期望里用了条件独立, 第二个条件期望相等是因为matching 保证:
e(X)|Z.
故, 我们只需要比较treated group 和 control group的一阶矩的差别:
E[X|Z=1]−E[X|Z=0].
在实际中, 比较的是如下的标准化的:
d=|¯xtreated−¯xcontrol|√(s2treated+s2control)/2.
一般d<0.1就可以认为这个propensity score拟合的不错.
对于stratification, 我们只需对每一个strata判断上面的结果.
对于IP weighing, 说实话没读懂:
For IPTW this assessment involves comparing treated and untreated subjects in the sample weighted by the inverse probability of treatment.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2019-05-08 代数基础
2019-05-08 Kernel PCA and De-Noisingin Feature Spaces
2019-05-08 Python Revisited Day 08 (高级程序设计技术)