Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
作者:吕卓阳 (厦门大学)
邮箱:lvzy20@163.com
目录
在针对上市公司的研究中,大家经常在如下两种估计命令之间摇摆不定:第一种是我们控制了时间固定效应、以及公司或行业固定效应,进行面板回归:
. xtreg y x1 x2 i.year, fe
. reg y x1 x2 i.year i.industry
第二种是在第一种的基础上,考虑标准误的聚类:
. xtreg y x1 x2 i.year, fe vce(cluster firmID)
. reg y x1 x2 i.year i.industry, vce(cluster industry)
回归的方程如下:
两种回归的方式不同在于第二种回归考虑了标准误的聚类问题,即假设标准误在公司或行业的层面聚类。这种假设相比于假定标准误差满足
我们平时常常是基于经济学的意义预先设定聚类的数量和分块大小,鲜少从统计意义上去估计最优聚类方法,本文将为大家介绍一种新的「聚类分析」方法及其 Stata 实现命令 xtregcluster
。其优点在于不需要先验地假设聚类的数量和分块的大小,而是根据数据建立惩罚函数来降低总残差平方和,本着「让数据说话」的理念寻找最优聚类数量和分块大小。
对于标准的面板数据分析,一般施加所有个体具有相同斜率系数的限制,个体不可观测的异质性取决于个体不随时间改变的效应,但从理论与实证上都很难证明该限制 (Burnside,1996;Baltagi 和 Griffin,1997;Pesaran 等,1999)。
由此,Sarafidis 和 Weber (2015) 开发了一种回归聚类方法,将个体分为不同的聚类。这种聚类不依赖于参数分布的先验假设。譬如,我们想探究学生成绩的影响因素,若在计算标准误时,选择在班级层面上进行聚类调整,则意味着我们假定同一个班级的同学的成绩更具有相关性 (可能源于班风、班主任个人特征等因素)。但这类假设往往是基于研究者的理论分析给出的假设,而非通过数据分析得到的。
Sarafidis 开发的回归聚类方法是基于数据确定的,假设聚类数量与分块的大小都是未知,基于最小化总残差平方和的最优化方法并设置严格增加聚类数量的惩罚函数,从而将个体分为不同的聚类。在每个聚类中,斜率系数是同质的,而在组间斜率的系数是异质的。在没有参数结构的先验信息的情况下,xtregcluster
可以用于探索斜率参数的异质性,适用于分析大样本个体和短时间序列样本。此外,从统计意义上也可以检验单个实体先验分类是否最优。
考虑如下面板回归模型:
其中,
其中,
我们过往的聚类方法往往通过经济学角度进行预先设定,譬如我们假定公司内部或行业内部存在组内相关,从而我们在公司或行业的级别上聚类,但我们还可以通过统计的角度,通过最小化 RSS 来确定最优聚类分组。
由于在整个时间的某个个体只能属于一个集群,在
我们定义模型信息准则 (MIC):
其中,
与所有的 xt
命令相同,xtregcluster
要求数据先加以设定。首先通过随机分类获得初始分区、预分类或根据特定观测分类,再将个体重新聚类,从而使 RSS 最小化。
*命令安装
cnssc install xtregcluster, replace
*命令语法
xtregcluster depvar indepvars if in weight ,
{random|preclass(varname)|prevars(varlist|X|b)} omega(numlist)
[prevarsopt(kmeansopt) theta(#) seed(#) name(varname) iterate(#)
tolerance(#) nolog graph table]
random
:从标准均匀分布中随机选取初始分区;preclass(varname)
:根据分类变量获得初始分区;prevars(varlist)
:使用 Stata 官方命令 kmeans 聚类方法获得初始分区,prevars(X)
包含所有的回归自变量,prevars(b)
使用所有个体的估计斜率;omega(numlist)
:定义 prevarsopt(kmeansopt)
:与 prevars(varlist)
同时指定;theta(#)
:惩罚函数的参数 seed
:随机数种子,默认为 seed(123)
;name
:存储识别最优聚类分区数量的变量名称,默认为 name(omega#)
;iterate
:最小化RSS的最大迭代数量,默认值为 100;tolerance
:收敛于 RSS 的容忍度,默认值为 tolerance(1e-6
;nolog
:取消迭代日志;graph
:不同聚类方法的散点图与线性拟合;tolerance
:显示每个聚类的斜率系数,回报基于
我们使用西班牙奶牛生产产量估计作为示例,相关数据来源于网站「William Greene 的面板数据计量经济学」。面板数据是 1993-1998 年 247 个农场产出与若干投入的观测值,包括牛乳、奶牛数量、土地大小、劳动力和饲料。
我们首先需要使用 xtset
设定面板数据。其中,
. lxhuse dairy_wg, clear
. xtset farm year
. xtregcluster yit x1-x34, random omega(2/3)
Initial partition via randomized classification and seed 123
Omega = 2
Iteration 0: Total RSS = 7.654266
...省略
Iteration 5: Total RSS = 6.316776
Omega = 3
Iteration 0: Total RSS = 7.579113
...省略
Iteration 9: Total RSS = 5.461213
+-----------------------------------------------+
| Omega | Total RSS | MIC |
|---------------+---------------+---------------|
| 1 | 7.887 | -1280.962 |
| 2 | 6.317 | -1323.483 |
| 3 | 5.461 | -1347.117 |
+-----------------------------------------------+
Proceed with xtreg if omega3==`i',fe where `i'=1,2,3
由估计结果可知,在此模型设定下本数据存在至少三个聚类分区,此外,omega2 和 omega3 指示了所有个体的聚类指示。而 MIC 最小值的 nolog
来节约空间。我们同样可以指定 om 名称来存储最优的聚类分区数量。
. xtregcluster yit x1-x34,random omega(2/10) name(om) nolog
Initial partition via randomized classification and seed 123
+-----------------------------------------------+
| Omega | Total RSS | MIC |
|---------------+---------------+---------------|
| 1 | 7.887 | -1280.962 |
| 2 | 6.317 | -1323.483 |
| 3 | 5.461 | -1347.117 |
| 4 | 4.999 | -1356.638 |
| 5 | 4.626 | -1363.494 |
| 6 | 4.483 | -1358.955 |
| 7 | 4.001 | -1374.719 |
| 8 | 3.820 | -1373.825 |
| 9 | 3.781 | -1364.031 |
| 10 | 3.580 | -1365.253 |
+-----------------------------------------------+
Proceed with xtreg if om7==`i',fe where `i'=1,2,3,4,5,6,7
由结果可知,最优的
. xtregcluster yit x1-x34,prevars(X) omega(2/10) name(omX) nolog
Initial partition via the variation in x1 x2 x3 x4 x11 x22 x33 x44 x12 x13 x14 x23 x24
> x34 and seed 123
+-----------------------------------------------+
| Omega | Total RSS | MIC |
|---------------+---------------+---------------|
| 1 | 7.887 | -1280.962 |
| 2 | 6.155 | -1329.891 |
| 3 | 5.658 | -1338.374 |
| 4 | 4.976 | -1357.779 |
| 5 | 4.684 | -1360.402 |
| 6 | 4.374 | -1364.992 |
| 7 | 4.132 | -1366.781 |
| 8 | 3.863 | -1371.059 |
| 9 | 3.805 | -1362.471 |
| 10 | 3.574 | -1365.671 |
+-----------------------------------------------+
Proceed with xtreg if omX8==`i',fe where `i'=1,2,3,4,5,6,7,8
由结果可知,最优的 tabulate
查看每个聚类中分配了多少人。我们也可以使用 seed()
设定不同的随机数种子。table
和 graph
参数可以提供更多的模型信息,table
提供模型的估计,而 graph
包含一系列的散点拟合图。
* Pooled fitted values
quietly xtreg yit x1-x34,fe
predict xb,xb
* Fitted values by cluster
forvalues i = 1/7{
quietly xtreg yit x1-x34 if om7==`i', fe
estimates store om`i'
quietly predict xb`i' if om7==`i ', xb
twoway (lfit yit xb, lwidth(*3) lpattern(solid) lcolor(gs8)) ///
(scatter yit xb`i' if om7==`i', msymbol(oh) mlwidth(*.3) mcolor(gs0)) ///
(lfit yit xb`i' if om7==`i', lwidth(*2.25) lpattern(dash) lcolor(gs0)), ///
aspect(1) ysize(1) xsize(1) scheme(sj) legend(off) ///
ytitle("Log of milk production (output)") ///
title("{&omega} = `i'", ring(0) pos(11) margin(medium)) name(g`i', replace)
}
graph combine g1 g2 g3 g4 g5 g6 g7, row(2) ysize(2) xsize(4) imargin(small) scheme(sj)
实线拟合线表示混合面板回归的拟合线,而虚线表示每个 omega 值的线性拟合,除了 omega=2 的情形,其余的线性拟合均相较于混合回归斜率更小。
Note:产生如下推文列表的 Stata 命令为:
lianxh 标准误 聚类, m
安装最新版lianxh
命令:
ssc install lianxh, replace
免费公开课
最新课程-直播课
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
⛳ 课程主页
⛳ 课程主页
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会-常见问题解答:
✨ https://gitee.com/lianxh/Course/wikis
New!
lianxh
和songbl
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh