【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.mzph.cn/bicheng/43933.shtml

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

相关文章

Python | Leetcode Python题解之第225题用队列实现栈

题目: 题解: class MyStack:def __init__(self):"""Initialize your data structure here."""self.queue collections.deque()def push(self, x: int) -> None:"""Push element x onto stack."&…

LabVIEW机器视觉技术在产品质量检测中有哪些应用实例

LabVIEW的机器视觉技术在产品质量检测中有广泛的应用,通过图像采集、处理和分析,实现对产品缺陷的自动检测、尺寸测量和定位校准,提高生产效率和产品质量。 1. 电子元器件质量检测 在电子制造业中,电子元器件的质量检测是确保产品…

【基于深度学习方法的激光雷达点云配准系列之GeoTransformer】——粗配准

【GeoTransformer系列】——粗配准 1.coarse_matching1.1 概要1.2 功能1.3 超参1.4 input1.5 output2 coarse_target2.1 概要2.2 功能2.3 input2.4 output在模型部分有了初步了解之后, 接下来我们对后续的粗配准、精配准等部分依次进行解读. 本篇主要来看粗配准部分, 代码是在G…

websocket推送消息,模拟推送

上一篇文章:什么是webSocket?以及它的一些相关理论知识 背景: MQTT 的发布/订阅模式与 WebSocket 的双向通信特性相结合。 通过将 MQTT 与 WebSocket 结合使用,可以在 Web 应用中实现高效、实时的消息传输,特别适用于…

24/7/10总结

flex布局 父项常见属性 justify-content:设置主轴上的子元素排列方式 flex-wrap:设置子元素是否换行 align-items:设置侧轴上的子元素的排列方式(单行) 拉伸要把子盒子里的高度给去掉 如果两个align-items都是center并且主轴是y轴就是这种效果…

Java | Leetcode Java题解之第225题用队列实现栈

题目&#xff1a; 题解&#xff1a; class MyStack {Queue<Integer> queue;/** Initialize your data structure here. */public MyStack() {queue new LinkedList<Integer>();}/** Push element x onto stack. */public void push(int x) {int n queue.size();…

操作系统:信号究竟是什么?如何产生?

OS信号 一、信号的概念二、信号的产生1&#xff09;终端按键产生信号1、 前台进程、后台进程2、验证终端按键是否产生信号 2&#xff09;调用系统函数向进程发信号3&#xff09;硬件异常产生信号1、浮点数溢出&#xff0c;CPU产生信号2 浮点数溢出&#xff0c;产生信号原理3. 空…

Mysql-内置函数

一.什么是函数&#xff1f; 函数是指一段可以直接被另外一段程序调用的程序或代码。 mysql内置了很多的函数,我们只需要调用即可。 二.字符串函数 MySQL中内置了很多字符串函数: 三.根据需求完成以下SQL编写 由于业务需求变更,企业员工的工号,统一为5位数,目前不足5位数的全…

windows驱动开发基础-环境篇

前言 Windows上无论是用户模式下还是内核模式下&#xff0c;有关驱动的开发都有可能影响系统稳定性&#xff0c;所以我们首先要准备一个专用的测试环境&#xff0c;可以使用VM等虚拟机方便环境修复和还原 测试模式 开启测试模式&#xff1a;cmd 命令 bcdedit /set testsign…

旷野之间2 - 如何训练医疗保健小型语言模型(AI-SLM)

​​​​ 在本文中,我们将研究如何针对疾病症状训练一个小型医疗保健语言模型。为此,我们将从HuggingFace获取数据集(用于训练我们的模型):https://huggingface.co/datasets/QuyenAnhDE/Diseases_Symptoms QuyenAnhDE/Diseases_Symptoms 数据集来自 Hugging Face。图片来源…

6.MkDocs附录

安装插件 在 MkDocs 中&#xff0c;插件通常是通过 pip​ 工具安装的。你可以使用以下步骤来安装和配置 MkDocs 插件。 1.使用 pip​ 命令安装你需要的插件。例如 pip install pymdown-extensions‍ 2.更新 mkdocs.yml​ 文件。 ‍ 3.使用 mkdocs serve​ 命令本地预览你…

CentOS6禁止锁屏

在电源中设置后还是会锁屏, 原因是有屏幕保护程序 电源管理都 “从不” 一些AI的回答 在CentOS 6系统中&#xff0c;如果你想要禁用锁屏功能&#xff0c;可以编辑/etc/kbd/config文件。这个文件通常包含了键盘相关的设置&#xff0c;包括密码策略和屏幕锁定选项。 首先打开终…

支持向量机 (support vector machine,SVM)

支持向量机 &#xff08;support vector machine&#xff0c;SVM&#xff09; flyfish 支持向量机是一种用于分类和回归的机器学习模型。在分类任务中&#xff0c;SVM试图找到一个最佳的分隔超平面&#xff0c;使得不同类别的数据点在空间中被尽可能宽的间隔分开。 超平面方…

三级_网络技术_12_路由设计技术基础

1.R1、R2是一个自治系统中采用RIP路由协议的两个相邻路由器&#xff0c;R1的路由表如下图(a)所示&#xff0c;当R1收到R2发送的如下图(b)的(V.D)报文后&#xff0c;R1更新的4个路由表项中距离值从上到下依次为0、3、3、4 那么&#xff0c;①②③④可能的取值依次为()。 0、4、…

List、Map、Set 接口在Java中的存取元素特点

List、Map、Set 接口在Java中的存取元素特点 1、List 接口2、Map 接口3、Set 接口4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java中&#xff0c;List、Map和Set是三个最常用的集合接口。它们各自有不同的特点和用途&#xff…

详解Java的内部类

一、基本介绍 一个类的内部又完整的嵌套了另一个类结构。被嵌套的类称为内部类(inner class)嵌套其他类的类称为外部类(outer class)。它是我们类的第五大成员&#xff0c;内部类最大的特点就是可以直接访问私有属性&#xff0c;并且可以体现类与类之间的包含关系。 二、内部类…

Maven的基本使用

引入依赖 1.引入Maven仓库存在的依赖&#xff0c;直接引入&#xff0c;刷新Maven <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.12.RELEASE</version> </dependency…

Redis代替Session实现共享

集群的session共享问题 session共享问题&#xff1a;多台tomcat并不共享session存储空间&#xff0c;当请求切换到不同的tomcat服务时导致数据丢失的问题。 session的替代方案&#xff1a; 数据共享内存存储key、value结构 将redis替换session可以解决session共享问题

从天空到地面:无人机航拍推流直播技术在洞庭湖决口封堵中的全方位支援

据新闻报道&#xff0c;受持续强降雨影响&#xff0c;湖南省华容县团洲垸洞庭湖一线堤防发生管涌险情&#xff0c;随后出现决口。截至7月8日20时左右&#xff0c;226米长的洞庭湖一线堤防决口已累计进占208米&#xff0c;目前剩余18米&#xff0c;有望在今晚或9日凌晨实现合龙。…

7.9实验室总结 SceneBuilder的使用方法+使用javafx等

由于下错了东西&#xff0c;所以一直运行不出来&#xff0c;今天一直在配置环境&#xff0c;配置好了才学&#xff0c;所以没学多少&#xff0c;看了网课学习了SceneBuilder的使用方法还有了解了javafx是怎么写项目的&#xff0c;&#xff0c; 学习了怎么跳转页面&#xff1a;…