Py学习  »  Python

AER: 如何用最新方法绘制散点图才会被接受? Stata,R,Python软件包详解

计量经济圈 • 2 周前 • 243 次点击  

凡是搞计量经济的,都关注这个号了

邮箱:econometrics666@126.com

所有计量经济圈方法论丛的code程序, 宏微观数据库和各种软件都放在社群里.欢迎到计量经济圈社群交流访问.

接着“TOP5最新: 不接受原先X与Y的散点图绘制程序, 绝不接受! 必须使用我们的!”,今天,我们具体讲一讲本文提供的最新软件包情况,包括Stata、R和Python软件包。

*该文原文都在社群里可以直接下载。


本文介绍 了Stata 包 Binsreg,这是一个实现 Cattaneo 等(2023a,b)提出的 binscatter 方法的工具集。Binsreg 包包含七个强大的命令:binsreg、binslogit、binsprobit、binsqreg、binstest、binspwc 和 binsregselect。前四个命令分别用于执行标准和扩展最小二乘分箱回归(通过 binsreg 实现)以及广义非线性分箱回归(binslogit 用于逻辑回归分析,binsprobit 用于 Probit 回归分析,binsqreg 用于分位数回归分析)。这些命令不仅提供点估计和不确定性量化(包括置信区间和置信带),还支持生成分箱散点图,适用于单样本和多样本的研究设置。
接下来的两个命令,binstest 和 binspwc,专注于提供逐点和统一的推断方法。Bintest 命令用于实施针对参数和未知回归函数的非参数形状约束的假设检验,而 binspwc 命令则用于执行多组间的成对统计比较。这两个命令支持最小二乘以及广义非线性分箱方法,增强了分析的灵活性和深度。所有这些方法都支持多样本分析,这在随机化试验和观察性研究中探究处理效应异质性时尤为有用。
最后,binsregselect 命令是一个数据驱动的箱数选择程序,它可以根据分位数间隔或均匀间隔进行分箱或分区,进一步优化了分箱散点图的构建过程。Binsreg 包中的所有命令都支持协变量调整、平滑约束、加权和聚类等功能,以及其他许多高级特性。此外,为了满足不同用户的需求,还提供了具有类似语法和功能的 Python 和 R 包,以便在多种统计软件环境中使用。

简要介绍:
分箱散点图在应用微观经济学分析中已成为一种广泛使用的方法。有关详细的讨论,可以参考Starr和Goldfarb(2020)及其文献综述。这种方法提供了一种灵活而直观的方式来展示和总结大数据背景下的回归分析,不仅可以用于数据的可视化,还可以用于形式化估计和推断,包括对回归函数及其导数(如线性或单调性等)的假设检验。
尽管在实证研究领域内广受欢迎,但关于分箱散点图的统计特性,直到最近才得到了深入的探讨。Cattaneo等(2023a,b)首次对该方法进行了基础性和全面性的分析,提供了理论和实践上的重要成果。这些成果不仅有助于理解当前实践的有效性,也为未来的应用提供了理论指导。
本文介绍的Stata软件包Binsreg,包含了七个命令,实现了Cattaneo等(2023a,b)的主要方法和结果。这些命令的功能如下:
  • 估计、不确定性量化和绘图:binsreg命令提供了标准和扩展最小二乘法分箱散点图的实现,而binslogit、binsprobit和binsqreg命令则提供了广义非线性分箱散点图方法的实现(包括逻辑回归、Probit回归和分位数回归)。所有这些命令都支持箱内高阶多项式拟合、跨箱平滑度限制,以及在估计、不确定性量化和绘图时对协变量进行调整。它们还涵盖了线性和非线性设置中感兴趣的高阶导数及其相关的部分效应。此外,这些命令还支持多样本的估计、不确定性量化和绘图。

  • 假设检验和统计推断:binstest命令实现了对参数specification和未知回归函数形状限制的非参数检验程序,而binspwc命令则用于执行多组间的两两比较。这两个命令与估计命令binsreg、binslogit、binsprobit和binsqreg一样,提供了相同的灵活性和功能,允许执行线性和非线性最小二乘和广义分箱散点图方法。这包括箱内高阶多项式拟合、箱间平滑度限制、半线性协变量调整,以及提供其他多种功能和选项。

  • 最佳箱数选择:上述六个命令都需要一个分箱方案作为输入,该方案定义了构建分箱散点图近似时箱的位置和总数。如果用户没有提供这一信息,binsregselect命令将实现一个数据驱动的选择值,用于选择基于分位数间隔或均匀间隔的分箱/分区方案(默认情况下,遵循常见的实证实践,选择基于分位数间隔的分箱方案)。

Binsreg软件包中的七个命令为实证分析工作提供了诸多重要功能。首先,这些命令默认包含了质量点(mass points)和自由度的检查与调整,这有助于提升分析的稳定性。其次,它们支持使用Stata提供的基本命令进行多维固定效应和单向聚类的估计与推断,同时在Python和R中也允许类似的操作。第三,仅在Stata中,这些命令通过reghdfe包(Correia和Constantine 2023)提供了多维固定效应和多维聚类的估计与推断选项。第四,同样在Stata中,这些命令利用gtools包(Caceres 2023)来提高处理超大型数据集时的计算效率,而不是依赖于内部实现。
根据数据的规模和结构,Binsreg软件包中的命令在Stata中的实现速度可能在以下情况下得到提升:(i) 关闭质量点(mass points)和自由度的检查;(ii) 使用用户编写的reghdfe和gtools包,而不是内部(开源)实现。关于Binsreg软件包执行速度的深入讨论,请参阅第3.6节。
此外,还有两个用户编写的流行Stata命令binscatter(Stepner 2017)和binscatter2(Droste 2019)也实现了分箱散点图方法。然而,这两个软件包在纳入其他协变量或固定效应时存在缺陷,可能会导致结果的不准确。即便在没有额外控制变量的情况下,它们也仅提供了用于分段常数估计的分箱散点图,且仅限于最小二乘回归的应用。与Binsreg相比,它们缺乏理论基础功能,如非线性模型、有效的不确定性可视化、正式的方程和形状测试、群组比较以及最佳分箱选择等。更多相关信息,请参考Cattaneo等(2023a,b)的研究。
关于此软件包的最新版本,以及其他相关软件和材料,可以通过以下网址访问:https://nppackages.github.io/binsreg/
语法和实现细节
Binsreg软件包共包含七个命令,它们分为三个主要类别:(i) binsreg、binslogit、binsprobit 和 binsqreg,这些命令用于执行点估计、不确定性量化以及分箱散点图的绘制;(ii) binstest 和 binspwc,这两个命令用于进行假设检验和统计推断;(iii) binsregselect,该命令用于构建数据驱动的IMSE(平均平方误差)最优分箱/分区方案。接下来,将首先介绍每个命令的通用语法,然后深入探讨它们的共同点和各自独特的特性。所有七个命令均需以下输入参数:
  • depvar 代表因变量(( y_i ))。

  • indvar 代表自变量(( x_i ))。

  • othercovs 是用于协变量调整的变量列表(( w_i ))。

  • weights 参数支持 fweights(频率权重)、aweights(分析权重)和 pweights(概率权重);更多详细信息,请参阅 Stata 中关于权重的文档。(在 R 中,weights 参数仅支持与 fweights 等效的权重;更多详细信息,请参阅 lm() 函数的帮助文档。)

估计命令

  • binsreg 命令语法

    命令 binsreg 实现了最小二乘分箱散点估计值,包括相应的置信区间和置信带,以及全局多项式的完整逼近。它还支持分箱散点图的绘制。该命令尽可能地使用基本的线性回归命令(如 Stata 中的 regress)。分箱/分区结构是必需的,但如果用户未提供,则可以使用配套命令 binsregselect 以数据驱动的方式进行选择。

    命令的基本语法如下:

binsreg depvar indvar [othercovs] [weights] [p s v]
在这里,depvar 是因变量,indvar 是自变量,othercovs 是协变量调整的变量列表,weights 是指定的权重类型,而 p、s 和 v 用于控制分箱的数量和位置。
在 Binsreg 软件包中,大多数选项普遍适用于所有估计命令,因此将在介绍完这些命令的基本语法之后,再对它们进行详细讨论。一个重要的例外是 absorb(absvars)reghdfeopt(reghdfe option) 选项,这两个选项通过 reghdfe 模块(Correia and Constantine 2023)实现了多维固定效应和多维聚类最小二乘分箱散点估计。这些选项仅适用于 binsregbinsregselect 命令(如果测试程序基于最小二乘分箱散点)。binsreg 命令依赖于基本命令 regress,或者如果用户指定的话,命令 reghdfe,因此它在可能的情况下使用 regressreghdfe 的语法。
binslogit/ binsprobit 命令语法
binslogitbinsprobit 命令实现了二值结果分箱散点估计,包括相应的置信区间和置信带,以及全局多项式的完整逼近。它们还支持分箱散点图的绘制。这些命令尽可能地使用基本命令 logitprobit(或者在 R 中使用 glm() 函数)。如果用户没有提供分区/分箱结构,可以使用配套命令 binsregselect 以数据驱动的方式进行选择。
binsreg 相比,binslogit/binsprobit 的唯一新选项是 nolink 以及 logitopt(logit option)/probitopt(probit option)。当指定 nolink 时,binslogit/binsprobit 将报告线性单指数(即不使用逆链接函数的预测结果。logitopt(logit option)/probitopt(probit option) 可用于指定 logit/probit 命令的其他选项,例如控制最大化过程的选项。absorb(absvars)reghdfeopt(reghdfe option) 选项在这些命令中不可用。所有其他选项都适用于 Binsreg 软件包中的所有估计命令。binslogitbinsprobit 实现了基本命令 logitprobit,因此它们在可能的情况下使用相同的语法。
binsqreg 命令语法
binsqreg 命令实现了分位数回归分箱散点估计,包括相应的置信区间和置信带,以及全局多项式的完整逼近。它还支持分箱散点图的绘制。这个命令尽可能地使用基本的分位数回归命令(如 qregbsqreg,或者在 R 中使用 rq() 函数)。如果用户没有提供分区/分箱结构,可以使用配套命令 binsregselect 以数据驱动的方式进行选择。
binsreg 相比,binsqreg 的唯一新选项是 quantile(numeric)qregopt(qreg option)。选项 quantile(numeric) 设置感兴趣的分位数,而 qregopt(qreg option) 可用于指定 qreg 命令的其他选项,例如控制优化过程的选项。absorb(absvars)reghdfeopt(reghdfe option) 选项在 binsqreg 中不再可用。所有其他选项都适用于 Binsreg 软件包中的所有估计命令。binsqreg 实现了基本命令 qregbsqreg(如果通过 vce() 请求基于自举的标准误差),因此在可能或适当的情况下允许使用相同的语法和选项。
方法示例
为了展示 Binsreg 软件包的功能,将使用一个包含在文件 binscatter_simdata.dta 中的模拟数据集进行说明。该数据集中,y 代表结果变量,x 作为分箱的自变量, w 是一个连续分布的协变量,t 是一个二元协变量,而 id 则是用于标识不同组别的标识符。以下是模拟数据的摘要统计信息。
. use binsreg_simdata, clear
. sum
估计、不确定性量化与绘图
基本的 binsreg 命令语法如下:
. binsreg y x w
Sorting dataset on x...
执行该命令后,主要输出是图 1 所示的分箱散点图。默认设置下,yx 之间的(非参数化)平均关系通过分段常数(dots(0 0))来近似。图中每个点代表相应箱子的点估计值,这是分箱散点图的典型特征。若未指定箱子数量,binsregselect 命令将自动以数据驱动的方式进行选择。在此示例中,共使用了 21 个箱子。同时,命令还提供了其他有用信息,包括总样本量、x 不同值的数量、箱子选择结果以及所使用的统计模型的自由度等。默认情况下,binsreg 命令在协变量 wi 的均值处评估并绘制感兴趣的回归函数 (\theta(v)w(x)),即 (w = \bar{w})。用户可以通过 at() 选项指定不同的 w 值,例如,wi 中每个分量的经验中位数:
. binsreg y x w, at(median)
在此,控制了一个连续变量 w 和一个基于二元协变量 t 生成的虚拟变量。在 w=0.2t=1 处评估分箱散点估计,并将这些值提前保存在名为 evalcovar 的临时文件中。
用户也可以手动指定箱子的数量,而不是依赖自动选择。例如,实践中常见的一种选择是设置 J=20 个分位数间隔的箱子:
. binsreg y x w, nbins(20) polyreg(1)
选项 polyreg(1) 向典型的分箱散点图添加了线性预测线,但由于篇幅限制,这里不展示结果。
binsreg 命令支持用户添加基于分箱散点的线近似未知回归函数、点估计的置信区间、均匀置信带和全局多项式回归逼近。以下语法依次添加了四种不同的图形选项,包括拟合线、置信区间和置信带,均基于三次 B 样条,并添加了一个基于 4 次全局多项式的拟合线。结果展示在图 2 中。
. qui binsreg y x w, nbins(20) dots(0,0) line(3,3)
. qui binsreg y x w, nbins(20) dots(0,0) line(3,3) ci(3,3)
. qui binsreg y x w, nbins(20) dots(0,0) line(3,3) ci(3,3) cb(3,3)
. qui binsreg y x w, nbins(20) dots(0,0) line(3,3) ci(3,3) cb(3,3) polyreg(4)
由于三次 B 样条拟合是一个分段三次多项式函数,连续且具有连续的一阶和二阶导数,因此生成的预测线和置信带非常平滑。在此例中,由于选择了较大的 J=20,可能会产生过度平滑的效果。可以通过调整 dots()line()ci()cb() 选项中 ps 的值来改变多项式的阶数和平滑度。
binsreg 命令还支持使用标准的 vce 选项、因子变量以及 twoway 图形选项等,这些在下面的代码中进行了展示。
. binsreg y x w i.t, dots(0,0) line(3,3) ci(3,3) cb(3,3) polyreg(4) vce(cluster id) savedata(output/graphdat) replace title("Binned Scatter Plot")
此命令还包括了聚类标准误差(vce(cluster id))、保存图形数据到 output/graphdatsavedata(output/graphdat)),以及替换现有文件(replace)的选项,并为图形指定了标题(title("Binned Scatter Plot"))。
具体而言,在估计中加入了基于二值协变量 t 生成的虚拟变量,对标准误差进行了聚类处理,以 id 作为组别水平的指示符,并为生成的分箱散点图添加了图形标题。需要注意的是,对于 binsreg 命令未识别的任何选项,将被视为 twoway 选项,因此会被附加到最终的绘图命令中。这样,用户可以轻松地修改轴属性、图例等。此外,savedata(graphdat) 选项用于将分箱散点图的底层数据保存至文件 graphdat.dta 中。
命令 binsreg 也适用于子组分析。以下命令在由变量 t 定义的两个子组中分别执行分箱估计和推断,随后生成一个统一的分箱散点图(见图 3):
. binsreg y x w, by(t) dots(0,0) line(3,3) cb(3,3) bycolors(blue red) bysymbols(O T)
图 3 突出了由变量 t 定义的两个子组之间的差异,这与我们的模拟数据中对 t = 1 的单位在结果变量上加 1 的做法相对应。图 3 中的颜色、符号和线条样式可以通过 bycolors()bysymbols()bylpatterns() 选项进行调整。若未指定箱子数量,binsreg 命令将通过配套命令 binsregselect 为每个子样本独立选择箱子数量。这意味着,通常情况下,不同子组的分箱/分区结构选择是不同的。但如果指定了 samebinsby 选项,则会基于完整样本构建所有子组的公共分箱方案。
如前所述,有时我们希望固定箱子数量 J 而选择多项式的度数/平滑度。以下代码段展示了如何实现这一过程:
. binsreg y x w, nbins(20) line(T) ci(T) cb(T) pselect(0/3)
在此,我们设定 J = 20,并在范围 {0, 1, 2, 3} 内选择多项式的次数 p。最佳 p 的结果是 0,因此我们基于分段常数估计构建了“dots”、“line”,以及基于线性样条估计的置信区间和置信带。配套的复制文件中包含了其他示例,例如:
  • 基于渐近方差公式的推断:

. binsreg y x w i.t, dots(0,0) line(3,3) ci(3,3) cb(3,3) polyreg(4) vce(cluster id) asyvar(on)
  • 使用社区贡献的模块 reghdfe

. binsreg y x w, absorb(t) dots(0,0) line(3,3) ci(3,3) cb(3,3) polyreg(4)
  • 关闭数据分布健壮性检查并使用社区贡献的模块 gtools

. binsreg y x w, masspoints(off) usegtools(on)
接下来,我们使用 binsqreg 命令对量化回归分箱方法进行估计和不确定性量化的说明。以下代码查看了结果变量的条件第 25 个分位数:
. binsqreg y x w, quantile(0.25)
默认情况下,量化回归方法采用解析方差估计公式,这在应用中可能表现不佳。一个更稳健的替代方案是采用 Bootstrap 方法:
. binsqreg y x w, quantile(0.25) ci(3 3) vce(bootstrap, reps(100))
复现文件还说明了如何同时绘制最小二乘和量化回归分箱逼近。最终的输出如图 4 所示,该图绘制了条件均值及其置信带,以及条件第 25 个和第 75 个分位数回归(即条件四分位距)。
此外,我们提供了一个便利的选项 qregopt(qreg option) 来修改底层的量化回归。例如,用户可以通过以下方式控制优化过程:
. qui binsqreg y x w, quantile(0.25) qregopt(iterate(1000) wls(1))
最后,我们使用 binslogit 命令对二元响应回归分箱方法进行说明,使用逻辑回归:
. binslogit d x w
以上是对 Binsreg 软件包中不同命令的使用示例,展示了如何根据不同的统计需求选择合适的命令和选项。
假设检验和统计推断
首先,来阐述 binstest 命令的语法和输出结果。该命令的基本语法如下:
. binstest y x w, testmodelpoly(1)
此命令利用分箱估计器对回归函数 ( \mu_0(x) ) 的线性进行检验。默认情况下,推断过程中使用的是线性 B 样条,可以通过 testmodel() 选项进行调整。若未指定,箱数的选择将通过配套命令 binsregselect 以数据驱动的方式进行,且默认选择的箱数是对分段常数点估计的 IMSE(平均平方误差)最优值。命令首先展示样本和分箱方案的摘要,随后报告检验统计量和 p 值。在此情形下,检验统计量是在一系列网格点上评估的 t 统计量的绝对最大值,而 p 值是基于模拟计算得出的。显然,如果 p 值非常小,我们将拒绝回归函数线性的原假设。
正如之前所强调的,关于水平的参数化规范检验可能对评估点 ( w ) 的选择较为敏感。因此,检验 ( \mu_0(x) ) 的线性的一个推荐策略是检查其一阶导数是否为常数,具体实现如下:
. binstest y x w, testmodelpoly(1) deriv(1)
注意,对于 ( v = 1 ),通过默认使用线性 B 样条估计所选择的箱数是 IMSE 最优的。基于建议的鲁棒偏差校正策略构建的检验统计量采用了二次 B 样条拟合。
binstest 命令能够通过比较基于分箱估计器(由命令计算)和用户提供的感兴趣的参数模型的拟合值来实现对任何参数化模型规范的测试。例如,以下代码首先创建了一个包含评估点网格的辅助数据库,然后实施了线性回归,并使用辅助数据集进行了外样本预测,最后通过指定包含拟合值的辅助文件来基于分箱估计器进行线性检验:
. qui binsregselect y x w, simsgrid(30) savegrid(output/parfitval) replace
. qui reg y x w
. use output/parfitval, clear
. predict binsreg_fit_lm
. save output/parfitval, replace
第一行 binsregselect y x w, simsgrid(30) savegrid(output/parfitval) replace 生成了包含评估点网格的辅助文件。在外样本预测步骤中,由于兴趣参数仅为 ( y )( x ) 之间的均值关系 ( \mu_0(x) ),测试数据集 parfitval.dta 必须包含一个变量 ( x ),其中包含用于比较分箱和参数模型的评估点序列,并且其值被设置为零的协变量 ( w )。此外,包含拟合值的变量必须遵循特定的命名规则,即采用 binsreg fit* 形式。配套命令 binsregselect 可以用于构建所需的辅助数据集,如上所示。我们将在后续进一步讨论这个其他命令。
除了模型规格检验外,binstest 命令还可以测试回归函数的非参数形状约束。例如,以下语法测试回归函数是否递增:
. binstest y x w, deriv(1) nbins(20) testshaper(0)
这里的原假设是回归函数的一阶导数的下确界不小于 0。输出报告了检验统计量,即在一系列评估点上的 t 统计量的下确界,以及相应的基于模拟的 p 值。binstest 命令能够同时实施多个检验(针对感兴趣的多个导数)。例如:
. binstest y x w, nbins(20) testshaper(-2 0)

这允许用户对回归函数的形状进行更为复杂的检验,提供了一种灵活的方法来探究回归函数及其导数的属性。

*群友可直接在社群下载该文原文PDF参阅。

下面这些短链接文章属于合集,可以收藏起来阅读,不然以后都找不到了。

7年,计量经济圈近2000篇不重类计量文章,

可直接在公众号菜单栏搜索任何计量相关问题,

Econometrics Circle




数据系列空间矩阵 | 工企数据 | PM2.5 | 市场化指数 | CO2数据 |  夜间灯光  官员方言  | 微观数据 | 内部数据
计量系列匹配方法 | 内生性 | 工具变量 | DID | 面板数据 | 常用TOOL | 中介调节 |  时间序列 | RDD断点 | 合成控制 | 200篇合辑 | 因果识别 | 社会网络 | 空间DID
数据处理Stata | R | Python | 缺失值  | CHIP/ CHNS/CHARLS/CFPS/CGSS等 |
干货系列能源环境 | 效率研究 | 空间计量 | 国际经贸 | 计量软件 | 商科研究 | 机器学习 | SSCI | CSSCI  | SSCI查询 | 名家经验
计量经济圈组织了一个计量社群,有如下特征:热情互助最多前沿趋势最多、社科资料最多、社科数据最多、科研牛人最多、海外名校最多。因此,建议积极进取和有强烈研习激情的中青年学者到社群交流探讨,始终坚信优秀是通过感染优秀而互相成就彼此的。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/169727
 
243 次点击