查看原文
其他

Stata:分仓散点图应用-binscatter

连享会 连享会 2023-10-24

👇 连享会 · 推文导航 | www.lianxh.cn

连享会课程 · 基于机器学习的因果推断方法

作者:朱志英 (中山大学)
邮箱:zhuzhy28@mail2.sysu.edu.cn

编者按:本文部分摘译自下文,特此致谢!
Source:Akcigit, Grigsby, Nicholas and Stantcheva (2022): Taxation and Innovation in the Twentieth Century, Quarterly Journal of Economics 137 (1): 329-385. -PDF- -Replication-

温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:


目录

  • 1. 内容简介

  • 2. binscatter 方法介绍

    • 2.1 binscatter 简介

    • 2.2 binscatter 步骤

    • 2.3 binscatter 命令

  • 3. 论文复现

    • 3.1 论文介绍

    • 3.2 Figure 1 复现

  • 4. 参考资料

  • 5. 相关推文



1. 内容简介

散点图能够直观表现出变量间的总体关系趋势,因此被广泛地应用于论文中。但是,当样本量太大或者 之间的关系不够明显时,散点图就会捉襟见肘。此时,分仓散点图 (binned scatterplot) 的作用就显现出来了。本文将简要介绍分仓散点图,并介绍 Akcigit et al. (2022, QJE) 论文中对分仓散点图的应用,即 Akcigit et al. (2022, QJE) Figure 1 的绘制。

2. binscatter 方法介绍

2.1 binscatter 简介

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

2.2 binscatter 步骤

那么,binscatter 是如何实现的呢?

  • 首先,binscatter 将散点划分成不同 bins,不同的 bins 含有相同的样本量;
  • 其次,计算每个 bin 内 的均值;
  • 再次,创建这些数据点的散点图;
  • 最后,绘制总体回归线 (采用原始数据,而非生成的散点)。

2.3 binscatter 命令

命令安装:

. ssc install binscatter, replace // 命令安装

命令语法:

binscatter varlist [if] [in] [weight] [, options]

其中,

  • varlist:因变量和自变量;
  • ifin:添加限定条件;
  • weight:以该变量作为权重进行回归;
  • controls():添加控制变量;
  • absorb():使用固定效应;
  • nquantiles():设置生成多少组 bins;
  • noaddmean:计算残差后不加回变量均值;
  • nofastxtile:使用 xtile

接下来,我们以 nlsw88.dta 为例,绘制年龄和工资关系之间的图表,来感受一下 binscatter 的绘图效果。

. sysuse nlsw88, clear
. binscatter wage age // 生成最基础的 binscatter 图像

可以看到,在一定年龄区间内,wageage 之间呈现出明显的负向关系。我们还可以对 bins 进行修改,例如将默认值 20 个 bins 修改为 30 个 bins。

. binscatter wage age, n(30) // 更改 bins 为 30 个,默认 bins 为 20 个

有时,我们除了关注变量间的线性关系,还想关注变量间的非线性关系 (如二次关系),binscatter 也可以帮助我们实现。

. binscatter wage age, line(qfit) // 进行二次拟合

此外,我们还可以使用 by 进行分组绘图,查看不同组中变量间的关系。例如:研究不同种族中,年龄和工资的关系。

. binscatter wage age, by(race) // 按照种族进行分组绘图

我们也可以使用 controls 加入控制变量。例如:在研究工资与年龄的关系时,我们将样本的工作经验设置为控制变量。

. binscatter wage age, controls(ttl_exp) // 加入控制变量:工作经验

另外,分组和控制变量可以结合起来。下图的例子中我们使用 absorb 命令,加入职业固定效应。

. binscatter wage age, by(race) absorb(occupation) // 加入固定效应进行分组回归

binscatter 还可以帮助我们观察自变量和因变量在某些数值上是否存在断点。如下面的例子中,我们使用 rd 命令观察工资与年龄的关系是否在 35 岁前后发生变化。

. binscatter wage age, rd(35) // 分段回归,该命令对散点无影响,但是生成分段回归曲线

3. 论文复现

接下来,本文将简要介绍 Akcigit et al.(2022, QJE) 论文的主要内容及 Figure 1 在论文中发挥的作用。

3.1 论文介绍

Akcigit et al. (2022, QJE) 研究了 20 世纪美国公司税和个人税对创新的影响,他们发现征税对创新数量有负面影响,也会迫使本地发明人外迁,但不会影响平均创新质量。州级税收弹性很大,并且与个人层面对创新产生的反应和跨州流动性的结果一致。公司税往往会特别影响公司发明者的创新生产和跨州流动性。个人所得税显着影响整体创新数量和发明人的流动性。文中的主要变量如下:

  • mtr90_lag3:个人所得税,采用滞后三年的第 90 分位点个人所得税税率表示;
  • top_corp_lag3:公司所得税,采用滞后三年的头部公司所得税税率表示;
  • lnpat:专利申请数,采用每年州申请专利数的对数表示;
  • ln_inv:发明者数量,采用每年定居在州内的发明者数量的对数表示;
  • real_gdp_pc:人均实际 GDP;
  • population_density:人口密度;
  • rd_credit_lag3:为滞后三年的研发支出抵免。

3.2 Figure 1 复现

导入数据,设置全局暂元。

. lxhuse akcigit2022.dta, clear
. foreach var of varlist mtr90 top_corp {
2. replace `var'_lag3 = ln(1-`var'_lag3/100)
3. }
. global cx "L.real_gdp_pc L.population_density rd_credit_lag3 i.statenum"
. global T_p "mtr90_lag3" // 个人税
. global T_c "top_corp_lag3" // 公司税

绘制 Figure 1(A)。在以下代码中,[aw=pop1940] 表示把 1940 年的人口数作为权重回归。同时,作者控制公司所得税、滞后一年的人均实际 gdp、滞后一年的人口密度、滞后三年的研发支出抵免和不同的州,并使用 absorb 加入年份的固定效应,将样本分为 100 组进行回归。

. * 画图:Figure 1(A)
. binscatter lnpat $T_p [aw=pop1940], controls($T_c $cx) absorb(year) ///
> nquantiles(100) noaddmean nofastxtile savegraph("Fig1A.gph") replace

绘制 Figure 1(B)。同理,控制个人所得税,使用专利申请数对公司所得税进行回归。

. * 画图:Figure 1(B)
. binscatter lnpat $T_c [aw=pop1940], controls($T_p $cx) absorb(year) ///
> nquantiles(100) noaddmean nofastxtile savegraph("Fig1B.gph") replace

绘制 Figure 1(C)。我们控制个人所得税,使用发明者数量对公司所得税进行回归。

. * 画图:Figure 1(C)
. binscatter ln_inv $T_p [aw=pop1940], controls($T_c $cx) absorb(year) ///
> nquantiles(100) noaddmean nofastxtile savegraph("Fig1C.gph") replace

绘制 Figure 1(D)。我们控制公司所得税,使用发明者数量对个人所得税进行回归。

. * 画图:Figure 1 (D)
. binscatter ln_inv $T_c [aw=pop1940], controls($T_p $cx) absorb(year) ///
> nquantiles(100) noaddmean nofastxtile savegraph("Fig1D.gph") replace

最后,我们将 4 张图片进行组合。

. graph combine Fig1A.gph Fig1B.gph Fig1C.gph Fig1D.gph, ///
> rows(2) imargin(zero) graphregion(fcolor(white))

4. 参考资料

  • 钟声, 连享会推文, Stata:分仓散点图绘制-binscatter-binscatter2. -Link-
  • Chen, Y., S. Shi, Y. Tang, 2019, Valuing the urban hukou in china: Evidence from a regression discontinuity design for housing prices, Journal of Development Economics, 141. -PDF-
  • Beck, Thorsten, Ross Levine, and Alexey Levkov. 2010. “Big Bad Banks? The Winners and Losers from Bank Deregulation in the United States.” Journal of Finance 65 (5): 1637–67. -PDF-

5. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 绘图, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

  • 专题:专题课程
    • ⏩连享会公开课:实证研究中的数据可视化
  • 专题:Stata绘图
    • Stata可视化:能用图形就不用表格
    • Stata绘图:回归系数可视化-multicoefplot
    • Stata绘图-可视化:组间差异比较散点图
    • Stata绘图全解:绘图语法-条形图-箱型图-散点图-矩阵图-直方图-点图-饼图
    • Stata绘图-组间差异可视化:不良事件火山图、点阵图
    • Stata可视化:让他看懂我的结果!
    • 常用科研统计绘图工具介绍
    • Stata绘图:柱状图专题-T212
    • Stata绘图:绘制一颗红心-姑娘的生日礼物
    • Stata绘图:COVID-19数据可视化
    • Stata绘图:唯美的函数图-自定义水平附加线和竖直附加线
    • Stata绘图:复现组间均值差异图
    • Stata绘图:环形柱状图-实时全球新冠确诊人数
    • Stata可视化:能用图形就不用表格
    • Stata绘图:绘制华夫饼图-waffle
    • Stata绘图:绘制美观的散点图-superscatter
    • Stata绘图:如何更高效的绘制图形

课程推荐:因果推断实用计量方法
主讲老师:邱嘉平教授
🍓 课程主页https://gitee.com/lianxh/YGqjp

New! Stata 搜索神器:lianxhsongbl  GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉  使用:
. lianxh DID 倍分法
. songbl all

🍏 关于我们

  • 连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存