作者:连玉君 | 杨柳 ( 知乎 | 简书 | 码云 )
注:该文已发表在《郑州航空工业管理学院学报》, 2018, Vol. 36, No.2, pp.90-103. DOI: 10.19327/j.cnki.zuaxb.1007-9734.2018.02.008
……Stata 现场培训报名中……
事倍功半 vs. 事半功倍
当需要控制公司个体效应、面对成千上万家公司的数据资料时,你会如何处理?或许你会首先想到对每家公司生成虚拟变量,但是这种做法的工作量实在是太大了!那么,有没有事半功倍的方法呢?下面,小编就带你学习Stata软件中因子变量
的使用方法。
1. 问题背景
实证分析中,我们经常需要在模型中加入反映类别的虚拟变量,以便控制不可观测的组间差异。而在另一些分析中,为了刻画调节效应,尚需在模型中加入变量的交乘项或平方项。传统的做法是,预先生成虚拟变量或交乘项,进而将它们加入模型。然而,当虚拟变量或交乘项的数目较多时,上述方法就显得尤为不便,不但浪费计算机内存,也会严重降低我们的工作效率。
在Stata中,我们可以使用因子变量(Factor Variable)
简化操作步骤、快捷地在回归模型中加入虚拟变量、交乘项、平方项或高次项。更为重要的是,由于引入交乘项或平方项后,解释变量对被解释变量的边际影响不再是常数,而是某个变量(调节变量)的函数,在有些模型设定下,这种关系可能是非线性的。此时,若使用因子变量
,并配合Stata中的margins
和marginsplot
命令,可以非常便捷、直观地分析关键变量的边际效应。
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. 常用回归模型的因子变量表述
范例1:邹氏检验
由于不同组别之间可能会存在差异(截距项或斜率项存在差异),因此,我们需要检验这些差异在统计上是否显著。这时,我们可以使用邹氏检验。以研究妇女工资的影响因素为例,我们可以使用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)
范例2:双向固定效应模型
在实证分析过程中,经常需要在模型中加入反映年度、公司或行业特征的虚拟变量。当虚拟变量的数目众多时,采用手动输入变量的方式会非常耗时。例如,下述模型(1)是文献中广泛应用的双向固定效应模型:
上式等价于
其中, Di D i 是对应于每家公司的虚拟变量,对于公司