Stata:分仓散点图绘制-binscatter-binscatter2

发布时间:2022-02-26 阅读 5508

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者:钟声 (中山大学)
邮箱zhongsh56@mail2.sysu.edu.cn


目录


分仓散点图 (binned scatterplot) 是一种显示变量之间非参数关系的图形工具。本文将简要介绍其原理和功能,以及相关 Stata 命令。

1. binscatter 方法介绍

1.1 简介

binscatter 是用于生成分仓散点图 (binned scatterplot) 的 Stata 命令。其生成的图像显示了给定 x 情况下,y 条件期望的非参数估计。该命令可以在控制其他变量或者固定效应的情况下,快速检测非线性、异常值、分布性问题和最佳拟合函数形式。此外,还可以很好地显示不同子组的异构关系。

1.2 用图形展示结果的重要性

我们借用英国统计学家 F.J. Anscombe (1973) 曾经举过的例子,来说明图形可视化的必要性:

以上 4 个数据集显然具有相同的线性关系。然而,

  • 在第一个数据集中,函数关系为线性;
  • 在第二个数据集中,函数关系为曲线;
  • 在第三个数据集中,一个异常值影响了整体;
  • 在第四个数据集中,的性关系则完全是由一个异常值驱动。

Anscombe 的观点是,如果没有将两个变量之间的关系可视化,假设任何函数形式的回归分析都可能会产生误导。但是在数据量非常大的时候,样本的散点图可能无法很直观地反应变量之间的关系,这时候分仓散点图 (binned scatterplot) 就可以帮上忙了。

1.3 实现步骤

为了创建一个分仓散点图,binscatter 命令会:

  • 将 x 轴的变量分为样本量相同的 bins;
  • 计算每个 bin 内 x 轴和 y 轴变量的平均值;
  • 创建这些数据点的散点图;
  • 绘制总体回归线 (采用原始数据,而非生成的散点)。

1.4 理论基础

1.4.1 对条件期望函数的估计

一个典型的分仓散点图显示了条件期望函数 (CEF) 的非参数估计值 (分级后的散点) 和最佳线性估计 (回归拟合线)。

考虑两个随机变量 Yi 和 Xi,条件期望函数 (CEF) 为 E[YiXi=x]h(x)。当 Xi=x 时,CEF 则为 Y 的均值。而且 CEF 最小化了平均平方误差,因此它是给定 X 时 Y 的最佳预测。

假设运行 OLS 回归 Yi=α+βXi+ε,将得到估计的系数 α^β^ 和回归拟合线 h^(x)=α^+β^x。该拟合线最小化了平均平方误差,因此是 CEF 的最佳线性近似。

当 N 变大时,保持 bins 的数量不变,每个散点会更加接近真实的条件期望 ,而且分仓散点(binned scatters)在回归线周边的分散程度将具有一定统计学意义:

  • 如果分仓散点紧靠回归线,则可以较精确估计斜率,回归标准误差较小;
  • 如果分箱散点对回归线而言较为分散,则斜率估计不精确,回归标准误差较大。

1.4.2 控制变量的方法

binscatter 命令采用 Frisch-Waugh-lovell (FWL) 的方法排除控制变量的影响,其图像展示的是 x 和 y 的残差值的分仓散点图。我们假设在下式中,Z 是控制变量矩阵:

依据 FWL 定理进行 OLS 估计的步骤如下:

  1. 将 x 对 BZ 回归,取残差  x~
  2. 将 y 对 BZ 回归,取残差  y~
  3. 将 y~ 对 x~ 回归,得到 x~ 的系数 bt

采用此方法绘制的分仓散点图选用的是 y~ 和 x~ 数值,往往很难反映出真实的非参数关系。其不准确的原因是线性残差的非线性函数很难反映实际非线性关系。解决这一问题,就应该在做估计之前,这一方法可以用 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 帮助检验函数形式

分仓散点显示的是在给定 xy 条件期望的非参数估计。不同于 OLS 估计,我们不需要对 x 和 y 的关系进行假设。分仓散点图可以帮助我们确定函数关系是线性、二次、对数的假说是否合理,以及判断是否应该对函数进行分段。

如图中的 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) 证明了使综合均方误差最小化的分仓数与 n1/3 成正比,其中 n 是观测数。因此,更多的观测通常会导致更多的箱数。不过,其他因素也很重要。例如,保持 x 的分布不变,x 和 y 之间的关系曲线越复杂,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 命令的新功能如下:

  • 安装 ftoolsreghdfe 命令之后, absorb() 选项中可以添加多个变量,以达到同时控制多个固定效应的效果;
  • 可以展示关于条件概率分布的相关信息,例如分位数区间,可以帮助使用者更好地了解在给定 x 情况下 y 条件分布的变化。具体地,输入以下命令可以得到相应的分位数区间:
. 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

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,400+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh