Python实现固定效应回归模型实现因果关系推断(一)

简介: Python实现固定效应回归模型实现因果关系推断(一)

相关可以表示因果关系 — 仅在满足某些条件时

让我们给出因果关系的正式定义。因果关系是x导致y。关联意味着x和y沿相同或相反的方向一起移动。因果关系应满足以下三个经典条件:

  • x必须在y之前发生
  • x必须与y相关
  • x和y之间的关系不能用其他原因解释。

从相关性推断因果关系是一件很难的事

image.png

图(A):从相关性推断因果关系很可怕

在图(A)中,冰淇淋销量的增长与夏季鲨鱼的袭击密切相关。您认为这有意义吗?这是一种关联,但不是因果关系,因为并非以上三个条件中的所有条件都成立。首先,鲨鱼袭击的次数不会随着冰淇淋销售的增加而增加。

其次,冰淇淋销售量的增长与鲨鱼袭击之间的相关性可能始终存在,也可能不是始终存在。第三,也是最重要的一点,两个因素之间的关系可以用夏季来解释。实际上,炎热的夏天是冰淇淋销售量增加和鲨鱼袭击增加的驱动力。

混杂因素Confounding Factor):冰淇淋销售量x和鲨鱼袭击次数y都受夏季热量,混杂因素z的驱动,如图(B)所示。混杂因素是一个既影响因变量y又影响自变量x的变量,从而导致了虚假关联。一项研究可能会忽略混杂因素。因为我们没有收集足够的数据,所以它是不可观察的。而补救措施是将混杂因素识别为可观察的因素。

image.png

图(B):混杂因素

内生性:如果存在一个混杂因素可以解释x和y之间的关系,则x是内生的。x和y之间的相关性也无法解释或毫无意义。您能说冰淇淋销售与鲨鱼袭击之间存在正相关关系吗?我们不应试图从正号或负号得出任何结论。事实是该系数可以更高,更低,甚至不同。

如何量化X对Y的影响?

为了衡量治疗的效果,我们必须与没有治疗的事实进行比较。换句话说,我们讨论如果个人不接受治疗会产生什么结果。

随机对照试验(RCT)通常是非常好的标准

我们要怎么解决这个难题呢?随机对照试验(RCT)通常被视为非常好的标准,因为可以确定因果关系(Shadish et al,2002)。如果我们可以将个体随机分配到治疗组和对照组,那么两组的个体特征将大致相等。那么,治疗效果就是两组之间的y之差。

让我用一种统计的方式来进行以上描述。普通最小二乘(OLS)假设x与不可观察项𝜺之间没有相关性,即没有内生性。这可以用RCT中实现,因为随机分配下不可能出现内生性或混杂问题。在下式中描述了OLS,其中i是N个个体中每个个体的标识符。第二个方程是矩阵形式。关键假设是E(X𝜺)= 0,这表示x与不可观测项𝜺之间没有相关性。错误项可能是任何不可观察的项。

image.png

但是,在大多数情况下进行RCT会不可行。RCT可能很耗时,或很昂贵,或难以向需要合作的公众解释,并且有时是不道德的。例如,在医院中,研究人员可能会建议将患者保留为对照组。这显然不可行,因为该研究使患者处于危险之中。并非所有决策问题或临床实验都可以遵循RCT。那我们还有什么办法?研究人员越来越依赖于准实验设计并取得了令人信服的结果。“准”一词表面上看起来表示不是真的。准实验设计类似于随机对照试验,但没有对研究者进行随机分配(Cook&Campbell,1979)。

准实验接近“一样好”

RCT中无法进行大量研究。因此,我们使用了准实验设计,其中已曝光和未曝光单位之间的唯一区别是曝光本身。典型的准实验包括回归不连续性回归——Regression Discontinuity(RD),差异——Difference-in-differences(DiD)和固定效应模型——Fixed-Effects Model (FE)。

不连续性回归(RD)

RD设计将刚好高于和刚好低于阈值的对象进行比较,如图(D)中“Before”方案中的绿色框所示。预计绿色框中的主题非常相似。在“After”场景中,正确的小组受到干预,结果有所不同。结果的这种跳跃或不连续可以解释为干预的结果。

image.png

图(D):RD

在“After”期间(“ 1” =After)对Y的预期影响为E [Y(1)| X],而“Before”期间(“ 0” =Before)为E [Y(0)| X ]。在小绿色框中,所有X都非常相似,因此,“之前”和“之后”期间的X被认为是相同的。RD的结果接近RCT。

面板数据(Panel Data):也称为纵向或横向时间序列数据。在面板数据中,您拥有所有时间段内个人的数据点。基本的面板数据回归模型类似于方程式(1),其中𝜶和𝜷是系数,而i和t是个体和时间的指标。面板数据使您可以控制变量并说明各个变量的差异性。有趣的是,在Python中使用Pandas模块时,您可能会奇怪为什么开发人员将其称为“ Pandas”-非常可爱!实际上,它来自“面板数据”。

image.png

假设我们可以在OLS中详尽详尽地指定所有因素:如果我们想知道一个人的婚姻状况是否会增加一个人的收入。假设我们可以指定一个详尽的模型,明确列出影响收入水平的所有因素:

image.png

其中y_it是时间t中i的收入,x_it是婚姻状况,Z_it都是观察到的随时间变化的变量,例如年龄或工作数量。W_i都是观察到的不随时间变化变量,例如种族,𝛆_it是误差项。如果我们可以列出所有因素,则可以得到𝜷的无偏差估计。

在面板数据上运行OLS时,它也称为“池化OLS”。当每个观察值彼此独立时,这是没问题的,虽然这不太可能,因为面板数据中同一个人的观察是相关的。话虽如此,有时观察结果在面板内的相关性很小,可以忽略不计。然后,您可以这样做。

但是,我们不太可能在OLS中指定所有可能的因素:很可能我们无法详尽列出所有OLS的因素。假设我们从上面的方程式中省略了Z_it和W_i,而仅将y_it回归到x_it上。我们知道婚姻状况(x_it),年龄(Z_it)和种族(W_i)很可能相关。在没有明确指定Z_it和W_i的情况下,OLS中𝜷的估计几乎可以肯定是有偏差的。这是因为未在方程式中指定Z_it和W_i使得它们变得不可观察并合并到误差项𝛆_it中。这使得婚姻状况(x_it)是内生的(请参见上面的说明)。所以结果𝜷,无论是正数还是负数,都将毫无意义。因此,遗漏变量的问题是一个非常严重的问题。如果省略了任何已知变量,则OLS中的结果都是不可靠的。

固定效果模型

image.png

上面的𝝆_i变量称为固定效果,因为它不会随时间变化。它捕获了个人的所有不随时间变化的因素,例如性别,种族甚至个人特质。y_it和x_it是i的收入和婚姻状况,Z_it代表i的所有其他随时间变化的因素。假定误差𝛆_it与所有上述因素都不相关(如果违反了此假设,则将面临省略变量导致的偏差)。

如何估算方程式(3)?在几乎所有教科书中,您都可以看到像方程式(3)一样的基本表述形式。可以将其视为i = 0,1。当有多个个体i = 1,…N时,𝝆_i可以视为具有各自系数𝜽_i的一组(N-1)个虚拟变量D_i的简写,如图所示。等式(4)是您在回归输出中看到的。

image.png

DiD是FE模型的特例

DiD是FE模型的特例。

image.png

图(E):DiD

DiD背后的想法很简单。首先,我们计算在“Before”期间两组之间的结果均值之差,即图(E)中的“ A”。其次,我们在“After”期间计算相同的值,即“ B”。然后我们取“第二差异”,即“A”和“ B”之间的差异,并标记为“ C”。第二差异衡量两组结果的变化如何不同。差异归因于干预的因果效应。

以面板数据形式,可以通过“differencing out”混淆因素从有限元模型中得出DiD。因为没有混淆因素,所以影响确实是因果关系。典型设置类似于公式(5)。

image.png

假设个体i在治疗组(x_i = 1)或对照组(x_i = 0)中,并且在治疗前(t_i = 1)或治疗后(t_i = 0)。后期的效应为𝜷_2,如图(E)所示。这是通过以下方式得出的:

image.png

DiD模型和FE模型之间的区别在于更改是外生的。更改是在个人i的选择之外进行的。例如,某州更改了其最低饮酒年龄法律。此政策是外生的。

目录
相关文章
|
7天前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品市场预测的深度学习模型
使用Python实现智能食品市场预测的深度学习模型
38 5
|
8天前
|
机器学习/深度学习 算法 数据可视化
使用Python实现深度学习模型:智能食品配送优化
使用Python实现深度学习模型:智能食品配送优化
25 2
|
7天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
24 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
7天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
42 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
10天前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品储存管理的深度学习模型
使用Python实现智能食品储存管理的深度学习模型
29 2
|
7天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
7天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
7天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!
|
9天前
|
设计模式 算法 搜索推荐
Python编程中的设计模式:优雅解决复杂问题的钥匙####
本文将探讨Python编程中几种核心设计模式的应用实例与优势,不涉及具体代码示例,而是聚焦于每种模式背后的设计理念、适用场景及其如何促进代码的可维护性和扩展性。通过理解这些设计模式,开发者可以更加高效地构建软件系统,实现代码复用,提升项目质量。 ####
|
8天前
|
机器学习/深度学习 存储 算法
探索Python编程:从基础到高级应用
【10月更文挑战第38天】本文旨在引导读者从Python的基础知识出发,逐渐深入到高级编程概念。通过简明的语言和实际代码示例,我们将一起探索这门语言的魅力和潜力,理解它如何帮助解决现实问题,并启发我们思考编程在现代社会中的作用和意义。