遗漏变量偏差
遗漏变量偏差(Omitted variable bias,简称OV bias)表示还有模型遗漏的变量和XY同时相关。OV bias会导致回归假设\(E(u|X)=0\)不成立,从而使\(\beta\)的估计结果不一致(not consistent),也就是说,\(\beta\)的估计结果是不准确的。
OV bias非常常见,因为现实中的问题涉及的因素非常多,很难把所有因素都考虑在内。为了使回归系数的估计结果更加准确,需要使用一些方法解决OV bias的问题,面板数据回归就是其中一种方法。
面板数据回归(panel data regression)专门处理一个个体被多次观测的情况。比如现在有336个observations,分别是美国48个州7年的数据,每个州一年只有一个观测,但是一个州共被观测到7次,类似下面这样
1 | city year x1 x2 y |
如果我们不关注这些观测值属于哪个州,哪一年,只把它看做336*3
的数据,用y ~ x1 + x2
进行线性回归,就容易产生OV bias
举一个例子
- y是交通事故发生率
- x1是啤酒税
- x2是法定驾驶年龄
这里没有考虑“交通拥堵情况”这个指标。而根据经验
- 交通越拥堵,事故发生率越高
- 西部的州,交通更不拥堵,且啤酒税更低
- 交通拥堵情况不随时间变化(每一年都差不多,但是在不同州有差异)
那么“交通拥堵情况”这个指标就会产生OV bias。类似的变量可能还有“对驾车和喝酒的态度”、“道路质量”等等因素。
对于这种不随时间变化但又同时影响XY的变量,我们没有办法全部找出来,但是可以用一个指标来表示每一个州的“特质”,这个指标就可以控制住这类的变量。控制时间因素的指标也是一样。这就是面板数据回归的思想。
固定效应
这里考虑固定个体效应和固定时间效应。在只考虑一个X的情况下,固定个体效应的回归方程有两种形式(公式字母含义大同小异,请读者自行参考计量教材)
\[Y_{it} = \beta_1X_{it}+\alpha_i + u_{it}\] 和
\[Y_{it} = \beta_0 + \beta_1X_{it}+\gamma_2D2_i+...+\gamma_nDn_i + u_{it}\] 首先要说明,上面两个公式的本质是一样的。
- 两式需要估计的参数数量是一样的
- 两个公式对每一个州来说,都是\(X_{it}\)加对应州的一个截距(相同州的样本截距项相同,不同州不同,即用每个州自己的截距项固定住州的特征)
求解出这些系数有两种方法
第一种直接把固定效应当做k-1个0-1变量进行OLS回归
\[Y_{it} = \beta_0 + \beta_1X_{it}+\gamma_2D2_i+...+\gamma_nDn_i + u_{it}\]
第二种是先对所有样本按照州分组,每组内计算Y和X的均值,每个样本减去对应组均值,拿新数据进行回归。
\[Y_{it} = \alpha_i +\beta_1X_{it}+u_{it}\] 回归结果必满足
\[\frac1T\sum_{t=1}^TY_{it}=\alpha_i + \beta_1\frac1T\sum_{t=1}^TX_{it}+\frac1T\sum_{t=1}^Tu_{it}\] 经过变换
\[Y_{it}-\frac1T\sum_{t=1}^TY_{it}= \beta_1(X_{it}-\frac1T\sum_{t=1}^TX_{it})+(u_{it}-\frac1T\sum_{t=1}^Tu_{it})\] 得到新数据
\[\tilde Y_{it}=\beta_1\tilde X_{it}+\tilde u_{it}\] 第二种形式的理解:将各自州的特性减掉,得到“纯净”的数据放在一起进行回归。
时间效应同理,这里不再赘述。
R语言面板数据回归
R语言中进行面板数据回归使用plm包,安装后导入
1 | library(plm) # 导入包 |
数据形式如下 1
2
3
4
5
6
7
8> head(Grunfeld)
firm year inv value capital
1 1 1935 317.6 3078.5 2.8
2 1 1936 391.8 4661.7 52.6
3 1 1937 410.6 5387.1 156.9
4 1 1938 257.7 2792.2 209.2
5 1 1939 330.8 4313.2 203.4
6 1 1940 461.2 4643.9 207.2
不考虑个体效应和时间效应的情况下,进行OLS回归(结果和lm
函数回归相同)
1 | fit_lr <- plm(inv ~ value + capital, |
结果
1 | > coef(fit_lr) |
固定个体效应(两种方式)
1 | fit_individual1 <- plm(inv ~ value + capital, data = Grunfeld, |
结果
1 | > coef(fit_individual1) |
固定时间效应类似。时间和个体同时固定代码如下
1 | fit_both <- plm(inv ~ value + capital, data = Grunfeld, |
结果
1 | > coef(fit_both) |
随机效应
在接触panel data的时候,经常会在软件中见到fixed effect和random effect,前者就是我们所说的固定效应,而后者称为随机效应。
随机效应不是本文讨论的重点,但是这是一个曾经困扰我很久的点,所以我希望在这里留下一些关于随机效应的学习资料。
随机效应是多阶段回归模型,只在特定条件下才需要使用。随机效应的形式不是唯一的,在plm包的plm函数中,当参数为model = "random"
时,指定了随机效应。同时,还需要指定另一个参数
1 | random.method = c("swar", "walhus", "amemiya", "nerlove", "kinla") |
这是不同理论下的不同随机效应形式,用不同的方法做出来的结果会有很大差异,详见这里。
这里的每一种方法都有一篇论文做支撑,如果想要真正了解每一种随机效应是怎么做的,需要阅读这些论文。论文可以到plm
帮助文档中的Details部分查看。
了解随机效应理论的另外一种好办法是直接看实现它们的源代码,通过查看plm
函数源代码,看参数是如何调用的,抽丝剥茧即可找到函数定义位置。最后找到函数定义位置只要在R语言控制台输入getAnywhere(ercomp.formula)
即可查看。
除此之外,plm包的学习除了看帮助文档中的参数解释和代码示例,还可以看plm包的论文,这个其实在包的User guides, package vignettes and other documentation.部分可以找到。
固定效应代码实现验证
上文提到,面板数据回归系数估计有两种形式,一种是多个0-1变量的OLS回归,一种是通过减去均值变换后进行回归。下面我们来分别使用这两种方法与plm包结果进行对比。以固定个体效应为例
首先贴出plm包的结果
1 | > fit_individual1 <- plm(inv ~ value + capital, data = Grunfeld, |
1.用多个0-1变量的OLS回归
\[Y_{it} = \beta_0 + \beta_1X_{it}+\gamma_2D2_i+...+\gamma_nDn_i + u_{it}\]
其实相当于在最简单OLS回归的基础上,加了一个离散变量firm,离散变量加入回归中,R语言会自动转化为多个0-1变量
1 | fit_01 <- lm(inv ~ value + capital + factor(firm), |
得到结果如下 1
2
3
4
5
6
7> coef(fit_01)
(Intercept) value capital factor(firm)2 factor(firm)3
-70.2967175 0.1101238 0.3100653 172.2025312 -165.2751236
factor(firm)4 factor(firm)5 factor(firm)6 factor(firm)7 factor(firm)8
42.4874229 -44.3200953 47.1354223 3.7432439 12.7510602
factor(firm)9 factor(firm)10
-16.9255550 63.7288739
我们只要关心value和capital两个变量的系数即可,发现它们和plm包给出的结果是一样的。
2.通过减去均值变换后进行回归
\[Y_{it}-\frac1T\sum_{t=1}^TY_{it}= \beta_1(X_{it}-\frac1T\sum_{t=1}^TX_{it})+(u_{it}-\frac1T\sum_{t=1}^Tu_{it})\]
1 | library(dplyr) |
得到结果如下
1 | > coef(fit_mean) |
结果也和plm包相同。
面板回归的统计理解
从上面的实现代码可以看出,从统计的角度来看,固定个体效应,就是把表示个体的那个变量加入回归模型之中,如果考虑时间效应,则再把离散的时间变量加入进来。
这个过程非常简单,也很符合直觉。拿到一个5列的数据,当然是把5列数据都加进去跑模型。离散变量和连续变量没有本质区别,都是变量,都是信息,没有理由放着不用。只不过离散型变量需要转化为多个变量进行回归而已。
但是这个问题到了计量经济学里面,却变复杂了许多。不仅新定义了“面板数据回归”、“固定效应”这些概念;增加了公式的推导;而且非常注重解释这样做的经济学含义,力图说清楚这样做是如何消除了OV bias的影响,如何使回归结果更可靠。统计人学了半天,拨开云雾,才发现原来这就是加了一个离散型变量。
这个现象让我开始思考统计学与计量经济学的区别。
计量经济学会使用大量的统计方法,但是又不只局限于使用,他们更在乎的是模型的理解,更关注因果关系而不是相关关系。这是计量经济学的目的所决定的,他们要探究一些经济现象,和现象背后的原因。他们只能谨慎地关注少数几个变量,考虑各种因素,使用各种方法,尽量消除它们的内生性,使结果更可靠。
我们经常说统计学是万金油,跟业务百搭。统计学研究创造各种方法,为业务问题提供工具。当业务问题不满足于使用工具,延伸出自己的一套思路的时候,它们就独立成一门新的学科了,计量经济学是如此,机器学习也是如此。
我们可以看到这样一个有趣的现象:统计中的离散型变量回归转化为dummy variable(0-1变量)的思想,在计量经济学中叫panel data(其实DID也有用到这个思想),在机器学习中叫one hot编码。计量经济学拿着统计学工具更加谨慎地探索,机器学习拿着统计学方法更加暴力地计算!