R数据分析:工具变量回归的做法和解释,实例解析

news/2024/12/25 21:34:54/文章来源:https://www.cnblogs.com/Codewar/p/18631451

前几天看了个视频,是2024年诺贝尔经济学奖得主在分享自己的研究,研究问题是“制度如何形成并影响经济繁荣”,在研究这个问题的时候他的PPT中提到研究的统计过程中用到了工具变量,想着再次大家介绍一下这个方法。说不定利用这个方法,哪天我的读者里面也出个诺贝尔奖得主呢,哈哈哈。

想象一下:你想知道“冰淇淋销量”和“溺水人数”之间是否存在关系。你通过数据发现,冰淇淋销量高的月份,溺水人数也比较多。你可能会得出“吃冰淇淋导致溺水”的结论吗?显然不合理。

问题出在哪里?

这里存在一个“遗漏变量”——气温。

  • 气温升高,人们更喜欢吃冰淇淋,导致冰淇淋销量上升。
  • 气温升高,人们更喜欢去游泳等水上活动,导致溺水人数上升。

所以,冰淇淋销量和溺水人数之间并非直接的因果关系,而是都被气温这个共同的因素所影响。这种因为遗漏变量导致你研究的变量(冰淇淋销量)和影响结果的“其他因素”(这些“其他因素”我们统称为“误差项”)产生关联的情况,就叫做内生性。

内生性指的是,在统计模型中,解释变量(比如“吃冰淇淋”)和误差项(也就是我们没有观测到的其他影响因素)之间存在关联。这会导致模型估计结果产生偏差,我们无法准确地推断出因果关系。

In econometrics, endogeneity refers to the situation where an explanatory variable in a regression model is correlated with the error term

具体来说,内生性通常由以下几种原因引起:

1.遗漏变量(Omitted Variable): 模型中遗漏了一个或多个与解释变量和因变量都相关的变量。

例子: 研究教育程度对工资收入的影响时,如果模型中没有考虑到个人能力,而个人能力同时影响教育程度和工资收入,那么教育程度就与误差项相关,产生内生性。

2.双向因果关系(Simultaneity/Reverse Causality): 解释变量和因变量之间存在互为因果的关系。

例子: 研究广告支出对销售额的影响时,广告支出可以促进销售额的增长,而高销售额也可能反过来导致企业增加广告投入,这就形成了双向因果关系。

3.测量误差(Measurement Error): 解释变量的测量存在误差,导致其与误差项相关。

例子: 调查人们的收入水平时,受访者可能由于各种原因(例如,记忆偏差、隐瞒真实收入等)而提供不准确的信息,这就导致收入的测量存在误差,从而产生内生性。

4.样本选择偏差(Sample Selection Bias): 研究对象的选择并非随机,而是基于某些与因变量相关的因素进行选择,导致样本不具有代表性,从而产生内生性。

例子: 研究大学教育对毕业生收入的影响时,如果只有成功找到高薪工作的毕业生才愿意参与调查,那么样本就存在选择偏差,因为高收入本身就与接受大学教育的意愿和能力相关。

工具变量的概念:

工具变量就像是一个“替身”,它可以帮助我们解决内生性问题。为了解决内生性问题,我们需要找到一个只影响“冰淇淋销量”,而不直接影响“溺水人数”的变量。这个变量就叫做工具变量。一个好的工具变量需要有两个重要特征,一个是相关性,另一个是外生性。

An instrumental variable (IV) is a variable that is correlated with the endogenous explanatory variable but is uncorrelated with the error term in the regression model

我们还是用刚刚“冰淇淋销量”和“溺水人数”的例子来说明: 假设我们找到一个工具变量叫做“太阳镜销量”,这个变量它满足:

  • 相关性(Relevance): 气温升高,人们更喜欢买太阳镜,所以“太阳镜销量”和“冰淇淋销量”是相关的。工具变量与内生解释变量高度相关。这意味着工具变量能够有效地预测内生解释变量的变动。
  • 外生性(Exogeneity): “太阳镜销量”本身并不会直接导致溺水人数增加。它只能通过影响“冰淇淋销量”来间接影响(或者说和“溺水人数”产生表面上的关联)。工具变量与误差项不相关。这意味着工具变量不会通过其他渠道直接影响因变量,只能通过影响内生解释变量来间接影响因变量。

“太阳镜销量”就满足了工具变量的两个关键条件:

  1. 与内生变量(冰淇淋销量)相关。
  2. 与误差项(影响溺水人数的其他因素,例如水域安全措施、游泳技能等)不相关。

工具变量如何工作?

工具变量的目的是将“冰淇淋销量”这个解释变量或者叫做自变量分解成两部分:

  1. 受“太阳镜销量”影响的部分: 这部分和“溺水人数”的“其他影响因素”无关。
  2. 不受“太阳镜销量”影响的部分: 这部分可能和“溺水人数”的“其他影响因素”有关(也就是内生性问题的来源)。

通过工具变量,我们只关注“冰淇淋销量”中不受“其他影响因素”干扰的那部分,从而更准确地估计“冰淇淋销量”和“溺水人数”之间的关系(虽然在这个例子中,我们期望得到的关系是不显著的,也就是吃冰淇淋和溺水没关系)。

再归纳一遍上述思路:就是我们要研究xy的关系,这个关系可能是相当复杂的,复杂到可能根本就无法直接估计,比如社会制度和繁荣的关系;那么这个时候我找到了一个和社会制度强相关的变量Z,并且这个Z和繁荣没关系,那么我们就可以用Z和繁荣的关系去作为xy关系的估计。

但是变量Z其实是不好找的,根本不会存在Z和X完全相关,所以我们依然是要借住统计方法将Z实际起作用的部分抠出来,变成xy的关系可以用受Z影响的x的部分和Y的关系作为估计。

两阶段最小二乘法(2SLS)

工具变量最常用的应用方法是两阶段最小二乘法:

  1. 第一阶段: 用工具变量(太阳镜销量)去预测内生变量(冰淇淋销量),得到“冰淇淋销量的预测值”。这个预测值只包含了“冰淇淋销量”中受“太阳镜销量”影响的部分,因此和“其他影响因素”无关。
  2. 第二阶段: 用“冰淇淋销量的预测值”去预测因变量(溺水人数)。这样得到的估计结果就消除了内生性带来的偏差。

总体来说就是工具变量的本质是寻找一个外生的变动来源,帮助我们分离出内生变量中与误差项无关的部分,从而更准确地估计变量之间的因果关系。

实例解析

假设我们研究教育程度(Education)对工资收入(Wage)的影响。但是,教育程度可能存在内生性问题,因为:

  • 遗漏变量: 例如,个人能力可能同时影响教育程度和工资收入,如果模型中没有控制个人能力,就会导致教育程度与误差项相关。
  • 双向因果关系: 高工资收入也可能反过来激励人们继续接受教育。

我们可以使用“父母教育程度”(Parent Education)作为教育程度的工具变量来消除内生性问题,因为它可能与个人的教育程度相关(父母教育程度高的子女更有可能接受更高的教育),但不太可能直接影响个人的工资收入(除非通过遗传等其他途径,但这种影响相对较弱,可以忽略不计)。

假设我现在有数据如下:

 

其中wage为因变量工资收入,education为自变量教育程度,parent_edu为工具变量父母教育程度。下面代码便是这个例子中两阶段最小二乘的实操代码

iv_model <- ivreg(wage ~ education | parent_edu, data = data) # |左边是内生变量,右边是工具变量
summary(iv_model, diagnostics = TRUE) #诊断信息,包括弱工具变量检验

代码中要注意公式的写法:ivreg(income ~ edu | paredu, data = data:

  • income ~ edu: 表示要估计的模型,即收入是教育水平的函数。
  • | paredu: 表示paredu是edu的工具变量。

运行代码后输出结果如下:

 

可以看到模型估计的自变量的系数为0.3461,并且是显著的,意味着受教育程度确实会影响工资收入。

设置参数diagnostics = TRUE,会输出一系列的检验结果:

  • Weak instruments(弱工具变量检验): 。F 统计量(First-stage F statistic)应该足够大(通常大于10),以避免弱工具变量问题。若F统计量过小,则说明工具变量与内生变量的相关性不够强,可能导致2SLS估计的偏差仍然很大。可以看到我们结果P很小,意思是拒绝了弱工具变量的原假设。
  • Hausman test(豪斯曼检验): 用于检验是否存在内生性。原假设是OLS估计是有效的(即不存在内生性)。如果豪斯曼检验拒绝原假设(p 值小于显著性水平),则表明存在内生性,需要使用工具变量回归。可以看到结果中该检验p值大,说明确实存在内生性需要做两阶段最小二乘。
  • Sargan test(萨根检验或过度识别检验): 仅当工具变量个数多于内生变量个数时进行。检验工具变量的外生性是否成立。原假设是所有工具变量都是外生的。如果萨根检验拒绝原假设,则表明至少有一个工具变量不是外生的,模型设定存在问题。在本例中,只有一个工具变量,因此不会有Sargan检验。

总之,工具变量回归是一种重要的计量经济学方法,用于解决内生性问题。正确理解和使用工具变量回归需要仔细考虑工具变量的选择、检验和解释。在实际应用中,应该结合具体的研究问题和数据情况,谨慎使用工具变量回归。

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

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

相关文章

昆工25考研复试时间预测(信自院)

昆工昆明理工大学、计算机技术、人工智能、软件工程、网络空间安全、891计算机专业核心综合、计算机系统结构、计算机软件与理论、计算机应用技术、通信工程、817信号与系统、信号与信息处理、通信与信息系统、通信工程(含宽带网络、移动通信等)

WebP图片格式

WebP WebP 是一种图片文件格式,由 Google 开发,用于提供更好的图像压缩性能。支持有损压缩和无损压缩,同时支持透明度(类似 PNG 格式的 alpha 通道)和动画(类似 GIF 格式)。 WebP特点高效压缩 •有损压缩:与 JPEG 相比,WebP 的文件体积更小,同时保持类似的图像质量。…

谁让你创建两个对象的?

如果CLASSPATH下有两个不同版本的jar包,一个版本的jar包有@Component注解,另外一个版本没有,Spring到底会不会创建Bean?问题现象 之前遇到过一个问题,在一个微服务的目录下有相同功能 jar 包的两个不同的版本,其中一个版本里面的类有 @Component 注解,另外一个版本的类里…

打印三角形金字塔 、debug、java的方法、命令行传参、可变参数20241225

打印三角形金字塔 debug20241225package com.pangHuHuStudyJava.struct; public class Print_Tran {public static void main(String[] args) {for (int j = 0; j < 5; j++) {for (int r = 5; r > j; r--) {System.out.print( );}for (int s = 0; s < ((2*j)+1); s++…

OpenAI o3模型震撼发布:编程界的革命性突破,程序员的未来将何去何从?

当人工智能踏足编程领域,生产力的提升让人瞠目结舌。就在近日,OpenAI 发布了全新的 o3模型,其强大的代码生成能力和上下文理解能力,将编程带入了一个全新的时代。是机遇还是挑战?程序员们将如何面对这场技术风暴?o3模型究竟有何与众不同之处?它的发布会对程序员和整个软…

[Java/压缩] Java读取Parquet文件

序:契机生产环境有设备出重大事故,又因一关键功能无法使用,亟需将生产环境的原始MQTT报文(以 parquet 文件格式 + zstd 压缩格式 落盘)DOWN到本地,读取并解析。本文聚焦在 本地电脑,用 java 读取 parquet 文件相当多网络文档的读取代码无法正常运行,有必要记录一二,后续…

莫队从入门到人门

普通莫队 详介(P2709 小B的询问) 普通莫队处理问题的前提是问题可以离线,多次区间查询,\(O(n\sqrt m)\) 能过。 我们以 P2709 小B的询问 为例,假设当前区间为 \([l,r]\),答案为 \(ans\),那么 \(r\) 右移一位时,新加入一个数 \(x\),我们只要把 \(ans\) 加上 \(x\) 的贡…

nacos安装注意事项

一年多没玩了,都快忘了,最新版本已经2.3.x了 3.0也快问世了 Linux/Unix/Mac 单机启动命令: sh startup.sh -m standalone Windows startup.cmd -m standalone如果直接未启动就是集群模式,但是要注意nacos.properties里面配置集群信息本文来自博客园,作者:余生请多指教ANT…

PWN系列-2.27版本利用setcontext实现orw

PWN系列-2.27版本利用setcontext实现orw 知识 开启沙箱之后,我们就只能用orw的方式来得到flag。 这篇博客主要讲通过劫持__free_hook或者__malloc_hook利用setcontext在libc或者heap上执行rop或者shellcode。 在free堆块的时候,rdi会指向堆块,在检测到__free_hook有值的情况…

shell语法保姆级教程

Shell脚本 建立一个sh脚本 touch 1.sh (新建脚本文件)vi 1.sh(编写文件内容)按 i 可以写入内容,按esc :wq退出并保存解释 1、创建脚本文件 2、脚本文件中第一行为指定脚本编译器:# !/bin/bash 最终调用的都是dash执行shell脚本命令: 1、./1.sh难道我们必须要修改权限才能执…

从0开始学uniapp——认识HBuilderX

为什么使用uniapp:可以多端运行,写好了这一套可以用在h5,安卓程序,小程序多端,很方便。1.百度搜HBuilderX,使用该编译器学习uniapp 2.新建一个默认项目 pages——用于存放页面,这里都是.vue后缀的页面, pages.json——用于存放路由pages数组里按例子添加即可,HBuilder…

Java中SPI机制原理解析

本文介绍了Java中SPI机制实现的大概原理以及SPI机制在常见的框架如JDBC的Driver加载,SLF4J日志门面实现中的使用。使用SPI机制前后的代码变化加载MySQL对JDBC的Driver接口实现 在未使用SPI机制之前,使用JDBC操作数据库的时候,一般会写如下的代码:// 通过这行代码手动加载My…