【Python实战因果推断】18_线性回归的不合理效果8

目录

Saturated Regression Model

Regression as Variance Weighted Average


Saturated Regression Model

还记得我在本章开头强调回归和条件平均值之间的相似性吗?我向你展示了使用二元干预进行回归与比较干预组和对照组的平均值是完全一样的。现在,由于虚拟变量是二进制列,因此相似之处同样适用于此。如果你把条件随机实验数据交给一个不像你一样精通回归的人,他们的第一反应可能是简单地按信用分数 credit_score1_buckets 对数据进行分割,然后分别估计每组的效果:

 def regress(df, t, y):
 return smf.ols(f"{y}~{t}", data=df).fit().params[t]
 effect_by_group = (risk_data_rnd
 .groupby("credit_score1_buckets")
 .apply(regress, y="default", t="credit_limit"))
 effect_by_group

这将得出各组的效果,这意味着您还必须决定如何对它们进行平均。一个自然的选择是加权平均,其中的权重是每个组的大小:

 group_size = risk_data_rnd.groupby("credit_score1_buckets").size()
 ate = (effect_by_group * group_size).sum() / group_size.sum()

当然,您也可以通过运行所谓的饱和模型来进行完全相同的回归。您可以将虚拟变量与干预进行交互,从而得到每个虚拟变量定义组的效应。在本例中,由于去除了第一个虚拟组,与 credit_limit 相关的参数实际上代表了被省略的虚拟组 sb_100 的效果。它与上文针对信用评分 1_bucketsearlier 组 0 至 200 的估计值完全相同:-0.000071:

 model = smf.ols("default ~ credit_limit * C(credit_score1_buckets)",
 data=risk_data_rnd).fit()
 model.summary().tables[1]

交互参数的解释与第一组(省略)的效果有关。因此,如果将与 credit_limit 相关的参数与其他交互项相加,就可以看到通过回归估算出的各组效应。这与估计每个组的影响完全相同: 

  (model.params[model.params.index.str.contains("credit_limit:")]
 + model.params["credit_limit"]).round(9)

按组别绘制该模型的预测图还会显示,现在就好像是在为每个组别拟合单独的回归。每条线不仅截距不同,斜率也不同。此外,在其他条件相同的情况下,饱和模型的参数(自由度)更多,这也意味着方差更大。如果您看下面的图,就会发现一条斜率为负的线,这在这种情况下是不合理的。不过,这个斜率在统计学上并不显著。这可能只是由于该组样本较少而产生的噪音: 

Regression as Variance Weighted Average

但是,如果饱和回归和按组别计算效应的结果完全相同,那么你可能会问自己一个非常重要的问题。如果运行 default ~ credit_limit + C(credit_score1_buckets)模型,且不包含交互项,则会得到单一效应:只有一个斜率参数。重要的是,如果你回头看,这个效应估计值与你通过估计每个组的效应并用组大小作为权重求平均值得到的效应估计值是不同的。因此,回归是以某种方式将不同组别的效应结合起来。而它的方法并不是样本量加权平均。那么它是什么呢?

要回答这个问题,最好的办法还是使用一些非常说明问题的模拟数据。在这里,让我们模拟两个不同小组的数据。第 1 组的人数为 1000 人,平均干预效果为 1;第 2 组的人数为 500 人,平均干预效果为 2。此外,第 1 组的干预标准差为 1,第 2 组的干预标准差为 2:

 np.random.seed(123)
 # std(t)=1
 t1 = np.random.normal(0, 1, size=1000)
 df1 = pd.DataFrame(dict(
 t=t1,
 y=1*t1, # ATE of 1
 g=1, ))
 # std(t)=2
 t2 = np.random.normal(0, 2, size=500)
 df2 = pd.DataFrame(dict(
 t=t2,
 y=2*t2, # ATE of 2
 g=2,
 ))
 df = pd.concat([df1, df2])
 df.head()

如果你分别估计每一组的效果,并以组大小为权重取结果平均值,你得到的ATE约为1.33,1 * 1000 + 2 * 500 /1500:

effect_by_group = df.groupby("g").apply(regress, y="y", t="t")
 ate = (effect_by_group *
 df.groupby("g").size()).sum() / df.groupby("g").size().sum()
 ate
 
1.333333333333333

但是,如果在控制组别的情况下对 y 对 t 进行回归,结果就大不相同了。现在,综合效应更接近于第 2 组的效应,尽管第 2 组的样本只有第 1 组的一半:

 model = smf.ols("y ~ t + C(g)", data=df).fit()
 model.params
 
 Intercept 0.024758
 C(g)[T.2] 0.019860
 t 1.625775
 dtype: float64

其原因在于回归并不是通过使用样本量作为权重来合并组间效应。相反,它使用的权重与各组干预的方差成正比回归法更倾向于治疗方法差异较大的组。这初看起来可能很奇怪,但仔细想想,就很有道理了。如果干预方法在组内变化不大,你怎么能确定其效果呢?如果治疗方法变化很大,它对干预结果的影响就会更加明显。

总而言之,如果你有多个组,而每个组内的干预治疗都是随机的,那么条件性原则就说明,效果是每个组内效果的加权平均值:ATE=E\Big\{ \Big(\frac{\partial}{\partial t}E\Big[Y_i\Big|T=t,Group_i\Big]\Big)w(Group_i) \Big\}

根据方法的不同,您将有不同的权重。通过回归,w(Group_i)\propto\sigma^2(T)|Group,但您也可以选择手动加权组效应使用样本量作为权重:w(Group_i)=N_{Group}.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/787580.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

逆向分析之电脑端如何调试一些只能手机端浏览器才可以打开的网站

手机端浏览器的指纹和电脑端浏览器的指纹是不同的,这样只在手机端浏览器运行的网站则可以检测网站是否满足手机端浏览器指纹的要求,不满足则可以进行一些反爬措施。 例如一些公众号,其实就是使用手机端浏览器打开的H5网站,就可以进行手机端浏览器指纹检测。 这里只是讲解下…

昇思MindSpore学习总结十二 —— ShuffleNet图像分类

当前案例不支持在GPU设备上静态图模式运行,其他模式运行皆支持。 1、ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型,和MobileNet, SqueezeNet等一样主要应用在移动端,所以模型的设计目标就是利用有限的计算资源来达…

STM32基础篇:AFIO × 查表重映射 × AFIO库函数

AFIO简介 AFIO,直译为:复用输入输出,是STM32上众多的片上外设之一;我们知道当IO引脚复用功能冲突时,可以通过重映射来解决这个问题,而AFIO就是专门用来执行"复用功能的重映射"的模块&#xff08…

Mac电脑上有什么好玩的肉鸽游戏推荐 苹果电脑怎么玩以撒的结合

Mac电脑尽管在游戏兼容性上可能不及Windows。但是,对于喜欢在Mac上游玩的玩家来说,依然有不少优秀的游戏可以选择,尤其是那些富有挑战性和策略性的肉鸽游戏。此外,对于经典游戏《以撒的结合》,Mac平台也提供了良好的游…

模拟考试小程序的设计

管理员账户功能包括:系统首页,个人中心,科目管理,复习资料管理,参考文献管理,用户管理,留言板管理,论坛管理 微信端账号功能包括:系统首页,复习资料&#xf…

2017年,我成为了技术博主

2017年9月,我已经大三了。 >>上一篇(爪哇,我初窥门径) 我大二学了很多java技术,看似我一会就把javaweb/ssh/ssm这些技术栈给学了。 这些技术确实不难,即便是我,我都能学会,…

C# Bitmap类型与Byte[]类型相互转化详解与示例

文章目录 一、Bitmap类型转Byte[]类型使用Bitmap类的Save方法使用Bitmap类的GetBytes方法 二、Byte[]类型转Bitmap类型使用MemoryStream将Byte[]数组转换为Bitmap对象使用System.Drawing.Imaging.BitmapImage类 总结 在C#编程中,Bitmap类型和Byte[]类型之间的相互转…

思维+数学,CF 1138B - Circus

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1138B - Circus 二、解题报告 1、思路分析 设第一组会小丑和杂技的人数分别为x1, y1 第二组会小丑和杂技的人数分别为x2, y2 显然根据要求有: x1 y2 > x1 x2 x2 y2 上式说明第二组每…

下拉框模糊搜索 输入框中的值映射不上去的问题

强制更新 Element-ui中el-select选择器实现输入和搜索&#xff0c;可显示输入值的详细讲解_el-select可输入可选择-CSDN博客https://blog.csdn.net/qq_63438013/article/details/134512480 <el-select keyup.enter.native"handleQuery" blur"selectBlur&qu…

HNU小学期BSP软件编程基础十道测试题

http://t.csdnimg.cn/Yv0R1 文章参考了这位大佬的代码&#xff0c;在他的基础上进行了纠错、完善等处理。 配置 编程前的准备工作按大佬的流程即可&#xff0c;稍有不同的是学习通课程网站的资料里没有头文件的整个压缩包了&#xff0c;但我们可以下载某个BSP版的工程文件&am…

北京大学长安汽车发布毫米波与相机融合模型RCBEVDet:最快能达到每秒28帧

Abstract 三维目标检测是自动驾驶中的关键任务之一。为了在实际应用中降低成本&#xff0c;提出了利用低成本的多视角相机进行3D目标检测&#xff0c;以取代昂贵的LiDAR传感器。然而&#xff0c;仅依靠相机很难实现高精度和鲁棒性的3D目标检测。解决这一问题的有效方法是将多视…

苍穹外卖--编辑员工和根据id查询员工信息

查询员工信息 编辑员工 package com.sky.controller.admin;import com.sky.constant.JwtClaimsConstant; import com.sky.dto.EmployeeDTO; import com.sky.dto.EmployeeLoginDTO; import com.sky.dto.EmployeePageQueryDTO; import com.sky.entity.Employee; import com.sky…

Instruct-GS2GS:通过用户指令编辑 GS 三维场景

Paper: Instruct-GS2GS: Editing 3D Gaussian Splats with Instructions Introduction: https://instruct-gs2gs.github.io/ Code: https://github.com/cvachha/instruct-gs2gs Instruct-GS2GS 复用了 Instruct-NeRF2NeRF 1 的架构&#xff0c;将基于 NeRF 的三维场景编辑方法迁…

IDEA如何创建原生maven子模块

文件 -> 新建 -> 新模块 -> Maven ArcheTypeMaven ArcheType界面中的输入框介绍 名称&#xff1a;子模块的名称位置&#xff1a;子模块存放的路径名创建Git仓库&#xff1a;子模块不单独作为一个git仓库&#xff0c;无需勾选JDK&#xff1a;JDK版本号父项&#xff1a;…

C++ 是否变得比 C 更流行了?

每年都会出现一种新的编程语言。创造一种新语言来解决计算机科学中的挑战的诱惑很难抗拒。一些资料表明&#xff0c;目前有多达 2,500 种语言&#xff0c;这并不奇怪&#xff01; 对于我们嵌入式软件开发人员来说&#xff0c;这个列表并不长。事实上&#xff0c;我们可以用一只…

【Linux】网络新兵连

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 引言 在上一篇博客中&#xff0c;我们简单的介绍了一些Linux网络一些比较基本的概念。本篇博客我们将开始正式学习Linux网络套接字的内容&#xff0c;那么我们开始吧&#xff01; 1.网络中的地址管理 大家一…

uniapp安卓端实现语音合成播报

最初尝试使用讯飞语音合成方式,能获取到语音数据,但是数据是base64格式的,在安卓端无法播放,网上有说通过转成blob格式的url可以播放,但是uniapp不支持转换的api;于是后面又想其他办法,使用安卓插件播报原生安卓语音播报插件 - DCloud 插件市场 方案一(讯飞语音合成) 1.在讯飞…

分享一个Typecho博客系统专用的CloudFlare缓存规则,优化加速一下下!

好久都没有更新Typecho博客了,最近几天明月测试了一套适用于Typecho博客系统的CloudFlare缓存规则,经过近一周时间的测试确定有效,并且加速效果特别突出,今天就无偿分享给大家,也算是为国内Typecho生态添砖加瓦了吧! 总结下来,这套CloudFlare缓存规则带来的好处就是可以…

华为机试HJ108求最小公倍数

华为机试HJ108求最小公倍数 题目&#xff1a; 想法&#xff1a; 要找到输入的两个数的最小公倍数&#xff0c;这个最小公倍数要大于等于其中最大的那个数值&#xff0c;遍历最大的那个数值的倍数&#xff0c;最大的最小公倍数就是输入的两个数值的乘积 input_number_list i…

tableau饼图与环形图绘制 - 5

饼图与环形图绘制 1. 饼图绘制1.1 饼图绘制1.2 显示标签1.3 显示合计百分比1.4 设置百分比格式1.5 添加说明1.6 图像导出 2. 环形图绘制2.1 选择标记为饼图2.1 饼图绘制2.2 双饼图绘制2.3 设置大饼图大小2.4 设置双轴2.5 设置小饼图属性 1. 饼图绘制 酒店价格等级饼图 1.1 饼…