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的选择之外进行的。例如,某州更改了其最低饮酒年龄法律。此政策是外生的。

目录
相关文章
|
3天前
|
机器学习/深度学习 供应链 安全
使用Python实现智能食品供应链管理的深度学习模型
使用Python实现智能食品供应链管理的深度学习模型
19 3
|
7天前
|
机器学习/深度学习 数据采集 存储
使用Python实现智能农业灌溉系统的深度学习模型
使用Python实现智能农业灌溉系统的深度学习模型
45 6
|
5天前
|
机器学习/深度学习 PyTorch TensorFlow
使用Python实现智能食品质量检测的深度学习模型
使用Python实现智能食品质量检测的深度学习模型
35 1
|
2天前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品安全监测的深度学习模型
使用Python实现智能食品安全监测的深度学习模型
13 0
|
7天前
|
机器学习/深度学习 数据采集 数据可视化
使用Python实现深度学习模型:智能植物生长监测与优化
使用Python实现深度学习模型:智能植物生长监测与优化
34 0
|
14天前
|
安全 数据处理 开发者
Python中的多线程编程:从入门到精通
本文将深入探讨Python中的多线程编程,包括其基本原理、应用场景、实现方法以及常见问题和解决方案。通过本文的学习,读者将对Python多线程编程有一个全面的认识,能够在实际项目中灵活运用。
|
9天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
2天前
|
存储 人工智能 数据挖掘
从零起步,揭秘Python编程如何带你从新手村迈向高手殿堂
【10月更文挑战第32天】Python,诞生于1991年的高级编程语言,以其简洁明了的语法成为众多程序员的入门首选。从基础的变量类型、控制流到列表、字典等数据结构,再到函数定义与调用及面向对象编程,Python提供了丰富的功能和强大的库支持,适用于Web开发、数据分析、人工智能等多个领域。学习Python不仅是掌握一门语言,更是加入一个充满活力的技术社区,开启探索未知世界的旅程。
11 5
|
2天前
|
人工智能 数据挖掘 开发者
探索Python编程:从基础到进阶
【10月更文挑战第32天】本文旨在通过浅显易懂的语言,带领读者从零开始学习Python编程。我们将一起探索Python的基础语法,了解如何编写简单的程序,并逐步深入到更复杂的编程概念。文章将通过实际的代码示例,帮助读者加深理解,并在结尾处提供练习题以巩固所学知识。无论你是编程新手还是希望提升编程技能的开发者,这篇文章都将为你的学习之旅提供宝贵的指导和启发。
|
14天前
|
弹性计算 安全 小程序
编程之美:Python让你领略浪漫星空下的流星雨奇观
这段代码使用 Python 的 `turtle` 库实现了一个流星雨动画。程序通过创建 `Meteor` 类来生成具有随机属性的流星,包括大小、颜色、位置和速度。在无限循环中,流星不断移动并重新绘制,营造出流星雨的效果。环境需求为 Python 3.11.4 和 PyCharm 2023.2.5。