【因果推断python】28_面板数据和固定效应2

目录

固定效应


固定效应

为了方面后面更正式地讲述,让我们首先看一下我们拥有的数据。按照我们的例子,我们将尝试估计婚姻对收入的影响。我们的数据包含多年以来多个个体 (nr) 的这两个变量,married 和lwage。请注意,工资采用对数形式。除此之外,我们还有其他控制措施,例如当年的工作小时数、受教育年限等。

from linearmodels.datasets import wage_panel
data = wage_panel.load()
data.head()

通常,固定效应模型定义为

y_{it}=\beta X_{it}+\gamma U_i+e_{it}

其中 y_{it}是个体 i 在时间 t 的结果,X_{it} 是个体变量的向量i 在时间 t。 U_i 是单个 i 的一组不可观测值。请注意,这些不可观测值随着时间的推移是不变的,因此缺少时间下标。最后,e_{it} 是错误项。对于教育示例,y_{it} 是对数工资,X_{it} 是随时间变化的可观察变量,例如婚姻和经验,U_i是每个人没有观察到但不变的变量,例如美丽和智力。

现在,请记住我说过使用具有固定效果模型的面板数据就像为实体添加虚拟对象一样简单。这是真的,但在实践中,我们实际上并没有这样做。想象一个我们有 100 万客户的数据集。如果我们为它们中的每一个添加一个 dummy,我们最终会得到 100 万列,这可能不是一个好主意。相反,我们使用将线性回归划分为 2 个独立模型的技巧。我们以前见过这个,但现在是回顾它的好时机。假设您有一个线性回归模型,其中包含一组特征 X_1 和另一组特征 X_2

\hat{Y}=\hat{\beta_{1}}X_{1}+\hat{\beta_{2}}X_{2}

其中 X_1 和 X_2 是特征矩阵(每个特征一行,每个观察一列)和 \hat{\beta_{1}} 和 \hat{\beta_{2}} 是行向量。您可以通过执行获得完全相同的 \hat{\beta_{1}} 参数

  1. 在第二组特征 \hat{y^*}=\hat{\gamma_1}X_2 上回归结果 y
  2. 在第二个 \hat{X_1}=\hat{\gamma_2}X_2 上回归第一组特征
  3. 得到残差 \tilde{X}_1=X_1-\hat{X}_1 和 \tilde{y}_1=y_1-\hat{y^*}
  4. 将结果的残差回归到特征残差 \hat{y}=\hat{\beta_1}\tilde{X_1}

最后一次回归的参数将与使用所有特征运行回归完全相同。但这究竟对我们有什么帮助呢?好吧,我们可以将带有实体假人的模型的估计分解为 2。首先,我们使用假人来预测结果和特征。这些是上面的步骤 1 和 2。

现在,还记得在虚拟变量上运行回归是如何像估计该虚拟变量的平均值一样简单吗?如果你不这样做,让我们用我们的数据来证明这是真的。让我们运行一个模型,我们将工资预测为虚拟年份的函数。

mod = smf.ols("lwage ~ C(year)", data=data).fit()
mod.summary().tables[1]

请注意该模型如何预测 1980 年的平均收入为 1.3935,1981 年的平均收入为 1.5129 (1.3935+0.1194) 等等。 现在,如果我们按年份计算平均值,我们会得到完全相同的结果。 (请记住,基准年 1980 是截距。因此,您必须将截距添加到其他年份的参数中才能获得该年的平均lwage)。

data.groupby("year")["lwage"].mean()

这意味着,如果我们得到面板中每个人的平均值,我们基本上是在对其他变量进行个体虚拟回归。这激发了以下估计过程:

  1. 通过减去个人的平均值来创建时间贬损变量: $\ddot{Y}{it} = Y{it} - \bar{Y}i\ddot{X}{it} = X_{it} - \bar{X}_i$

  2. \ddot{X}{it}上回归上回归\ddot{Y}{it}

请注意,当我们这样做时,未观察到的 U_{i} 消失了。由于 U_{i} 在时间上是恒定的,所以我们有 \bar{U}_i=U_i。如果我们有以下两个方程组

Y_{it} = \beta X_{it} + \gamma U_i + e_{it} \\\bar{Y}{i} = \beta \bar{X}{it} + \gamma \bar{U}i + \bar{e}{it}

我们从另一个中减去一个,我们得到

(Y_{it} - \bar{Y}{i}) = (\beta X{it} - \beta \bar{X}{it}) + (\gamma U_i - \gamma U_i) + ( e{it}-\bar{e}{it}) \\ (Y{it} - \bar{Y}{i}) = \beta(X{it} - \bar{X}{it}) + (e{it}-\bar{e}{it}) \\ \ddot{Y}{it} = \beta \ddot{X}{it} + \ddot{e}{it}

它消除了所有未观察到的随时间不变的事物。老实说,不仅未观察到的变量消失了。这发生在所有时间不变的变量上。因此,您不能包含任何随时间保持不变的变量,因为它们将是虚拟变量的线性组合,并且模型不会运行。

要检查哪些变量是这些变量,我们可以按个体对数据进行分组并获得标准差的总和。如果它为零,则意味着对于任何个人来说,变量都不会随时间变化。

data.groupby("nr").std().sum()
year            1334.971910
black              0.000000
exper           1334.971910
hisp               0.000000
hours         203098.215649
married          140.372801
educ               0.000000
union            106.512445
lwage            173.929670
expersq        17608.242825
occupation       739.222281
dtype: float64

对于我们的数据,我们需要删除实体假人,blackhisp,因为它们对于个人来说是恒定的。 此外,我们需要取消教育。 我们也不会使用职业,因为这可能会调节婚姻对工资的影响(可能是单身男性能够承担更多时间要求更高的职位)。 选择了我们将使用的功能后,是时候估计这个模型了。

要运行我们的固定效应模型,首先,让我们获取平均数据。 我们可以通过按个人对所有内容进行分组并取平均值来实现这一点。

Y = "lwage"
T = "married"
X = [T, "expersq", "union", "hours"]

mean_data = data.groupby("nr")[X+[Y]].mean()
mean_data.head()

为了将数据围绕均值标准化(demean),我们需要将原始数据的索引设置为个体标识符,nr。 然后,我们可以简单地从一个数据集中减去对应的数据均值的数据集。

demeaned_data = (data
               .set_index("nr") # set the index as the person indicator
               [X+[Y]]
               - mean_data) # subtract the mean data

demeaned_data.head()

mod = smf.ols(f"{Y} ~ {'+'.join(X)}", data=demeaned_data).fit()
mod.summary().tables[1]

如果我们相信固定效应消除了所有遗漏的变量偏差,那么这个模型告诉我们婚姻使男人的工资增加了 11%。 这个结果非常显着。 这里的一个细节是,对于固定效应模型,需要对标准误差进行聚类。 因此,我们可以使用库 linearmodels 并将参数 cluster_entity 设置为 True,而不是手动进行所有估计(这只是出于教学原因)。

from linearmodels.panel import PanelOLS
mod = PanelOLS.from_formula("lwage ~ expersq+union+married+hours+EntityEffects",
                            data=data.set_index(["nr", "year"]))

result = mod.fit(cov_type='clustered', cluster_entity=True)
result.summary.tables[1]

mod = smf.ols("lwage ~ expersq+union+married+hours+black+hisp+educ", data=data).fit()
mod.summary().tables[1]

这个模型是说婚姻使男人的工资增加了 14%。 比我们在固定效应模型中发现的效应要大一些。 这表明由于固定的个体因素(如智力和美貌)没有被添加到模型中,结果存在一些省略变量偏差。

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

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

相关文章

【iOS】—— 响应者链和事件传递链

【iOS】—— 响应者链和事件传递链 响应者连和事件传递链概念响应者响应链事件响应者响应链事件iOS中的事件类型:UIKit继承图UIRseponderUITouchUIEvent 事件的产生与传递传递链传递过程 总结 响应者连和事件传递链 概念 响应者 由离用户最近的view向系统传递。i…

【CGAL】Region_Growing检测圆柱,保存结果并输出圆柱体参数

目录 说明代码展示结果展示问题说明 说明 这篇博客以代码为主,使用CGAL中的region growing方法检测圆柱体。将不同的圆柱按不同颜色保存,并输出圆柱体的中心坐标、轴方向以及半径。 region growing的具体思想网上的文章已经有很多,可以参考这…

安装mysql5.7,然后安装mysql workbench进行管理。

1、下载mysql5.7 MySQL :: Download MySQL Installer 这个是32位的安装版 MySQL :: Download MySQL Community Server (Archived Versions) 这个是zip版 这里我下载的是zip版本。 下载完成后,解压缩,然后新建文件my.ini进行配制。 my.ini [mysqld]…

Django DetailView视图

Django的DetailView是一个用于显示单个对象详情的视图。下面是一个使用DetailView来显示单个书籍详情的例子。 1,添加视图 Test/app3/views.py from django.shortcuts import render# Create your views here. from django.views.generic import ListView from .m…

数据结构预备知识(Java):包装类泛型

1、包装类 1.1 包装类 在Java中,每一个基本数据类型都有一个对应的包装类: 在SE的学习中我们已有过简单了解。 我们可以注意到,除了int类型的包装类为Integer,char类型的包装类为Character外,其余基本类型的包装类均…

wordpress主题开发

科普一:wordpress 是一套用 php 这个语言写的CMS后台管理系统,即我们大家的 wordpress 网站后台是一样的,能体现我们网站外观不同的地方就在于wordpress主题(即皮肤),而这个主题的基本构成是 htmlcssjavasc…

JMH309【亲测】典藏3D魔幻端游【剑踪3DⅢ】GM工具+开区合区工具+PC客户端+配置修改教程+Win一键服务端+详细外网视频教程

资源介绍: 经典不错的一款端游 GM工具开区合区工具PC客户端配置修改教程Win一键服务端详细外网视频教程 资源截图: 下载地址

任务倒计时App

设计背景 在某一阶段可能需要给自己设置长期任务,比如找工作、考研等,需要一个单纯的任务计时工具,设置完任务的目标时间后,每次打开App时都能直接看到最新的剩余时间 设计步骤 1. 写java源码 由于需要界面显示,需…

使用MySQL

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 1 下载安装MySQL MySQL是一款开源的数据库软件,由于其免费特性得到了全世界用户的喜爱,是目前使用人数最多的数据库。下面将…

Unity【入门】重要组件和API

Unity重要组件和API 文章目录 1、最小单位GameObject1、成员变量2、静态方法1、代码创建Unity自带几何体 CreatePrimitive2、查找对象3、实例化对象(克隆对象)的方法4、删除对象的方法5、切换场景不移除 3、成员方法1、创建空物体2、为对象动态添加脚本(…

基数排序详解

目录 一、桶排序思想 1.1 什么是桶排序 1.2 桶排序的步骤 二、基数排序思想 2.1 什么是基数排序 2.2 实现方式 2.3 图解 三、代码思路 3.1 前置工作 3.2 映射 3.3 排序 四、C语言源码 一、桶排序思想 1.1 什么是桶排序 桶排序(Bucket sort)是一种排序算法&#xff…

网络安全课程开发

我们为卡巴斯基实验室开发了一个交钥匙教育门户网站,并为其开设了网络安全课程。在资源上,你可以熟悉课程的理论部分-观看视频或阅读插图文本版本,然后通过回答问题来验证你的知识。通过最终测试后,用户将获得证书。 对于这个项目…

Pythone 程序打包成 exe

1.安装pyinstaller # 安装 pip install pyinstaller # 查看版本 pyinstaller -v2.更新pyinstaller 版本 # 更新 pip install --upgrade pyinstaller # 查看版本 pyinstaller -v3.切换到 py文件所在目录 #切换到.py所在的目录 E: cd cd E:\x-svn_x-local\04PythoneProjects\A…

平安养老险陕西分公司荣获“2021-2023年乡村振兴‘三村工程’先进机构”

5月27日,中国平安成立36周年司庆暨三省推广启动大会顺利召开。会上,平安养老险陕西分公司获“2021-2023年乡村振兴‘三村工程’先进机构”荣誉表彰。 过去三年间,平安养老险陕西分公司始终坚持金融为民,在平安集团、平安养老险的指…

【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【08】【商品服务】Object划分_批量删除

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【08】【商品服务】Object划分_批量删除 Object划分批量删除/添加参考 Object划分 数据库中对于一张表的数据,由于拥有隐私字段、多余字段、字段过少等原因,不应该直…

33 _ 跨站脚本攻击(XSS):为什么Cookie中有HttpOnly属性?

通过上篇文章的介绍,我们知道了同源策略可以隔离各个站点之间的DOM交互、页面数据和网络通信,虽然严格的同源策略会带来更多的安全,但是也束缚了Web。这就需要在安全和自由之间找到一个平衡点,所以我们默认页面中可以引用任意第三…

js之简单轮播图

今天给大家封装一个简单的轮播图,可以点击下一张上一张以及自动轮播 <!DOCTYPE html> <html><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>走马…

基于蚁群算法的二维路径规划算法(matlab)

微♥关注“电击小子程高兴的MATLAB小屋”获得资料 一、理论基础 1、路径规划算法 路径规划算法是指在有障碍物的工作环境中寻找一条从起点到终点、无碰撞地绕过所有障碍物的运动路径。路径规划算法较多&#xff0c;大体上可分为全局路径规划算法和局部路径规划算法两大类。其…

Neo4j 桌面版打不开踩坑贴

真的踩坑。。。没有人告诉我为啥桌面版和社区版不能一起下啊&#xff01;&#xff01; 我是先下载了社区版之后再下载的桌面版&#xff0c;结果桌面版界面一直打不开。 尝试了网上多种办法都没效果&#xff0c;好多都是说jdk不兼容导致无法打开&#xff0c;让我从JDK 17 ->…

跨域、JSONP、CORS、Spring、Spring Security解决方案

概述 JavaScript出于安全方面的考虑&#xff0c;不允许跨域调用其他页面的对象。跨域是浏览器&#xff08;如Chrome浏览器基于JS V8引擎&#xff0c;可以简单理解为JS解释器&#xff09;的一种同源安全策略&#xff0c;是浏览器单方面限制脚本的跨域访问。因此&#xff0c;仅有…