Stata:分仓散点图绘制-binscatter-binscatter2
👇 连享会 · 推文导航 | www.lianxh.cn
🍎 Stata:Stata基础 | Stata绘图 | Stata程序 | Stata新命令 📘 论文:数据处理 | 结果输出 | 论文写作 | 数据分享 💹 计量:回归分析 | 交乘项-调节 | IV-GMM | 时间序列 | 面板数据 | 空间计量 | Probit-Logit | 分位数回归 ⛳ 专题:SFA-DEA | 生存分析 | 爬虫 | 机器学习 | 文本分析 🔃 因果:DID | RDD | 因果推断 | 合成控制法 | PSM-Matching 🔨 工具:工具软件 | Markdown | Python-R-Stata 🎧 课程:公开课-直播 | 计量专题 | 关于连享会
连享会 · 文本分析 | 爬虫 | 机器学习
作者:钟声 (中山大学)
邮箱:zhongsh56@mail2.sysu.edu.cn
目录
1. binscatter 方法介绍
1.1 简介
1.2 用图形展示结果的重要性
1.3 实现步骤
1.4 理论基础
1.5 分仓散点图的功能
1.6 如何选择 bins 的数量
2. binscatter 命令介绍
3. binscatter2 命令介绍
4. 参考资料
5. 相关推文
温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:
分仓散点图 (binned scatterplot) 是一种显示变量之间非参数关系的图形工具。本文将简要介绍其原理和功能,以及相关 Stata 命令。
1. binscatter 方法介绍
1.1 简介
binscatter
是用于生成分仓散点图 (binned scatterplot) 的 Stata 命令。其生成的图像显示了给定 情况下, 条件期望的非参数估计。该命令可以在控制其他变量或者固定效应的情况下,快速检测非线性、异常值、分布性问题和最佳拟合函数形式。此外,还可以很好地显示不同子组的异构关系。
1.2 用图形展示结果的重要性
我们借用英国统计学家 F.J. Anscombe (1973) 曾经举过的例子,来说明图形可视化的必要性:
以上 4 个数据集显然具有相同的线性关系。然而,
在第一个数据集中,函数关系为线性; 在第二个数据集中,函数关系为曲线; 在第三个数据集中,一个异常值影响了整体; 在第四个数据集中,的性关系则完全是由一个异常值驱动。
Anscombe 的观点是,如果没有将两个变量之间的关系可视化,假设任何函数形式的回归分析都可能会产生误导。但是在数据量非常大的时候,样本的散点图可能无法很直观地反应变量之间的关系,这时候分仓散点图 (binned scatterplot) 就可以帮上忙了。
1.3 实现步骤
为了创建一个分仓散点图,binscatter
命令会:
将 轴的变量分为样本量相同的 bins; 计算每个 bin 内 轴和 轴变量的平均值; 创建这些数据点的散点图; 绘制总体回归线 (采用原始数据,而非生成的散点)。
1.4 理论基础
1.4.1 对条件期望函数的估计
一个典型的分仓散点图显示了条件期望函数 (CEF) 的非参数估计值 (分级后的散点) 和最佳线性估计 (回归拟合线)。
考虑两个随机变量 和 ,条件期望函数 (CEF) 为 。当 时,CEF 则为 的均值。而且 CEF 最小化了平均平方误差,因此它是给定 时 的最佳预测。
假设运行 OLS 回归 ,将得到估计的系数 、 和回归拟合线 。该拟合线最小化了平均平方误差,因此是 CEF 的最佳线性近似。
当 N 变大时,保持 bins 的数量不变,每个散点会更加接近真实的条件期望 ,而且分仓散点(binned scatters)在回归线周边的分散程度将具有一定统计学意义:
如果分仓散点紧靠回归线,则可以较精确估计斜率,回归标准误差较小; 如果分箱散点对回归线而言较为分散,则斜率估计不精确,回归标准误差较大。
1.4.2 控制变量的方法
binscatter
命令采用 Frisch-Waugh-lovell (FWL) 的方法排除控制变量的影响,其图像展示的是 和 的残差值的分仓散点图。我们假设在下式中, 是控制变量矩阵:
依据 FWL 定理进行 OLS 估计的步骤如下:
将 对 回归,取残差 ; 将 对 回归,取残差 ; 将 对 回归,得到 的系数 。
采用此方法绘制的分仓散点图选用的是 和 数值,往往很难反映出真实的非参数关系。其不准确的原因是线性残差的非线性函数很难反映实际非线性关系。解决这一问题,就应该在做估计之前,这一方法可以用 binscatter2
命令实现。
1.5 分仓散点图的功能
我们借用 Sorenson (2000) 使用的 1980-1996 年计算机工作站公司数据集来说明分仓散点的功能和价值。
1.5.1 更清晰地将复杂数据之间的关系可视化
在数据量很大,或者数据种类多的情况下,普通的散点图往往很难体现变量之间的关系。在下图中,Panel A 描绘了 1980 年至 1996 年间市场上竞争产品数量与公司年销售额之间关系的散点图,从中我们很难辨别出函数关系。在 Panel B 中,我们采用了分仓散点图,函数关系马上变得清晰很多。
1.5.2 显示控制固定效应后的图像
虽然在采用 binscatter
之后,函数关系变得明显,这样的关系却不符合直觉 (竞争品数量多,公司销量应该下降才对,出现该情况可能是每年经济形势对销量产生影响)。在上图 Panel C 中,我们控制了年份固定效应,图像显示的关系更加符合实际。
1.5.3 帮助检验函数形式
分仓散点显示的是在给定 , 条件期望的非参数估计。不同于 OLS 估计,我们不需要对 和 的关系进行假设。分仓散点图可以帮助我们确定函数关系是线性、二次、对数的假说是否合理,以及判断是否应该对函数进行分段。
如图中的 Panel C 所示,当竞争对手数量较少时,竞争对手与销售之间的均值关系是水平的;当竞争对手数量较大时,关系是下降的;而线性函数形式的假设掩盖了这种关系,用分仓散点图就可以很直观地观察到。
1.5.4 帮助发现异常值
下图中的分箱散点图显示了公司生产的产品数量和公司研发支出之间的关系。直觉表明,拥有更多产品的公司将从事更多的研发,这与 Panel A 中的回归线情况不符。通过仔细观察我们可以发现,Panel A 中存在一个异常值,它拥有非常高的研发水平和很少的产品,导致 OLS 回归线显示出负相关关系。当我们排除该点后时,斜率就变成了正的,如 Panel B 所示。
1.5.5 展示不同子组的差异
除了帮助我们检查离群值,binscatter
还可以为不同的子组分别创建散点。如上图 Panel C 中,我们可以观察到私营企业、上市公司和子公司的差异。
1.5.6 帮助研究时间趋势
许多时间趋势的研究都在对照组和实验组之间进行差异分析。分仓散点可以用来显示预处理趋势在实验组可对照组之间是否平行。
如下图 Panel A 所示,在 1985 年以前,产品的平均数量相当稳定;1985 年以后,平均生产的产品数量急剧增加。Panel B 按所有权类型分解了这些差异,在 1985 年之前,每种类型的公司的发展都处于相似的、相对平稳的情况;然而,1985 年之后,上市公司大幅扩大了产品供应,而私营公司和子公司扩大的速度则慢得多。
1.6 如何选择 bins 的数量
构建分仓散点图时最重要的选择之一是分仓的数量。更多的 bins 将帮助我们识别更多的曲线模式,但由于每个 bin 的数据点较少,会产生更大的特异方差。相比之下,分仓数量少时每个 bin 包含更多的数据点,从而提高精度,但在识别非线性方面可能不太有效。这是方差和偏差之间的权衡。
在 binscatter
命令中,bins 默认数量为 20。该命令的作者 Michael (2014) 称,根据他的个人经验,这一数值的表现较好。
CCFF (2019) 证明了使综合均方误差最小化的分仓数与 成正比,其中 是观测数。因此,更多的观测通常会导致更多的箱数。不过,其他因素也很重要。例如,保持 的分布不变, 和 之间的关系曲线越复杂,bins 的数量也应该越多 (否则均方误差会增加)。
在安装 binsreg
命令之后,binsregselect
命令可以提供使综合均方误差最小化的分仓数。以下是 Stata 命令的演示:
. lxhget binsreg.pkg, install replace // 或者 https://github.com/nppackages/binsreg
. sysuse auto, clear
. binsregselect mpg weight foreign
有时,我们也可能希望放弃默认选择以增强分箱散点图的解释意义。例如,在检查跨年的趋势时,跨年份 bin 的均匀间隔 (而不是跨年份的数据均匀分布) 可能更直观。
2. binscatter 命令介绍
. ssc install binscatter, replace // 命令安装
. sysuse nlsw88, clear
. keep if inrange(age,35,44) & inrange(race,1,2)
. scatter wage tenure, msize(tiny) // 展示原始数据
. binscatter wage tenure // 生成最基础的 binscatter 图像
. binscatter wage tenure, line(qfit) // 进行二次拟合
. // 分段回归, 该命令对散点无影响, 但是生成分段回归曲线
. binscatter wage tenure, rd(2.5)
. binscatter wage tenure, rd(2.5 10)
. binscatter wage age, by(race) // 分组回归
. binscatter wage age, by(race) absorb(occupation) // 分组回归并控制固定效应
. // 修改图表样式
. binscatter wage age, by(race) absorb(occupation) msymbols(O T) ///
> xtitle(Age) ytitle(Hourly Wage) legend(lab(1 White) lab(2 Black))
. binscatter wage age, n(10) // 设置bins数量
. binscatter y x, line(connect) // 将散点连线
. binscatter wage tenure grade // 将两个因变量展示在同一个坐标轴中
. // 保存命令
. savegraph(filename) // 默认为 .gph
. savedata(filename) // 同时保存 dta 文件和 do-file
3. binscatter2 命令介绍
binscatter2
命令继承了 binscatter
命令的语法和功能,不过在数据量较大的情况下,运行速度要快得多 (3 至 8 倍)。此外,binscatter2
命令还提供了一些新功能。
. // 命令安装
. lxhget binscatter2.pkg, install replace // 或者 https://github.com/mdroste/stata-binscatter2
binscatter2
命令的新功能如下:
安装 ftools
和reghdfe
命令之后,absorb()
选项中可以添加多个变量,以达到同时控制多个固定效应的效果;可以展示关于条件概率分布的相关信息,例如分位数区间,可以帮助使用者更好地了解在给定 情况下 条件分布的变化。具体地,输入以下命令可以得到相应的分位数区间:
. binscatter2 y x, quantiles(25 75)
binscatter2
拥有更灵活的保存命令。在savedata()
后加上nodofile
就可以只保存数据而不保存 do-file;line()
选项面临着更多元的选择,相比之前增加了指数 (line(expfit)
) 和对数 (line(logfit)
) 的拟合形式;前文所提到的另一种处理控制变量的方法 (先建立 bins,再进行 OLS 估计),可以通过在 control()
后加altcontrols
实现。
4. 参考资料
Starr E, Goldfarb B. Binned scatterplots: A simple tool to make research easier and better[J]. Strategic Management Journal, 2020, 41(12): 2261-2274. -PDF- Anscombe F J. Graphs in statistical analysis[J]. The american statistician, 1973, 27(1): 17-21. -PDF- Stepner M. Binscatter: Binned scatterplots in stata[J]. StataConference, 2014. -PDF- Sorenson O. Letting the market work for you: An evolutionary perspective on product strategy[J]. Strategic Management Journal, 2000, 21(5): 577-592. -PDF- Cattaneo M D, Crump R K, Farrell M H, et al. Binscatter regressions[J]. arXiv preprint arXiv:1902.09615, 2019. -PDF- Cattaneo M D, Crump R K, Farrell M H, et al. On binscatter[J]. arXiv preprint arXiv:1902.09608, 2019. -PDF-
5. 相关推文
Note:产生如下推文列表的 Stata 命令为:
lianxh 绘图, m
安装最新版lianxh
命令:
ssc install lianxh, replace
专题:Stata绘图 Stata绘图:箱形图与小提琴图-vioplot Stata绘图:太美了!羊皮卷风格图形 Stata绘图:自定义绘图利器-palettes 史上最牛Stata绘图模版-schemepack:酷似R中的ggplot2-袁子晴 Stata绘图:addplot-层层叠加轻松绘图 Stata 绘图:用 Stata 绘制一打精美图片-schemes 常用科研统计绘图工具介绍 Stata绘图:柱状图专题-T212 Stata绘图:回归系数可视化-论文更出彩 Stata绘图:重新定义坐标轴刻度标签 Stata绘图:制作教学演示动态图-GIF Stata绘图:绘制一颗红心-姑娘的生日礼物 Stata绘图:bgshade命令-在图形中加入经济周期阴影 Stata绘图:让图片透明——你不要掩盖我的光芒 Stata:图形美颜-自定义绘图模板-grstyle-palettes Stata绘图:多维柱状图绘制 Stata绘图:用暂元统一改变图形中的字号 一文看尽 Stata 绘图 Stata绘图:绘制单个变量的时序图
New! Stata 搜索神器:
lianxh
和songbl
GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉 使用:
. lianxh DID 倍分法
. songbl all
🍏 关于我们
连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。 直通车: 👉【百度一下:连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。