【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)=1t1 = np.random.normal(0, 1, size=1000)df1 = pd.DataFrame(dict(t=t1,y=1*t1, # ATE of 1g=1, ))# std(t)=2t2 = np.random.normal(0, 2, size=500)df2 = pd.DataFrame(dict(t=t2,y=2*t2, # ATE of 2g=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()ate1.333333333333333

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

 model = smf.ols("y ~ t + C(g)", data=df).fit()model.paramsIntercept 0.024758C(g)[T.2] 0.019860t 1.625775dtype: 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.rhkb.cn/news/373035.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Parallels Desktop 19下载及查找我的 Parallels Desktop for Mac 激活密钥

Parallels Desktop 19 for Mac v19.3.0.54924中文破解版是一款适用于Mac的虚拟化软件,parallels desktop 19中文版允许您在Mac计算机上同时运行多个操作系统。它使您能够创建虚拟机并在这些虚拟机中安装不同的操作系统,如Windows、Linux或macOS。使用Par…

electron src build

编译文档: 构建说明 | Electron 1 下载depot_tools (1)安装depot_tools用于获取 Chromium 及其依赖项的工具集:地址 WINDOWS Download the depot_tools bundle and extract it somewhere. (2)在 Windows 上,您需要…

zdppy+onlyoffice+vue3解决文档加载和文档强制保存时弹出警告的问题

解决过程 第一次排查 最开始排查的是官方文档说的 https://api.onlyoffice.com/editors/troubleshooting#key 解决方案。参考的是官方的 https://github.com/ONLYOFFICE/document-server-integration/releases/latest/download/Python.Example.zip 基于Django的Python代码。 …

葵花奖见证品牌实力 乐橙旗舰智能锁公开首秀引全场热议

7月9日,被誉为智能家居界奥斯卡的2024第八届“葵花奖”于广州建博会广交会展馆A区会议室隆重举行。经过专业评审委员的严格筛选,乐橙荣获“2024智能锁行业消费者喜爱品牌奖”。 作为广州建博会的重要展商之一,乐橙本次携年度高端旗舰新品智能…

CLion学习笔记-cmake编译和多main函数编译

这里就不讲怎么配置clion了 项目名字 pcl_kdtree_search 1.新建一个工程名字自己取,我这里用自己学习pcl的,加一个main函数,这个时候Cmake里边就是这样的。 #声明要求的cmake最低版本 cmake_minimum_required(VERSION 3.19) #声明一个工程…

Python编程学习笔记(3)--- 操作列表

1、遍历列表 遍历列表可以采用for循环的方法,需要对列表中的每一个元素都执行相同的操作。 具体事实如下: name ["ada","cdb","dbc","bad","jinb"] for Name in name:print(Name)运行结果&#x…

企业化运维(7)_Zabbix企业级监控平台

官网:Zabbix :: The Enterprise-Class Open Source Network Monitoring Solution ###1.Zabbix部署### (1)zabbix安装 安装源 修改安装路径为清华镜像 [rootserver1 zabbix]# cd /etc/yum.repos.d/ [rootserver1 yum.repos.d]# vim zabbix.r…

【Python】基础语法体系:两种常用语句

个人主页:【😊个人主页】 系列专栏:【❤️Python】 文章目录 前言条件语句动态实例if语句if-else 语句if-elif-else 语句嵌套条件语句 循环语句for循环while循环 动态实例嵌套循环 前言 Python语句是构成Python程序的基本单元,用…

Docker:一、安装与卸载、配置阿里云加速器(Ubuntu)

目录 🍁安装docker🌲1、环境准备🌲2、安装docker Engine🧊1、卸载旧版、任何冲突的包🧊2、使用存储库安装🧊3、安装 Docker 包。🧊4、查询是否安装成功🧊5、运行hello-world镜像&…

通用的职位招聘小程序ui模板

蓝色简单的校园招聘,行业招聘,职位招聘手机小程序页面模板。包含:职位列表、职位详情、基本信息填写、登录、个人主页、消息页面等功能 通用的职位招聘小程序ui模板

【计算几何】凸包问题 (Convex Hull)

【计算几何】凸包问题 (Convex Hull) 引言 凸多边形 凸多边形是指所有内角大小都在 [ 0 , π ] [0,π] [0,π]范围内的简单多边形 凸包 在平面上能包含所有给定点的最小凸多边形叫做凸包。 其定义为:对于给定集合 X,所有包含 X 的凸集的交集 S 被称…

UE5 03-物体碰撞检测

在你需要碰撞的物体上添加一个碰撞检测组件 碰撞预设 设置为NoCollision,这样移动过程中就不会有物理碰撞阻挡效果,只负责检测是否碰撞,比较难解释,如果学过Unity的话,可以把它理解成 Collision 为 Trigger -------------------下面这个有点像Unity的OnTriggerEnter,跟OnColli…

单对以太网连接器多场景应用

单对以太网连接器应用场景概述 单对以太网(Single Pair Ethernet,简称SPE)作为一种新兴的以太网技术,以其独特的优势在多个领域得到了广泛的应用。SPE通过单对电缆进行数据传输,支持高速数据传输,同时还能…

解决C++编译时的产生的skipping incompatible xxx 错误

问题 我在编译项目时,产生了一个 /usr/bin/ld: skipping incompatible ../../xxx/ when searching for -lxxx 的编译错误,如下图所示: 解决方法 由图中的错误可知,在编译时,是能够在我们指定目录下的 *.so 动态库的…

2024-7-9 Windows NDK,Clion,C4droid 编译环境配置(基础|使用命令编译,非AndroidStudio),小白(记录)友好型教程

2024-7-9 Windows NDK,Clion,C4droid 编译环境配置(基础|使用命令编译),小白友好型 一直想使用NDK编译出lua库,然后进行开发.结果一直不成功,问题Bug出现了一堆(主要还是自己太菜,毕竟咱是编程散修一名>_<) NDK之前一直不会配置(直接用命令配置的那种,非AndroidStudio),一…

PID控制与模糊PID控制的比较

一、PID控制器的设计 1.PID控制原理图&#xff1a; PID控制其结构框图如下图所示&#xff1a; 图1&#xff1a;PID控制器结构框图 2.PID控制器传递函数的一般表达式 PID控制器传递函数的一般表达形式为&#xff1a; 其中kp为比例增益&#xff1b;ki为积分增益&#xff1b;k…

昇思25天学习打卡营第22天 | Shufflenet图像分类

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

uniapp 表格,动态表头表格封装渲染

1.接口表格数据&#xff1a; {"headers": [{"label": "实例名","name": "v1","order": 1,"hide": false,"dateTypeValue": null},{"label": "所属科室","name&quo…

[从0开始轨迹预测][NMS]:NMS的应用(目标检测、轨迹预测)

非极大值抑制&#xff08;Non-Maximum Suppression&#xff0c;简称NMS&#xff09;是一种在计算机视觉中广泛应用的算法&#xff0c;主要用于消除冗余和重叠的边界框。在目标检测任务中&#xff0c;尤其是在使用诸如R-CNN系列的算法时&#xff0c;会产生大量的候选区域&#x…

【Linux进阶】文件系统3——目录树,挂载

前言 在Windows 系统重新安装之前&#xff0c;你可能会事先考虑&#xff0c;到底系统盘C盘要有多大容量&#xff1f;而数据盘D盘又要给多大容量等&#xff0c;然后实际安装的时候&#xff0c;你会发现其实C盘之前会有个100MB的分区被独立出来&#xff0c;所以实际上你就会有三个…