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

前几天看了个视频,是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检验。

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

相关推荐
风清扬雨4 分钟前
【计算机视觉】超简单!傅里叶变换的经典案例
人工智能·计算机视觉
一个不秃头的 程序员7 分钟前
代码加入SFTP JAVA ---(小白篇3)
java·python·github
susu108301891111 分钟前
python实现根据搜索关键词爬取某宝商品信息
爬虫·python
HuggingFace12 分钟前
自动评估基准 | 设计你的自动评估任务
人工智能·自动评估
GISer_Jing26 分钟前
神经网络初学总结(一)
人工智能·深度学习·神经网络
java1234_小锋29 分钟前
MyBatis如何处理延迟加载?
java·开发语言
szxinmai主板定制专家34 分钟前
【国产NI替代】基于A7 FPGA+AI的16振动(16bits)终端PCIE数据采集板卡
人工智能·fpga开发
喜欢猪猪38 分钟前
Java技术专家视角解读:SQL优化与批处理在大数据处理中的应用及原理
android·python·adb
海绵波波10739 分钟前
flask后端开发(1):第一个Flask项目
后端·python·flask
林的快手1 小时前
209.长度最小的子数组
java·数据结构·数据库·python·算法·leetcode