【python因果库实战16】双重稳健模型1


在这里插入图片描述

双重稳健模型

基本上,这些是利用加权模型增强结果模型的不同集合模型。

本笔记展示了不同的结果模型和倾向性模型组合方式,
但由于可能的组合非常多,本笔记并不打算展示所有组合。

%matplotlib inline
from sklearn.linear_model import LogisticRegression, LinearRegression
from causallib.datasets import load_nhefs
from causallib.estimation import IPW, Standardization, StratifiedStandardization
from causallib.estimation import AIPW, PropensityFeatureStandardization, WeightedStandardization
from causallib.evaluation import evaluate

数据

戒烟对体重减轻效果的研究。
数据示例取自 Hernán 和 Robins 的《因果推断》一书。

data = load_nhefs()
data.X.join(data.a).join(data.y).head()

在这里插入图片描述

简单双重稳健模型

用于平均结果。
其个体结果估计直接来自于结果模型,
但对于群体结果,它会在取加权平均之前使用个体结果预测来校正观察到的结果。

ipw = IPW(LogisticRegression(solver="liblinear"), clip_min=0.05, clip_max=0.95)
std = StratifiedStandardization(LinearRegression())
dr = AIPW(std, ipw)
dr.fit(data.X, data.a, data.y)
AIPW(outcome_covariates=None, outcome_model=StratifiedStandardization(learner=LinearRegression()), overlap_weighting=False, predict_proba=False, weight_covariates=None,
     weight_model=IPW(clip_max=0.95, clip_min=0.05, use_stabilized=False, verbose=False,
    learner=LogisticRegression(solver='liblinear')))

双重稳健校正群体结果

pop_outcome = dr.estimate_population_outcome(data.X, data.a, data.y)
pop_outcome
qsmk
0    1.761707
1    5.205193
dtype: float64
effect = dr.estimate_effect(pop_outcome[1], pop_outcome[0])
effect
diff    3.443486
dtype: float64

双重稳健 IP 特征模型

训练一个加权模型,然后将其输出(预测的权重)作为附加特征输入到结果模型中。

如果可能(如同 IPW),会使用整个权重矩阵(每个个体对于每种处理的权重),
但通常情况下,只会使用权重向量(根据实际的处理分配)。

ipw = IPW(LogisticRegression(solver="liblinear"))
std = Standardization(LinearRegression())
dr = PropensityFeatureStandardization(std, ipw)
dr.fit(data.X, data.a, data.y)
PropensityFeatureStandardization(feature_type=weight_vector, outcome_covariates=None, outcome_model=Standardization(encode_treatment=False, predict_proba=False,
                learner=LinearRegression()), predict_proba=False, weight_covariates=None,
                                 weight_model=IPW(clip_max=None, clip_min=None, use_stabilized=False, verbose=False,
    learner=LogisticRegression(solver='liblinear')))
ind_outcomes = dr.estimate_individual_outcome(data.X, data.a)
ind_outcomes.head()

在这里插入图片描述

effect = dr.estimate_effect(ind_outcomes[1], ind_outcomes[0],
                            effect_types=["diff", "ratio"])
effect
diff     3.112635
ratio    2.694151
dtype: float64
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水木流年追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值