Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
作者:曾振声 (中山大学)
邮箱:zengzhsh6@mail2.sysu.edu.cn
目录
为了方便大家理解,笔者先举一个生活中的例子。
考虑一条正常的步行街,在天晴的时候,街道上和屋檐下的人群密集程度大致相近。天空中突然下起大雨,没带伞的人迅速躲到了屋檐下,而带了伞的人则撑开伞继续行走。此时,屋檐下的人数密度会突然增加,出现了所谓的聚集。
取个学术点的名字,就叫做「聚束」。
聚束效应 (bunching) 是指在面临政策扰动时,个体出于自身效用最大化主动选择集中于一点,形成了类似离散分布才存在的质量点。从概率密度函数看,原连续的分布出现截断,质量点对应的概率大于 0。
与断点回归 (RDD) 和拐点回归 (RK) 类似,聚束效应也出现了断点或拐点。但聚束效应与这两者之间存在一个关键的不同之处——在 RDD 或 RK 模型中,个体无法干预政策,其分布高于或低于阈值是外生的;而 bunching 恰好相反,个体面对突如其来的政策变化可以自由选择扎堆。
在聚束效应中,政策是内生的,我们研究的正是个体面对政策所表现出来的个人选择。因此在分析特定阈上观察到的离散跳跃时,要依据分配变量的可操作来选择方法。
在介绍聚束理论模型之前,我们不妨来看看关于聚束的讨论是如何起源的。聚束效应本质上是经济学家开发出来的方法,所以研究的问题一定是建立在现实背景下的。有关于聚束效应的讨论,实际上是来源于税收方面相关的研究。
许多国家的个人所得税实行阶梯税率,即累进税制。当个人收入突破一定阈值时,超出阈值的部分会征收更高的所得税,阈值前后对应了边际税率的改变。与此同时,存在另一种征税制度,在阈值前后,其平均税率发生改变。
经济学家关心的是所得税对于劳动力供给存在什么影响,并尝试求出劳动力供给 (或收入) 对税率变动的弹性。直观来看,在征收阶梯税的情况下,对于恰好高出临界点某个较小区间的人来说,由于边际税率的提高造成边际收益的下降,他们最优的选择不是提供原有量级的劳动,反而是减少劳动投入以获得更多的闲暇时间,将税前收入封顶在临界点。
尽管他们的税后可支配收入降低,会造成了消费效用的降低,但是闲暇时间的增多却带来了更大的效用提升,最终个人效用在零界点实现了最大化。与此同时,更高收入的人群也会相应的减少劳动投入,以获得新税率下的最高效用。
税率的突然改变,使原本分布在一个较小区间内的人群主动选择聚集在一个点上,于是就出现了聚束效应。对于政府而言,如何设计税率的变动量以防止过度伤害劳动者的积极性便值得深思。因此,收入对税率变动的弹性估计便成为了一个具有现实意义的研究问题。
随着行政数据可获得性的提高,聚束效应分析方法的应用日渐普遍。该方法在逐渐开始在社会保障、社会保险、福利项目、教育、管制、私人部门定价及参照依赖偏好等方面得以应用。
传统非线性预算集方法也对聚束效应中的弹性进行了研究,但其出发点与本篇介绍的聚束理论有很大不同。传统非线性预算集的计量经济学研究最早是 Burtless 和 Hausman (1978),以及 Hausman (1981) 开发的,他们考察了劳动力供给在负所得税和联邦所得税条件下的反应。
通过观察,他们发现了具有两种类型拐点的片状线形预算集。边际税率离散增加会造成凸型拐点,而离散下降会造成非凸型拐点。前者在收入分布中可以观察到聚束,后者则直接产生一个洞。
这种参数估计方法优点在于理论与经验间有明确的关系,但缺点是尽管其理论假设了模型存在聚束,调查数据却没有显示出任何聚束现象。按照 Saez (1999,2010) 证实的拐点聚束的大小与劳动力供给的补偿弹性成正比,传统非线性预算集方法会导出零补偿弹性。
允许模型中存在两个误差则可以解决这个问题。第一个误差代表未能观测到的偏好异质性,第二个误差为优化误差,也可称为测量误差。偏好误差会影响个体最终选择的位置是否在拐点处,优化误差反映了个体无法精确调整工作时间,从而聚束受到现实约束。
为了估计补偿弹性和人们的行为反应,非线性预算集方法需要对这两个误差的分布进行假设,并采用参数估计方法对聚束和拐点进行识别。因此,数据中是否存在聚束或拐点就更多成为了数据拟合的技术性问题。而聚束点本身提供的反应性信息却没被用上。
本篇介绍的聚束理论与其不同,采用非参数估计的方法,仅仅从拐点局部发生的情况出发获得补偿弹性的估计。这种聚束理论可以捕捉政策的准实验变化,充分利用事实。
以税收为例子,税率的改变大致分为两种情况:边际税率的改变及平均税率的改变。在不考虑摩擦的情况下,两种税率变动机制会造成两种不同的聚束效应。边际税率的变动会造成收入分布出现拐点,而平均税率的变动造成收入分布出现断点。
边际税率不连续造成拐点的分析是由 Saez (2010) 开创的。考虑个人对税后收入 (消费价值) 和税前收入 (努力成本) 的偏好,定义如下效用函数:
其中,
为了简化讨论,考虑线性税制
考虑一般情况,即边际税率增长,则可做出如下预算集图。
当边际税率在节点
所有最初位于区间 (
由上图所示,劳动者的收入分布从原先的连续下降,变为
进一步地,补偿收入弹性可以从边缘聚束个体中求出。边缘个体收入变化量
在
一般而言,我们仅考虑边际税率变动较小的情况,故本文不对未补偿弹性做过多赘述,仅提供未补偿弹性计算公式供读者参考。未补偿弹性
通过 (4) 式将总聚束质量
由于
上述分析建立在所有劳动者拥有同质效用函数
定义
在任一弹性水平下,边际聚束个体减少的收入量为
上式将局部平均收益弹性与聚束质量联系了起来。当拐点税率变动很小时,式 (5) 有效。但是,当拐点处税率变动很大时,弹性还受收入效应的影响。因此有必要以参数形式对劳动者的效用函数进行假设,以获得补偿收入弹性的准确估计。设准线性等弹性效用函数形式如下:
上式的假定可将收入效应剔除在外,在该假设下劳动者此时的收入:
为了求解一般化的补偿弹性,我们考虑边际聚束个体在聚束前后均满足预算集与效用函数相切的条件。通过对 (6) 式进行假设得出 (7) 式,用 (7) 式表示两个相切条件:
联立可解出下式:
等价于:
式 (9) 给出的弹性估计,是式 (3) 弹性的一般化形式。当
参数化估计的得出的弹性在税率变动量很小的时候,结果与非参数估计得出的补偿弹性一致。这也意味着当税率变动很小的时候,可简单采用非参数估计,而当税率变动大的时候,需要引入参数假定。
前面讨论的聚束效应,是在边际税率上升的假设下开展的,约束集产生凸拐点。而当边际税率离散下降时,会产生非凸拐点。
非凸拐点的聚束表现与凸拐点大为不同,劳动者收入分布在聚束点
而收入低于边际聚束个体的劳动者则无动于衷,他们并不会受到边际税率下降的激励。这类劳动者提高其劳动投入使自身税前收入位于 (
因此,在该区间内,收入分布出现空洞。
同样是税率变动,平均税率的变化引起的聚束与边际税率变动引起的聚束完全不同。Kleven 和 Waseem (2013) 研究了税务责任不连续的问题,提出了断点聚束效应。关于劳动者收入分布及能力分布均等假设均与拐点聚束效应时一致。断点聚束分析同样可以先从同质性收入弹性开始,推广到异质性弹性。
考虑平均税率在阈值后上升的情况 (比例税率的不连续性),税收函数表示如下:
如下图所示,收入位于
此时,没有任何个体愿意选择其劳动收入位于区间
在这种情况下,断点聚束产生了一个完全被占优的区间
在该区间内,劳动者通过向断点
在效用函数同质的情况下,与拐点相同,断点聚束同样利用边际聚束个体的反应估计补偿收入弹性。利用边际聚束个体在断点
基于式 (6) 假定,可写出断点
基于偏好假定的一阶导数条件,得出
利用效用相等进行求解,得下式:
式 (13) 给出了收入变动百分比、税率变动百分比以及收入补偿弹性的关系,此时弹性为前两者的隐函数。
在无优化摩擦的情况下,当补偿弹性趋近 0 时,式 (13) 表明聚束区间存在下界,该下界大小恰好为完全被占优区间的大小:
与拐点聚束中同质偏好类似,将
异质性偏好下,收入分布仅仅在严格被占优的区间出现空洞,这是因为拥有异质偏好的劳动者有部分可能会在区间
利用式 (5) 可将聚束量
平均税率下降的情况与平均税率上升的情况最大不同之处在于:它不会创造一个完全被占优区间。
这是因为在平均税率下降时,目标个体向上进行聚束,在获得更多消费剩余的同时一定伴随闲暇时间的减少。当弹性趋近于 0 时,聚束区间大小
在这种情况下,同样可以利用断点及边际聚束个体原切点等效用,求解补偿弹性。这种方法依赖效用函数的参数假设,下式给出收入变动、税率变动及补偿弹性的隐函数,详细分析不再赘述。
由于弹性实际上可以同式 (3) 中一样进行非参数识别,Kleven 和 Waseem (2013) 开发出了一套简化的方法。这种方法通过引入隐性边际税率——一种类似在聚束区间的平均税率:
从而给出了简化的弹性表达,如下式所示:
现实中,聚束效应的发生并没有前面讨论的那么理想。
个体可能会面临较高的调整成本、注意力成本 (Chetty 等 2011;Chetty,2012;Kleven 和 Waseem,2013)。个体还可能无法精确地瞄准零界点。这都会导致聚束现象表现为弥漫性多余质量而非点质量。
在这种情况下,原先聚束量表达式
断点聚束相比于拐点聚束而言,更不容易收到摩擦的影响,原因是平均税率的改变相比边际税率改变力度更大,劳动者拥有更强的动力去克服摩擦。
本文主要对拐点聚束展开下述讨论。聚束效应中,各种方法均是采用质量点去估计弹性参数。Bertanha 等 (2021) 开发了半参数估计和非参数估计的方法,这种相比之前讨论的估计方法依赖更少的假设,因此本文主要介绍该方法及其估计。
考虑聚束发生过程,代理人会将其等弹性的准线性效用函数最大化,这导致了其最优收入的数据生成过程 (DGP) 如下:
其中,
上述的数据生成过程表明聚束的质量取决于区间
下式给出代估计变量间的关系:
式 (19) 包括了 5 个变量: 分别为 (a)
式 (18) 将变量 (b)-(e) 映射到了可观测的
传统的弹性估计方法需要对能力的累积分布进行相关假设,特别地,需要为
Bertanha 等 (2021) 则采用了两种不同的策略。第一个策略是通过对非参数的异质性分布系列
本文着重介绍 Bertanha 等 (2021) 提出的估计方法。其第一种策略由命令 bunchbounds
实现,该策略通过假设异质性概率密度函数 (PDF) 的斜率大小的约束,即 Lipschitz 连续性,来部分识别弹性。
第二种策略由 bunchtobit
实现,这是一种半参数方法,利用协变量来进行点识别。它依赖于 bunching 可以被重写为一个中间删减的回归模型。
由于现实存在摩擦误差,因此在实施上述两种策略前,通常先使用 bunchfilter
对
命令 bunching
则以集成的方式,实现上述三个命令同样的效果。
* 命令安装
ssc install bunching
cnssc install lpdensity // 使用 bunchbounds 命令前必须安装 lpdensity
需要注意的是,所有命令只需安装 bunching
即可。
* 命令语法
bunchbounds depvar [if] [in] [weight], kink() s0() s1() m()
[nopic savingbounds(filename[,replace])]
其中,
varname
: 响应变量,如收入的对数;kink
:结点的位置,必须是一个与响应变量单位相同的实数,在该节点税率等发生改变;s0
:是一个实数,在很多应用中,它是扭结点之前斜率的对数;s1
:必须是一个严格小于 s0 的实数,在许多应用中,它是扭结点之后斜率的对数;m
:是未观察到的异质性的概率密度函数 (PDF) 的最大斜率幅度,是一个严格的正标量。options
选项:
nopic
:抑制显示图形,默认是显示图形;savingbounds(filename[,replace])
:将部分识别集的坐标作为异质性 PDF 的斜率大小的函数保存在文件名 .dta 中。采用串联、Tobit 回归和协变量来确定响应变量对预算斜率变化的弹性。 在 Stata 中,根据 Bertanha 等 (2021)的程序设定。该命令用数据的不同子样本运行一系列中间删失的 tobit 回归,且该过程从全样本开始,按照扭结点为中心的对称窗口进行收缩。
弹性估计值被看成是使用数据百分比的函数,最终该命令会给出每个截断窗口中最合适的 tobit 分布。
* 命令语法
bunchtobit depvar [indepvars] [if] [in] [weight], kink() s0() s1()
[binwidth(#) grid(numlist) nopic numiter(#)
savingtobit(filename[,replace]) verbose ]
其中,
depvar
:响应变量;kink
:结点的位置,必须是一个与响应变量单位相同的实数,在该节点税率等发生改变;s0
:是一个实数,在很多应用中,它是扭结点之前斜率的对数;s1
:必须是一个严格小于 s0 的实数,在许多应用中,它是扭结点之后斜率的对数。options
选项:
grid(numlist)
:是一个从 1 到 99 的整数列表。列表中的值对应于样本的百分比,这些百分比定义了关键点周围的对称截断窗口。截断的 Tobit 模型在这些样本和全样本上进行估计,因此估计的数量总是比列表中的条目数量多一个。例如,如果 grid(15 82)
,那么 bunchtobit
就会对 Tobit 模型进行三次估计,分别使用 kink 点周围 100%、82% 和 15% 的数据。numlist 的默认值是 10(10)90,它提供 10 个估计值;verbose
:显示 Tobit 估计的详细输出,包括最大化似然的迭代,默认不显示;numiter(#)
:最大化 Tobit 可能性时允许的最大迭代次数,它必须是一个正整数,默认为 500;binwidth(#)
:直方图的分档宽度;nopic
:抑制显示图形,默认是显示图形;savingtobit(filename[,replace])
:保存带有每个截断窗口的 Tobit 估计值的 filename.dta。filename.dta 文件包含八个变量,对应于代码存储在 r()
中的矩阵。带有摩擦误差的数据的分布是连续的,没有质量点。这种类型的数据在经济学的扎堆应用中很常见。例如,应税收入的分布通常在边际税率变化的拐点处有一个驼峰,而不是在拐点处有一个质量点。
该命令可在该类混合离散数据中,去除连续分布的摩擦误差。
* 命令语法
bunchfilter depvar [if] [in] [weight], kink(#) deltam(#) deltap(#) generate(varname)
[binwidth(#) nopic pctobs(#) polorder(#)]
其中,
depvar
:响应变量;kink
:结点的位置,必须是一个与响应变量单位相同的实数,在该节点税率等发生改变;deltam
:是结点与要过滤的摩擦误差的下限之间的距离,它必须是一个实数,且与响应变量的单位相同;deltap
:是结点与要过滤的摩擦误差的上限之间的距离,它必须是一个实数,且与响应变量的单位相同;generate(varname)
:生成过滤后的变量,用户指定的名称为 varname。options
选项:
binwidth(#)
:直方图的分档宽度;nopic
:抑制显示图形,默认是显示图形;pctobs(# real)
:为了达到更好的拟合效果,多项式回归使用的是结点周围的对称窗口中百分之 pctobs 的样本观测值。默认值为 40 (取整数,最小=1,最大=99);polorder(# integer)
:多项式回归的最大阶数,默认值为 7 (最小=2,最大=7)。bunching
是 bunchbounds
、bunchtobit
、bunchfilter
命令的组合。
* 命令语法
bunching depvar [indepvars] [if] [in] [weight], kink(#) s0(#) s1(#) m(#)
[nopic savingbounds(filename[,replace]) binwidth(#) grid(numlist) numiter(#)
savingtobit(filename[,replace]) verbose
deltam(#) deltap(#) generate(newvar) pctobs(#) polorder(#)]
该命令的详细介绍可从上述三个命令的介绍中获得,故不赘述。
采用 (18) 式的数据生成过程,让扭结点
. webuse set "http://fmwww.bc.edu/repec/bocode/b/"
. webuse bunching.dta, clear
. histogram y
做出模拟数据的直方图如下,观察到数据存在聚束效应。
运用 bunchbounds
命令估计弹性边界,选择
. bunchbounds y [fweight=w], k(2.0794) s0(0.2624) s1(-0.1054) m(2)
Your choice of M:
2.0000
Sample values of slope magnitude M
minimum value M in the data (continuous part of the PDF):
0.0000
maximum value M in the data (continuous part of the PDF):
0.3879
maximum choice of M for finite upper bound:
1.5932
minimum choice of M for existence of bounds:
0.0090
Elasticity Estimates
Point id., trapezoidal approx.:
0.4893
Partial id., M = 2.0000 :
[0.3912 , +Inf]
Partial id., M = 1.59 :
[0.4055 , 0.9354]
如图所示,在选择最大斜率为 2 的情况下,弹性的边界为 0.3914 至正无穷。同时,有图中的实竖线给出了弹性存在有限上界时的最大斜率为 1.5923,此时弹性估计的范围为 [0.4055, 0.9353]。注意到,在任何情况下,真实弹性 0.5 都在估计的弹性边界内。
该图还显示了随着最大斜率的增加,上界如何增加及以下界如何减少。使用梯形近似法确定的弹性点发生在边界聚集的水平红线处。
运用 bunchtobit
实现弹性的半参数点估计,该估计不要去异质性 PDF 服从正态分布 (Bertanha 等,2021)。可以通过比较正确指定的模型的估计值和错误指定的模型的估计值来进行稳健性检验。
该命令默认对十个不同的子样本进行了弹性估计。每个子样本都是对称截断的,且以临界点为中心,并包括临界点的观测值。
. bunchtobit y x1 x2 x3 , k(2.0794) s0(0.2624) s1(-0.1054) binwidth(0.08)
bunchtobit_out[10,5]
data % elasticity std err # coll cov flag
1 100 .50526488 .00688012 0 0
2 90 .50574235 .00710933 0 0
3 80 .50635666 .0071992 0 0
4 70 .50547742 .00724238 0 0
5 60 .50612254 .00732554 0 0
6 50 .50550213 .00750714 0 0
7 40 .50566617 .0079238 0 0
8 30 .50529854 .00857916 0 0
9 20 .50243629 .01001292 0 0
10 10 .48578085 .01864996 0 0
由于模型被正确地指定,对于任何被截断的子样本来说,报告的弹性估计值都非常接近真实值 0.5。
bunchtobit
还为每个子样本生成一个最佳拟合图,以及所有子样本的弹性估计图。下图列示了 100% 截断子样本的最佳拟合图,图中黑色拟合线为截断的 Tobit 模型隐含结果变量的估计值。
同时,画出弹性对应的每个截断子样本的估计值 (黑线) 和 95% 置信区间 (灰色阴影) 如下图。
最后一个子样本的协变量系数可以通过使用 estimates replay
命令获得。
. estimate replay
------------------------------------------------------------------------------
active results
------------------------------------------------------------------------------
Log pseudolikelihood = .14898244 Number of obs = 10,000
( 1) [eq_l]x1 - [eq_r]x1 = 0
( 2) [eq_l]x2 - [eq_r]x2 = 0
( 3) [eq_l]x3 - [eq_r]x3 = 0
------------------------------------------------------------------------------
| Robust
| Coefficient std. err. z P>|z| [95% conf. interval]
-------------+----------------------------------------------------------------
eq_l |
x1 | -0.267 0.157 -1.70 0.089 -0.576 0.041
x2 | 3.471 1.579 2.20 0.028 0.377 6.565
x3 | 0.380 0.183 2.08 0.038 0.022 0.738
_cons | 5.400 1.916 2.82 0.005 1.645 9.155
-------------+----------------------------------------------------------------
eq_r |
x1 | -0.267 0.157 -1.70 0.089 -0.576 0.041
x2 | 3.471 1.579 2.20 0.028 0.377 6.565
x3 | 0.380 0.183 2.08 0.038 0.022 0.738
_cons | 4.951 1.774 2.79 0.005 1.474 8.428
-------------+----------------------------------------------------------------
lngamma |
_cons | 0.921 0.350 2.63 0.009 0.234 1.607
-------------+----------------------------------------------------------------
sigma | 0.398 0.880 0.200 0.791
cons_l | 2.150 4.060 -5.807 10.107
cons_r | 1.971 3.765 -5.409 9.351
eps | 0.486 0.019 0.449 0.522
------------------------------------------------------------------------------
当摩擦误差存在时,必须首先将其过滤掉,然后才能应用聚类估计方法。采用 bunchfilter
操作及结果如下:
. bunchfilter yfric [fw=w], kink(2.0794) generate(yfiltered) deltam(0.12) deltap(0.12)
[ 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% ]
对比下图过滤摩擦前后的 CDF 和 PDF 图,未过滤摩擦前,CDF 几乎连续,没有出现聚束。而 PDF 函数聚束也不明显。
实际上,如果没有摩擦误差,按照数据生成过程,有 5.16% 的响应集中在扭结处。但存在摩擦误差会将这一比例降低到零。在用 ·bunchfilter· 去除摩擦后,过滤后的数据有 5.15% 的响应在扭结处。
上述三条命令可以使用 bunching
一次性实现,代码如下,不展开赘述分析。
. bunching yfric x1 x2 x3, k(2.0794) s0(0.2624) s1(-0.1054) m(2) gen(yfilter) ///
> deltam(0.1054) deltap(0.0953) pctobs(30) polorder(7)
Note:产生如下推文列表的 Stata 命令为:
lianxh 断点, m
安装最新版lianxh
命令:
ssc install lianxh, replace
免费公开课
最新课程-直播课
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
⛳ 课程主页
⛳ 课程主页
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会-常见问题解答:
✨ https://gitee.com/lianxh/Course/wikis
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh