aoeplacebo:地理安慰剂检验

发布时间:2021-06-06 阅读 607

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

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

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

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

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

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者: 袁子晴 (香港大学)
邮箱: yzq0612@foxmail.com


目录


1. 问题背景

随着地理信息系统 (Geographic Information Systems, GIS) 的应用和发展,包含地理位置信息的数据为研究空间背景下的社会现象和政策提供了新方法。然而,并非所有的政策都是在明确划分的行政区域层面上实施的,一些干预措施的实施区域可能是不精确的或局部的。因此,政策影响区 (Area-of-Effect, AoE) 的不确定性对相关政策有效性的估计具有一定影响。

这种不确定性与观察到的政策干预区的潜在设定偏误相关,我们可以沿着三个地理维度来研究实际政策区域的不确定性带来的影响,即位置、方向、以及规模。本推文将介绍由 Reinhard A. Weisser 编写的 Stata 命令 aoeplacebo,该命令通过人为变换政策干预区的位置、方向和大小构造假政策干预区,来测试估计模型的稳健程度,即 AoE 安慰剂检验。

2. 理论介绍

2.1 基础 AoE 安慰剂检验

AoE 安慰剂检验的出发点是研究不同区域内事件的发生情况。在图 1 的虚构场景中,同时发生着以下三种无法区分的事件:

  • 随机 (背景) 事件;
  • 季节性事件 (在特定地区和季节发生);
  • 重点事件,即在特定区域实施的政策干预,进而产生潜在的政策影响区(Area-of-Effect, AoE)。这种政策干预的真实地理范围可不会被完全观测到的。同时,政策实施可能与季节性事件的发生有明显的重叠,导致对政策有效性的低估。

为了控制重点事件附近的混淆因素 (confounding factors),我们可以分以下两步:

  • 叠加一个 “自然” 网格 (如行政边界) 或一个 “人工” 网格 (如六边形);
  • 计算某个网格内事件发生概率,这样就可以估算出高维 (网格单元和时间段) 的固定效应模型,或直接控制当地条件 (local conditions)。其中,事件发生在给定网格单元 g 和时间段 t 的概率如下:

上式中,AoEg,t 是虚拟变量,当网格 g 处于政策影响区内取值为 1,否则为0;β1 是对政策效果的估计;ϕg 和 τt 分别是网格单元和时间的固定效应;向量 X 为一组控制变量。

2.2 复杂 AoE 安慰剂检验

考虑到政策在实际实施的过程中,可能产生以下四种效应,即滞后效应、先导效应、持续效应、以及交互效应。此时,事件发生的概率方程分别为下式:

其中,系数 β2 反映了滞后的特定地区政策效果;系数 β3 和 β4 反映了在特定地区的政策实施时间段 (T_AoEg,t) 内的累积政策效果,该效果可能是递减的或递增的 (取决于 β4 的符号)。

2.3 时空 AoE 安慰剂检验

在安慰剂检验中,我们不仅可以在空间上构造虚假的政策作用区域,也可以在时间维度上构造假的政策实施时点。

  • 若 s<0,变量 AoEg,ts 反映政策提前 s 个时间段开始实施的情况;
  • 若 s>0,变量 AoEg,ts 反映政策推迟 s 个时间段开始实施的情况。

3. Stata 实例

3.1 命令介绍

aoeplacebo 命令可以实现地理安慰剂检验。其主要提供以下两种模式:

  • diagnostic 模式:首先将原始政策作用区域分别沿着位置、方向和大小三个维度修改,并可以指定最大设定偏误的程度;然后采用递增的方式接近最大程度,从而产生相应的安慰剂区域,之后基于安慰剂区域重新估计;最后,AoE 安慰剂测试结果以三种不同的诊断图显示,对应于三种区域错误设定。
  • permutation 模式:允许同时考虑三个维度 AoE 区域设定偏误。通过定义带宽来决定安慰剂区域与实际观测区域的偏差程度,并基于随机抽取的特定维度的偏差。该模式提供了在复杂面积不确定情况下的 AoE 估计分布。

3.1.1 命令安装

. *安装命令 aoeplacebo 
. local u1 "https://gitee.com/arlionn/data/raw/master/data01/aoeplacebo%20/aoeplacebo.ado"
. local u2 "https://gitee.com/arlionn/data/raw/master/data01/aoeplacebo%20/aoeplacebo.hlp"
. local u3 "`c(sysdir_plus)'/a"
. copy `u1' "`u3'/aoeplacebo.ado", replace
. copy `u2' "`u3'/aoeplacebo.hlp", replace
. *安装其他必要命令
. local pkgs "geoinpoly geodist kdens savesome ftools spmap"
. foreach pkg in `pkgs'{
    ssc install `pkg', replace
  }

3.1.2 命令语法

aoeplacebo design ,
    areadata(filename) celldata(filename) estimation(string)
    method(string)
    grid(varname) tid(varname) etime(varname) evariable(newvarname)
    [ position(# [#] [,*]) rotation(# [#] [,*]) scale([#] # [#]
    [,*]) replications(#) seed(#)
    complex(string) templacebo(# # [,*]) egridmatch(string)
    multiarea(varlist [,*])
    addstat(string) evreport(string) ovreport(string) tempreport(# #
    [,*]) permreport(string)
    cellpoly(filename) mapdb(filename) mapco(filename)
    progress(string) output(foldername [,*]) outname(string) ]

aoeplacebo 命令主要有五种类型的选项,即关于地理设置 (坐标和地图数据)、估计方程、安慰剂区推导、程序设定和结果输出。具体来看:

指定坐标和地图数据

  • areadata(filename):指定原始政策干预区 (AoE) 的坐标数据集,该数据集的结构必须遵循由 shp2dta 产生的坐标数据集;
  • celldata(filename):指定网格单元坐标数据集,可以是自然网格或一个人工网格 (由命令 spgrid 创建)。该数据集必须包含网格单元标识符,在选项 grid(varname) 中指定,以及网格单元中心点 (以 x_cent 和 y_cent 形式存储)。最后,选项 etime(varname) 中定义政策作用时间,如果 AoE 估计有任何控制变量,它们也应该包含在该数据集内;
  • cellpoly(filename):指定用于连接网格单元和安慰剂区域的坐标数据集;
  • mapdb(filename):用于绘制安慰剂区域的数据库数据集,前提是必须安装外部命令 spmap
  • mapco(filename):用于绘制安慰剂区域的坐标数据集。如果要创建所有创建的安慰剂区域的图形表示,则需要这个选项,为了能够使用这个功能,必须安装 spmap

设定估计方程

  • estimation(str):设定估计方程,括号内的设定将会被原封不动地执行。例如,设定一个高维网格单元固定效应模型 estimation(reghdfe Y gt AoE gt X, a(grid tid))
  • complex(str):用来设定前文提及的四种复杂的 AoE 政策效,详见下表。具体事例:
    • 滞后效应:加入滞后一期到滞后三期,即 complex(L(1/3).AoE_gt)
    • 先导效应:加入提前一期到提前三期,即 complex(F(1/3).AoE gt)
    • 持续效应:指定特定地区政策实施期,即 total sum of time periods (TS) 或 number of consecutive time periods (TC),或者同时包括两者 complex(TS AoE gt TC AoE gt)
    • 交互效应:持续时间的平方项可以整合为 complex(c.TS AoE gt##c.TS AoE gt),另外也可以与其他选项进行组合,如 complex(L(0/3).AoE gt c.L1.TS AoE gt##c.L1.TS AoE gt)

推导安慰剂区域

  • method(str):安慰剂区域的推导可以遵循以下两种方法:
    • degree:假定感兴趣的政策干预区域是在二维欧式空间,但是考虑到地球的形状,对现实的近似程度较低;
    • geodetic:该方案采用了更真实的地球三维模型;
  • position(#1 [#2][, distribution]):定义了 AoE 安慰剂区域如何位移,具体来看:
    • diagnostic 模式下,position(2 0.5) 的含义是原始 AoE 区域将沿着原始中心点的经度或/和纬度以 50 公里的增量移动,直到达到 200 公里的最大位移距离;
    • permutation 模式下,子选项 distribution 定义了随机分布是 uniform (the default) 或 centered
  • rotation(#1 [#2][, distribution]):定义了 AoE 安慰剂区域如何旋转,其他同上;
  • scale([#1] #2 [#3][, distribution]):定义了 AoE 安慰剂区域如何缩放,其他同上;
  • templacebo(#1 #2 [, seriesmargin]):定义了时空安慰剂区域设定方案;
  • multiarea(varlist [, fixpoint]):引入多个政策干预区域;

程序设定

  • grid(varname):指定识别唯一网格单元的变量;
  • tid(varname):指定识别一段时间内唯一观测值的变量。这个标识变量也必须包含在单元数据集中;
  • etime(varname):指定识别政策实施时间点的变量;
  • evariable(newvarname):为特定网格和时点的受到政策干预定义变量;
  • egridmatch(str):定义影响区中的网格单元如何被识别的链接程序,可以是中心点 centroid,也可以是顶点 vertex,这个程序需要安装外部命令 geoinpoly
  • replications(#)permutation 模式中抽样次数,这相当于在面积不确定性的三个维度上随机产生的安慰剂区域的数量;
  • seed(#):为排列组合设计中使用的所有随机抽样定义一个特定的种子,这样可以在重新运行程序时再现相同的结果。

结果输出

  • addstat(str):输出存储在 ereturn list 里额外的统计量;
  • evreport(str):使用附加选项 complex() 时必须要指定;
  • ovreport(varname):输出其他控制变量的结果 (系数估计值、标准误 和 P 值);
  • tempreport(#1 #2 [, line]):使用 templacebo() 时指定;
  • permreport(str):将此选项设置为 no ,结果不会输出 permutation 模式的 AoE 估计值的核密度图;
  • progress(str):显示进度,可以是 yes (默认)、nodetail
  • output(foldername [, replace]):指定所有的输出保存在一个文件夹下,用子选项 replace 覆盖现有的文件夹。在新生成的目录中,将创建三个子文件夹,即 aoe visualisations、aoe results 和 aoe areas;
  • outname(str):安慰剂结果输出的命名。

3.2 具体示例

3.2.1 基本 AoE 安慰剂测试

这两个案例均采用 diagnostic 模式,只考虑 AoE 区域位移变换的,将原始区域的中心点分别沿着网格以 0.5 单位 (0.1 单位) 为步长移动,最大移动量为 2 单位 (0.5 单位),结果分别输出到文件夹 AOE1a 和 AOE1b。


. *下载相关数据
. local u1 "https://gitee.com/arlionn/data/raw/master/
> data01/aoeplacebo%20/AOE_TEST.zip"
. local u2 "`c(sysdir_stata)'/AOE_TEST"
. cap mkdir `u2'
. cd `u2'
. copy `u1' "AOE_TEST.zip", replace
. unzipfile AOE_TEST, replace
. erase AOE_TEST.zip

. *运行命令
. aoeplacebo diagnostic, area("observed_area.dta")                ///
    cell("grid_time_incidents.dta")                               ///
    estimation(reghdfe I_incident Inc_parea, a(hex_ID mdate))     ///
    evar(Inc_parea) grid(hex_ID) tid(mdate) egrid(centroid)       ///
    etime(op_act) position(2 0.5) method(degree) progress(detail) ///
    output(AOE1a,replace)

. aoeplacebo diagnostic, area("observed_area.dta")                ///
    cell("grid_time_incidents.dta")                               ///
    estimation(reghdfe I_incident Inc_parea, a(hex_ID mdate))     ///
    var(Inc_parea) grid(hex_ID) tid(mdate) egrid(centroid)        ///
    etime(op_act) position(0.5 0.1) method(degree)                ///
    progress(detail) output(AOE1b,replace)         

可以看到红色圆点代表负向显著,绿色代表正向显著,灰色代表统计意义上不显著,圆点的大小对英语估计系数的大小。

3.2.2 包含三个维度变换的 AoE 安慰剂测试

该案例采用 diagnostic 模式,同时考虑了安慰剂区域在位置、方向和规模三哥维度上的变换,然后基于生成的安慰剂区域进行回归分析。在结果中,第一行左图中的黑色边框代表位移后的 AoE 区域,右图是基于不同区域进行估计的结果。

. aoeplacebo diagnostic, area("observed_area.dta")            ///
    cell("grid_time_incidents.dta")                           ///
    estimation(reghdfe I_incident Inc_parea, a(hex_ID mdate)) ///
    evar(Inc_parea) grid(hex_ID) tid(mdate) egrid(centroid)   ///
    etime(op_act) position(1.5 0.5) rotation(180 15)          ///
    scale(2 0.2) method(degree) progress(detail)              ///
    mapdb("map_db.dta") mapco("map_co.dta") output(AOE2,replace)

3.2.3 AoE permutation 安慰剂检验

permutation 模式下,允许同时考虑三个维度 AoE 区域设定偏误,并通过定义带宽来决定安慰剂区域与实际观测区域的偏差程度。在本例中偏差服从均匀分布,即中心点在 200 公里半径内被随机重新定位,然后区域被随机旋转 θ[45,45] 度,并根据比例因子 s[0.5,1.5] 重新缩放,生成的安慰剂区域如下图所示:

. aoeplacebo permutation, area("observed_area.dta")                 ///
    cell("grid_time_incidents.dta")                                 ///
    estimation(reghdfe I_incident aoe wave, a(hex_ID mdate))        ///
    evar(aoe) grid(hex_ID) tid(mdate) egrid(centroid) etime(op_act) ///
    complex(L(0/3).aoe F(1/3).aoe c.TS_aoe##c.TS_aoe)               ///
    evreport(aoe) method(geodetic) progress(detail)                 ///
    position(2) rotation(45) scale(0.5 1.5)                         ///
    replications(100) seed(123456789)                               ///
    mapdb("map_db.dta") mapco("map_co.dta") output(AOE3,replace)

通过设定随机抽样1000次,即 replications(1000),最终得到下图:

. aoeplacebo permutation, area("observed_area.dta")                  ///
    cell("grid_time_incidents.dta")                                  ///
    estimation(reghdfe I_incident aoe wave, a(hex_ID mdate))         ///
    evar(aoe) grid(hex_ID) tid(mdate) egrid(centroid) etime(op_act)  ///
    complex(L(0/1).aoe c.TS_aoe##c.TS_aoe)                           ///
    evreport(aoe) method(degree) progress(detail)                    ///
    position(1.5) rotation(45, centered) scale(0.5 1.5, centered)    ///
    replications(1000) seed(123456789)                               ///
    permreport(p=(0 0.5) r=(0 20) s=(0.75 1.25)) output(AOE4,replace)   

4. 参考资料

  • 项目网站 -Link-
  • 演示文稿 -Link-
  • Weisser R A. Area-of-Effect placebo tests[C]//London Stata Conference 2019. Stata Users Group, 2019 (04). -PDF-

5. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 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