Stata:因子变量全攻略-双向固定效应-超越对数生产函数

在这里插入图片描述

作者:连玉君 | 杨柳 ( 知乎 | 简书 | 码云 )

注:该文已发表: 连玉君, 杨柳.《郑州航空工业管理学院学报》, 2018, 36(2): 90-103. 【 -点击下载-】

点击查看完整推文列表

Stata连享会   计量专题 || 精品课程 || 简书推文 || 公众号合集

连享会内生性专题……

事倍功半 vs. 事半功倍
当需要控制公司个体效应、面对成千上万家公司的数据资料时,你会如何处理?或许你会首先想到对每家公司生成虚拟变量,但是这种做法的工作量实在是太大了!那么,有没有事半功倍的方法呢?下面,小编就带你学习Stata软件中因子变量的使用方法。

1. 问题背景

实证分析中,我们经常需要在模型中加入反映类别的虚拟变量,以便控制不可观测的组间差异。而在另一些分析中,为了刻画调节效应,尚需在模型中加入变量的交乘项平方项。传统的做法是,预先生成虚拟变量或交乘项,进而将它们加入模型。然而,当虚拟变量或交乘项的数目较多时,上述方法就显得尤为不便,不但浪费计算机内存,也会严重降低我们的工作效率。

在Stata中,我们可以使用因子变量(Factor Variable)简化操作步骤、快捷地在回归模型中加入虚拟变量交乘项平方项高次项。更为重要的是,由于引入交乘项或平方项后,解释变量对被解释变量的边际影响不再是常数,而是某个变量(调节变量)的函数,在有些模型设定下,这种关系可能是非线性的。此时,若使用因子变量,并配合Stata中的marginsmarginsplot命令,可以非常便捷、直观地分析关键变量的边际效应

2. 什么是因子变量

因子变量(Factor Variable)是对现有变量的延伸,是从类别变量中生成虚拟变量、设定类别变量之间的交乘项、类别变量与连续型变量之间的交乘项或连续变量之间的交乘项(或多项式)。在Stata中的大多数回归命令和回归后的估计命令中都可以使用这些因子变量[1]

因子变量的五种运算符及其含义如下表1所示:

表1 因子变量的运算符及含义在这里插入图片描述

以研究妇女工资的决定因素为例,使用Stata软件自带的数据文件 nlsw88.dta。该数据包含了1988年采集的2246个美国妇女的资料,包括:小时工资wage、每周工作时数hours、种族race、职业occupation、年龄age、是否大学毕业collgrad、当前职业的工作年限tenure、是否结婚married、是否居住在南部地区south、合计工作年限ttl_exp等变量。其中,小时工资wage、每周工作时数hours、年龄age、当前职业的工作年限tenure、合计工作年限ttl_exp为连续型变量;种族race为类别变量(1代表白种人white,2代表黑种人black,3代表其他人种other)、职业occupation为类别变量(13个职业类别);是否大学毕业collgrad、是否结婚married、是否居住在南部地区south为虚拟变量。

在这份数据中有一个表示种族的类别变量race,取值为1、2、3,分别对应白人黑人其他人种。假设我们想在模型中加入一个反映种族的虚拟变量black,当某个妇女是黑人时,black取值为1,否则为0。则传统的做法如下[3]

. sysuse "nlsw88", clear
. gen black=1
. replace black=0 if race!=2
. reg wage black

若延续这一思路,但使用因子变量来生成black变量,则命令为:

. gen black = 2.race

只需要一条命令,而且含义非常明确。这里2.race本质上是一个条件判断语句:判断某一行观察值中的race变量取值是否为2,若是,则返回1到变量black中,否则返回0

然而,在多数情况下,我们的目的只是希望得到虚拟变量black的估计系数,而不希望生成或存储这个变量[4]。Stata中的因子变量语法完全注意到了这个问题。使用因子变量的标准做法如下:

. sysuse "nlsw88.dta", clear
. reg wage 2.race

注意,我们无需预先生成black变量,而是直接在回归模型中加入了2.race因子变量。有些读者注意到,race变量有三个取值,因此,我们可以在模型中放入两个虚拟变量,此时可以书写如下命令:

. reg wage i.race

回归结果如下所示:

(部分回归结果省略)
------------------------------------------------------------------------------
        wage |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
        race |
      black  |     -1.238      0.276    -4.48   0.000       -1.781      -0.696
      other  |      0.468      1.133     0.41   0.680       -1.754       2.690
             |
       _cons |      8.083      0.142    57.06   0.000        7.805       8.361
------------------------------------------------------------------------------

从上述结果中可以看到,回归模型中加入了black虚拟变量和other虚拟变量,分别对应race变量的第二个和第三个类别,而第一个类别white被Stata默认作为基准组,目的在于防止完全共线性。black变量的系数值为-1.238,表示黑人的平均工资比白人低1.238个单位,并在统计上显著;other变量的系数值为0.468,表示其他人种的平均工资比白人高0.468个单位,但是在统计上不显著。

在实证分析中,有时会根据研究内容的需要改变基准组的设定,此时可使用ib.b.的前缀,具体写法如下表2中所描述:

表2 基准组的运算符及含义
在这里插入图片描述

在实证分析中,变量的交乘项高次项往往是重要的解释变量。以研究妇女工资的决定因素为例,若我们想在模型中加入黑人每周工作时数的变量,则传统做法是预先生成一个虚拟变量 black 代表是否黑人,再生成一个新变量 black_x_hours 表示黑人与每周工作时数的交乘项,然后再将这个新变量放入回归模型中。Stata命令为:

. gen black=1
. replace black=0 if race!=2
. gen black_x_hours = black * hours
. reg wage black_x_hours

若在Stata中使用因子变量实现上述过程,则命令十分简洁:

. reg wage 2.race#c.hours

下面,我们介绍如何在Stata中使用因子变量表示变量的交乘项高次项。我们以研究妇女工资的决定因素为例进行说明。

(1) 两个类别变量的交乘项:
在回归模型中加入种族race和职业类别occupation交乘项,Stata命令为:

. reg wage i.race#i.occupation

若在回归模型中既要放入种族race和职业类别occupation虚拟变量,又需要同时放入这两个变量的交乘项,则在回归命令中使用i.race##i.occupation,相应的命令为:

. reg wage i.race##i.occupation

(2) 类别变量与连续变量的交乘项:
在回归模型中加入种族race和每周工作时数hours的交乘项,Stata命令为:

. reg wage i.race#c.hours

需要注意的是,在上例中,由于我们把hours变量视为连续变量,因此,需要在其前面加上c.符号以便告知Stata该变量是连续变量

(3) 连续变量与连续变量的交乘项(高次项):
在回归模型中加入年龄age变量,以及其平方项,Stata命令如下:

. reg wage c.age##c.age

上述命令中c.age表示年龄age变量被当成连续型变量。如果我们在Stata命令中使用i.age,则年龄age变量被当成类别变量处理,此时,类别的个数为年龄age变量中不同取值的个数。

连享会计量方法专题……

3. 常用回归模型的因子变量表述

3.1 范例1:邹氏检验 (Chow test)

由于不同组别之间可能会存在差异(截距项或斜率项存在差异),因此,我们需要检验这些差异在统计上是否显著。这时,我们可以使用邹氏检验。以研究妇女工资的影响因素为例,我们可以使用chowtest命令检验工会成员与非工会成员两个样本组中工资影响因素是否存在差异(或称之为存在结构变化),Stata命令如下:

. global xx "hours age tenure ttl_exp married"
. chowtest wage $xx, group(union) detail

事实上,我们也可以使用因子变量的语法,在回归模型中加入分组变量其他控制变量交乘项,然后再联合检验分组变量的系数以及所有交乘项的系数是否都等于0。此时,即使我们不使用chowtest命令,也可以轻松实现邹氏检验,Stata命令如下:

. global xx "hours age tenure ttl_exp married"
. reg wage $xx i.union i.union#c.($xx)
. testparm i.union i.union#c.($xx)

3.2 范例2:双向固定效应模型

在实证分析过程中,经常需要在模型中加入反映年度、公司或行业特征虚拟变量。当虚拟变量的数目众多时,采用手动输入变量的方式会非常耗时。例如,下述模型(1)是文献中广泛应用的双向固定效应模型
y i t = α i + λ t + x i t ′ β + ε i t (1) { {y}_{it}}={ {\alpha }_{i}}+{ {\lambda }_{t}}+{ {x}_{it}}^{'}\beta +{ {\varepsilon }_{it}} \tag{1} yit=αi+λt+xitβ+εit(1)
上式等价于
y i t = ∑ i = 1 N D i ⋅   α i + ∑ t = 2 T W t ⋅   λ t + x i t ′ β + ε i t (2) { {y}_{it}}=\sum\limits_{i=1}^{N}{ { {D}_{i}}\cdot }\ { {\alpha }_{i}}+\sum\limits_{t=2}^{T}{ { {W}_{t}}\cdot }\ { {\lambda }_{t}}+{ {x}_{it}}^{'}\beta +{ {\varepsilon }_{it}} \tag{2} yit=i=1NDi αi+t=2TWt λt+xitβ+

  • 8
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值