1. 引言——福尔摩斯与怀表相信很多人都读过英国侦探小说家阿瑟·柯南·道尔的中篇小说《四签名》。 故事中的主角大侦探福尔摩斯的名声可谓如雷贯耳,甚至在日本漫画家青山刚昌创作的侦探漫画《名侦探柯南》中,主角柯南也将福尔摩斯视作偶像。 在《四签名》中,福尔摩斯曾经准确地通过一块怀表的特征推断出了其旧主人的性格特点和生活习惯:“他是一个放荡不羁的人……最后因为好酒而死……”。 下面是相关的证据:
上面的推理充分展现了福尔摩斯敏锐的观察力与严谨的分析能力。
智慧的真谛往往会得到跨领域的呼应。福尔摩斯这一推理方法也被广泛地运用于社会科学的学术研究中。 2. 实证中的黑匣子——残差在基于大样本的社会科学实证研究中,我们往往会构建某种模型来描述事情在一般情况下本应怎样(回归模型的 我们可以看到,在很多领域,常常采用回归得到的残差作为某些重要变量的衡量指标,而这些指标继而会作为随后分析中的被解释变量。这便是上述的福尔摩斯推理思想的一种运用。例如:
类似的例子和应用还有很多。这里我们以公司投资行为的研究为例,介绍此类模型的基本思想,并应用Stata范例来展现这一思想的实现过程。 3. 研究实例:过度投资与投资不足Richardson(2006,“Over-Investment of Free Cash Flow”) 对公司的投资行为进行了研究,文中构建了如下形式的投资模型:
这些解释变量决定了公司新增投资支出的正常水平,因此上述回归模型的拟合值便是对公司“预期投资支出”的衡量。 若用 4. Stata 应用4.1 残差和拟合值的估计若假设参数 α 和 β 在全样本中为常数 (以 Leverage 变量为例,这意味着 A 公司的负债率增加一个单位对投资的边际影响与 B 公司完全相同;或者,2009 年 Leverage 增加一个单位对投资的边际影响与 2008 年和 2010 年也米有差别,这显然是一个很严格的假设条件),则估计残差和拟合值是非常简单的事情:只需在完成回归后执行 为便于各位读者演练,这里使用 Stata 手册中的一份范例数据来说明。该数据源于 Grunfeld & Griliches (1960,“Is aggregation necessarily bad?”)。他们用公司前期市场价值和固定资产价值两个因素解释了公司的总投资支出。样本包括了 10 家公司 1935-1954 年 20 年间的数据。 虽然他们的模型与 Richardson (2006) 在设定上存在差异,但求取模型残差的思路是相通的。
部分结果呈现如下: -------------------------------------------------
| company year invest inv_fit E0 |
|-------------------------------------------------|
1. | 1 1935 317.6 313.6896 3.910378 |
6. | 1 1940 461.2 541.7413 -80.54128 |
11. | 1 1945 561.2 577.8403 -16.64025 |
16. | 1 1950 642.9 644.8065 -1.906509 |
|-------------------------------------------------|
21. | 2 1935 209.9 127.138 82.76198 |
26. | 2 1940 361.6 270.496 91.10404 |
31. | 2 1945 258.7 220.4178 38.28222 |
36. | 2 1950 418.8 233.6664 185.1336 |
|-------------------------------------------------|
41. | 3 1935 33.1 115.123 -82.02305 |
46. | 3 1940 74.4 246.7319 -172.3319 |
51. | 3 1945 93.6 263.0246 -169.4246 |
56. | 3 1950 93.5 292.7397 -199.2397 |
|-------------------------------------------------| 使用
输出图形为: 4.2 分组回归的残差然而,假设参数 α 和 β 为常数其实是一个非常严格的设定,也缺乏合理性。 我们以 Leverage 变量为例来说明。上述假设意味着 A 公司的负债率增加一个单位对投资的边际影响与 B 公司完全相同;或者,2009 年 Leverage 增加一个单位对投资的边际影响与 2008 年和 2010 年也没有差别;制造业公司的 Leverage 对投资的边际影响与零售业或金融业也完全相同。 因此,无论是在公司金融领域还是消费领域,学者们通常会放松上述假设,比如允许不同行业的 α 和 β 可以有所差异,甚至同一个行业不同年度上的 α 和 β 也可以变化。这就需要“分行业-分年度” 进行回归,并分别计算对应的残差。 以分年度计算残差为例,我们可以用循环语句来完成上述任务: *-分年度变参数模型
*webuse grunfeld, clear
egen t = group(year) //生成 1,2, T 年份标示变量,防止原始年份数据不连续
sum t
local T = r(max) // 最后一年
gen Et = . // 用于记录残差的变量
forvalues i=1/`T'{
qui reg invest mvalue kstock if t==`i' // 分年度回归
qui predict e_i if e(sample), res // 第 t 年的残差
qui replace Et = e_i if e(sample) // 将第 t 年的残差计入变量 E
drop e_i
}
*-与参数不变模型的对比
xtline E0 Et if comp<=6, yline(0, lc(pink*0.6) lp(dash)) 最后一行中,仍然使用 5. 便捷的 asreg 命令上例中,我们只在年度层面上进行了分组回归,但实际应用过程中,可能还有更复杂的需求,例如:
值得庆幸的是,借助 Stata 外部命令
其中,三种分组方式分别为:
前两种分组方式的含义可参见 Stata 命令 5.1 安装 asreg 命令可以在 Stata 的命令窗口输入如下语句:
5.2 asreg 命令的基本语法asreg depvar indepvars [if] [in] [,
window([rangevar] # )
recursive
minimum( # )
by(varlist)
statistics_options]
5.3 asreg 生成的新变量
注:如果不进行额外设定, 5.4 asreg 命令应用之 Stata 范例掌握了这一“武器”的用法后,我们通过两个例子来实战操作一下 范例 1:过度投资与投资不足承接上例,我们先用
我们将命令自动生成的残差变量另存一份为 . gen Et_as = _residuals
*-对比
. list comp year Et* if mod(year,5)==0, sep(4)
----------------------------------------
| company year Et Et_as |
|----------------------------------------|
1. | 1 1935 1.709904 1.709904 |
6. | 1 1940 3.309084 3.309084 |
11. | 1 1945 33.3144 33.3144 |
16. | 1 1950 17.55818 17.55818 |
|----------------------------------------|
21. | 2 1935 70.00819 70.00819 |
26. | 2 1940 127.0704 127.0704 |
31. | 2 1945 57.78962 57.78962 |
36. | 2 1950 143.2945 143.2945 |
|----------------------------------------|
41. | 3 1935 -87.04494 -87.04494 |
46. | 3 1940 -139.7101 -139.7101 |
51. | 3 1945 -129.7079 -129.7079 |
56. | 3 1950 -163.8177 -163.8177 |
|----------------------------------------| 前面已经提到,
结果如下: ----------------------------------------------------------------------------
| company year _Nobs _adjR2 _b_mva~e _b_kst~k _fitted _resid~s |
|----------------------------------------------------------------------------|
| 1 1935 10 0.827 0.102 -0.002 315.890 1.710 |
| 1 1940 10 0.793 0.095 0.202 457.891 3.309 |
| 1 1945 10 0.880 0.108 0.050 527.886 33.314 |
| 1 1950 10 0.817 0.176 -0.022 625.342 17.558 |
|----------------------------------------------------------------------------|
| 2 1935 10 0.827 0.102 -0.002 139.892 70.008 |
| 2 1940 10 0.793 0.095 0.202 234.530 127.070 |
| 2 1945 10 0.880 0.108 0.050 200.910 57.790 |
| 2 1950 10 0.817 0.176 -0.022 275.505 143.295 |
|----------------------------------------------------------------------------|
| 3 1935 10 0.827 0.102 -0.002 120.145 -87.045 |
| 3 1940 10 0.793 0.095 0.202 214.110 -139.710 |
| 3 1945 10 0.880 0.108 0.050 223.308 -129.708 |
| 3 1950 10 0.817 0.176 -0.022 257.318 -163.818 |
|----------------------------------------------------------------------------|
上例中的数据是平行面板,每家公司均有 20 年的观察值,对于一个只有三个未知参数的回归模型而言,每各细分组都有足够的样本数。但有些情况下,个别细分组中的样本数很少,此时可以用 我们首先随机删除一些观察值,虚构一份非平行面板,进而以公司为单位进行分组回归,并要求每家公司至少要有 10 年的数据。
可以看出,有 5 家公司的样本数都不足 10 年,它们在后续分组回归中将被忽略——通过设定 . asreg invest mvalue kstock, by(comp) min(10) fit
. format _res %4.2f
. list comp year Ni _res if mod(year,4)==0, sepby(comp)
--------------------------------
| company year Ni _resid~s |
|--------------------------------|
1. | 1 1944 8 . |
3. | 1 1936 8 . |
4. | 1 1940 8 . |
5. | 1 1948 8 . |
|--------------------------------|
11. | 2 1948 7 . |
15. | 2 1940 7 . |
|--------------------------------|
16. | 3 1944 8 . |
18. | 3 1936 8 . |
19. | 3 1952 8 . |
21. | 3 1948 8 . |
|--------------------------------|
26. | 4 1940 14 -4.08 |
28. | 4 1952 14 -0.36 |
30. | 4 1944 14 -9.04 |
33. | 4 1936 14 7.28 |
34. | 4 1948 14 5.11 |
|--------------------------------|
40. | 5 1944 11 -1.13 |
41. | 5 1936 11 5.37 |
|--------------------------------|
51. | 6 1940 10 -6.31 |
53. | 6 1948 10 7.21 |
57. | 6 1936 10 5.76 |
|--------------------------------|
66. | 7 1944 9 . |
67. | 7 1936 9 . |
|--------------------------------|
68. | 8 1940 9 . |
72. | 8 1944 9 . |
|--------------------------------|
77. | 9 1944 12 16.23 |
86. | 9 1948 12 -4.23 |
|--------------------------------|
90. | 10 1936 12 -0.23 |
97. | 10 1952 12 0.68 |
98. | 10 1944 12 -0.39 |
-------------------------------- 得到了各公司的回归残差之后,残差为正的公司可以视为存在过度投资,残差为负的公司可以视为存在投资不足。我们将各公司的残差状况分年度绘制出来。
上图中,残差位于虚线上方的为过度投资部分,下方的为投资不足部分。 可以发现,大部分公司的回归残差是很接近 0 的,说明这些公司的投资水平是符合预期的。 只有前 3 家公司的回归残差出现了明显偏离 0 的现象,表明这些公司存在过度投资或投资不足。为了揭示哪些因素导致了这些公司的投资偏差,接下来要做的就是把这些回归残差作为被解释变量,去探寻其他因素对其产生的影响。 范例 2 :超额工资在上面的例子中,我们是在一个层面上(即,公司层面)进行分组并计算残差的。下面看一个在两个层面上分组计算残差的例子。 我们考察工资决定因素模型,并在 sysuse 'nlsw88.dta', clear // 调入数据
asreg wage age hours tenure collgrad married south, fit by(race occupation) // 在种族、职业两个维度上进行分组回归,并分别求取拟合值与残差 得到超额工资的数据后,我们看一下超额工资在各分组层面上所表现出的特征。
工资水平内部差距较大的是专业技术人员(Professional/technical)、高管( Managers/admin),以及办公人员或对专业技不作要求的职业人员(Clerical/unskilled)。在这些职业中,工资的方差很大,说明其中一部分人获得了明显的超额工资。 (注:在某些职业组别中没有数据,是由于在对应组中观察值数小于解释变量数,因而无法进行回归估计造成的。) twoway (kdensity _residuals if race==1,color(red) legend(label(1 'white'))) /// //按种族绘制密度函数图
(kdensity _residuals if race==2,color(orange) legend(label(2 'black'))) ///
(kdensity _residuals if race==3,color(blue) legend(label(3 'other'))) ///
, legend(col(1))
此外,在获得了超额工资的人中,获得超高工资(残差为正)的金额明显大于获得超低工资(残差为负)的金额,这可能是受到了“最低工资法”的影响,使得工资水平存在一个法定下限。 最后,再来看一下加入工会和未加入工会人员的工资差异。
6. 结语正如本文引言部分所述,在大样本的实证研究中,对模型残差的考察已经被应用在越来越多的领域。 这其中蕴含的逻辑就是,通过对比正常情况与事实情况的差异而发现其中的异常情况。 这种方法无疑为判断某些因素对研究对象的影响提供了极大的帮助。但是,这种方法的运用也是需要一定前提的,那就是首先需要对正常情况具有充足的认识。 比如,在引言的例子中,福尔摩斯正确地认识到,一般清醒的人插钥匙,一插就能够进去这一事实,继而才能够准确判断怀表的主人是一个好酒之人。而如果福尔摩斯认为大多数人插钥匙均存在插不准的可能,则其不可能推断出怀表的主人与旁人有何不同。 甚至,如果福尔摩斯认为一般人插钥匙均不会用眼睛注视钥匙孔,因而钥匙孔附近应有更多划痕,那么他可能错误地推断该怀表的主人是一个习惯于注视钥匙孔的谨慎之人。 因此,在应用上述方法进行实证研究时,一定要对模型进行合理、完整的设定,使得模型能够充分地对研究对象作出解释,从而如实地反映正常情况。这需要我们对前期的研究成果具有充分的掌握,并在借鉴前期研究的基础上,加入自己的深思熟虑,这样才能使得模型残差确实反映了异常情况,进而保证我们从中得出准确的推断。 正如福尔摩斯所言:“在你得到所有证据之前就进行推理是个致命的错误,这会使结果带有偏见。”引述于此,与君共勉! 阅读资料盈余管理
事件研究
投资行为
消费行为
|
|