专栏名称: 码农经济学
Something Anything Nothi…
目录
相关文章推荐
廣告狂人  ·  “好炸鸡自有答案”,系列整活简直王炸! ·  13 小时前  
销售与市场  ·  假“饺子”吸粉带货,《哪吒2》被畸形流量围攻了 ·  20 小时前  
廣告狂人  ·  格力改名,市场部天塌了! ·  昨天  
销售与市场  ·  商超“回暖”? ·  昨天  
51好读  ›  专栏  ›  码农经济学

线性模型的异方差问题

码农经济学  · 知乎专栏  ·  · 2015-05-27 03:05

正文

首先感谢慧航童鞋允许我在他的地盘写一篇反对他的文章,其次感谢我的若干计量老师,本文的观点并非我的原创,因此你可能也会从其他地方听到类似的观点。本文的观点我最早是从朱家祥老师那里听到的,后来又在 Achen 文章中以及 Signorino 的课程中听到类似的观点,均觉得很有道理,也觉得有必要花些时间让更多的人了解这一个观点。

这篇文章起源于慧航童鞋的 计量经济学中那些从统计学、初级计量里面带来的恶习 - 学点经济学 - 知乎专栏 ,他在该文中认为线性模型中异方差不重要,使用 robust standard error 修正即可,我认为哪怕是线性模型,我们也需要特别重视异方差问题,我背后的观点是异方差是遗漏变量的信号。他随后在 为什么会存在异方差? - 码农经济学 - 知乎专栏 举出了两个例子说明没有设定偏误的模型里头也会很自然的出现异方差,然后我发现他的第一个例子是错误的,第二个例子是一个特殊情况,不足以打翻我的看法。

首先我先花一定的篇幅解释一下什么是、以及为什么我认为“异方差是遗漏变量的信号”。首先抛出两个假设:

  1. 这个世界是存在(近似)正确的模型的。
  2. 在(近似)正确的模型中,误差项应当是一个独立同分布的白噪音。

第一个假设并不见得与 "all models are wrong" 这一个很流行的信条相冲突,只要你同意不同的模型错误的程度不一样,随着知识的增加,我们可以趋近正确的模型,并且在接近正确模型的时候,误差项也接近独立同分布的白噪音,那么本文的逻辑稍加修改即同样适用。第二个假设则是来自这样一个信条:如果我们找到了真正决定因变量的各因素,并且正确设定了模型,那么剩下的就应该只是一些完全随机的误差,这些误差不应当与因变量有任何形式的系统性关联。

有了这两个假设,那么我们很容易就可以推出如果你的模型中存在了异方差的问题,那么你的模型出问题了,不那么正确了。

模型设定有误就一定是遗漏变量吗?当然不一定。学过 ARCH 模型的同学都知道,我们可以对方差进行建模,在 ARCH 模型的假设下有异方差,没有遗漏变量的问题。当然这是没错的。那么我为什么说异方差是遗漏变量的信号,需要格外关注?

考虑这样一个数据生成过程:

y_i = \beta_1 x_i + \beta_2 z_i +\varepsilon_i

其中 \mathrm{E}(\varepsilon_i|x_i,z_i)=0\mathrm{Var}(\varepsilon_i|x_i,z_i) = \sigma^2 ,但是 x_iz_i 有一些千丝万缕的联系。如果出于某些原因,一个人估计了一个这样的模型:

y_i = \gamma x_i + u_i

这样的话 u_i = \beta_2 z_i + \varepsilon_i . 由于 x_iz_i 有一些千丝万缕的联系,使得 \mathrm{E}(u_i|x_i)\neq 0 以及 \mathrm{Var}(u_i|x_i) 不等于常数。注意到我们无法去检测 \mathrm{E}(u_i|x_i)\neq 0 ,但是异方差检测告诉我们 \mathrm{Var}(u_i|x_i)x_i 有关。这个时候单纯的修正异方差,采用 robust standard error 并不能够使得 \hat\gamma \rightarrow \beta_1 ,更糟糕的是由于 robust standard error 的存在,使得我们很容易忽略异方差这一个信号,结果是我们冒着系数不一致这样一个更大的风险。

为了进一步说明问题的严重性,我跑了一个蒙特卡洛模拟。还是上头那个模型, \beta_1 的真值设为 0 \beta_2=2 ,我令 z_i = x_i w_i ,其中 w_i 是一个与其他变量都无关的另一个变量,这样的话很方便的产生出“ x_iz_i 有一些千丝万缕的联系”。模拟数据生成的过程中我令 x_i \sim N(1,1) 以及 w_i \sim N(1,1) . 然后我估计了

y_i = \beta_0 + \gamma x_i + u_i

这样一个模型,估计结果是 \hat\gamma = 2.27 (0.09) ,括号里的是没有经过异方差修正的标准误。拟合曲线和数据散点画图如下:

很容易的看出来存在异方差,正式的 Breusch-Pagan 检验告诉我们 p-value < 2.2e-16。 在这种情况下,如果一个研究者对自己说线性模型异方差不重要,用一用 robust standard error 就好,那么他会得到 0.13 的 robust 标准误,同样是高度显著。然后他会得到错误的结论。

如果那个研究者根据我的建议,重新考虑了他的模型,然后估计正确的模型,会得到 \hat\beta_1 = 0.03(0.04) 以及 \hat\beta_2 =1.98(0.02) ,括号里同样是未经异方差修正的标准误,再对这个模型做 Breusch-Pagan 检验,p-value = 0.8387,无法拒绝同方差。

总结一下我的观点,异方差就像发烧,它有可能只是日常感冒的信号,用简单的感冒药对付对付就好,也有可能是癌症的信号。研究者需要重视异方差这一个信号。根据你的问题判断到底是遗漏变量了(个人觉得这个可能性更大),还是需要对方差建模了,还是完全没问题使用 robust standard error 就好了。

下面我再回应一下慧航对我之前的回应,主要是回应一下他的两个反例。先从第二个反例说起,第二个反例比较简单。

方便读者,我把第二个例子粘过来:

考虑一项关于结肠癌病人化疗与否(0-1变量)对病人平均预期寿命的研究,我们关心所谓的“平均处理效应”。现在有两种方案,假设可行:

  1. 对于结肠癌病人随机分组,计算两个组(T=0/1)的寿命平均值,相减,得到平均处理效应。
  2. 直接使用临床数据,计算寿命平均值,相减。

这个一看就知道,第一个方案肯定是有效可靠的,随机分组的实验,没什么可以挑毛病的(如果我只关心平均处理效应而非其他)。

但是这个问题有意思的地方在于,化疗对不同病人的作用是不一样的。对于不化疗的病人,预期寿命可能大约比如一年,少的半年,多的三年。而对于化疗的病人,身体好的,熬过了化疗,有可能直接治愈,预期寿命可能有10年;但是也有人身体素质不好,三个月就挂了。

现在再来考虑以上的两种方案:

  1. 随机实验,没有任何自选择,化疗的病人的寿命的方差大于不化疗的病人。
  2. 临床数据,自选择。病人可能根据自身的身体情况选择是否接受化疗。最极端的情况是,身体好的选择化疗,身体不好的选择不化疗,异方差会变小,甚至极端情况可能不存在。

那么现在再来考虑一下这个问题,异方差是模型错误设定的信号?似乎不对。正确设定的模型反而有异方差。


可能你要argue我了,你这个里面明明遗漏了“身体条件”这个变量,如果控制了身体条件,是不是就没有异方差了呢?

这里的问题是, “身体条件”这个变量无论是对研究人员,还是参与选择的病人,都是无法直接观测的。即便我可以使用体重、心肺机能等一系列指标做proxy,也很难说这些变量就是“身体条件”的完全度量,只要这面存在误差,就有异方差出现的可能。

所以,在这个例子里面,发现了异方差反而可能是因为模型设定正确了。以上的”异方差是模型错误设定的信号“也就不攻自破了。

这个例子特殊就特殊在它是一个随机实验,如果一个做的很干净的随机实验,那么无论你遗漏了多么重要的变量(比如”身体条件“),它们多么神通广大如何大闹天宫,遗漏的变量都不会影响 \mathrm{E}(u_i|x_i) = 0 这个条件的成立,只要这个条件成立,当然估计量总会收敛到真实值。 注意这里不是说你的模型设定正确了 (正确模型需要包括”身体条件“), 而是你的错误模型,在随机实验的保证下,对你所关注的变量没有影响 。在这个特殊例子里头,异方差这个信号确实只是小感冒的信号,确实是简单的使用一下 robust standard error 就可以解决问题,但是对于社会科学家常见的真实的观察数据,是几乎不可能遗漏变量还无论如何不会影响 \mathrm{E}(u_i|x_i) = 0 这个条件的成立。使用真实世界的数据,当你开始怀疑遗漏重要变量那一刻起,你就应该怀疑 \mathrm{E}(u_i|x_i) = 0 可能不成立了。

下面回应第一个例子。

第一个例子是一个加总的例子,同样粘过来,如下:

假设有一个模型:

y_{ig}=x_{ig}'\beta+u_{ig}

其中 i 代表个体, g 代表一个group。但是我们观测不到个体的数据,只能观测到加总(平均)的数据:

y_g=x_g'\beta+u_g

在这种情况下,如果假设 u_{ig} \sim (0,\sigma^2) i.i.d ,那么可以推出 var(u_g)=\sigma^2/N_g ,其中 N_g 为每个组的个体数目。我们发现,这个方程天然的是异方差的,但是并没有遗漏变量的问题。

这个方程天然的是异方差的 ”是不正确的。我们说异方差,是在说 \mathrm{Var}(u_g|x_g)x_g 存在一定的函数关系,而不是 \mathrm{Var}(u_g) 会随着分组的变化而变化。 \mathrm{Var}(u_g|x_g)=\sigma^2/N_g 是与 x_g 没有一点关系的。 因此这个方程不是我们通常意义上的异方差,它是同方差的。 我也做了模拟验证这件事。







请到「今天看啥」查看全文