相邻区县对的税调与共同边界距离数据 (地理断点回归模型数据包)

位于两个相邻区县的税调企业经营环境大致相同,但是由于处于不同的区县境内,又可能受到不同的政策环境影响,因此以相邻区县的共同边界为界,可以构造很好的地理断点回归模型。

为了让大家能够更便捷的应用这种模型,我们特意为大家准备了这份“相邻县对税调企业距离共同边界距离数据(RDD模型数据包)”。非常适合进行区县级别政策的效应评估。

首先我们找到了中国所有的相邻县对(基于 2019 年中国区县级行政区划),一共是 8228 组:

附件中的 2019年中国相邻县对.xlsx 文件。

readxl::read_xlsx("2019年中国相邻县对.xlsx")

#> # A tibble: 8,228 × 2
#> 县代码 相邻县
#> <dbl> <dbl>
#> 1 110102 110101
#> 2 110105 110101
#> 3 110106 110101
#> 4 110105 110102
#> 5 110106 110102
#> 6 110108 110102
#> 7 110106 110105
#> 8 110108 110105
#> 9 110112 110105
#> 10 110113 110105
#> # … with 8,218 more rows

之前我们分享过 1998~2014 年中国税调企业地理位置数据,可以从这里下载:https://rstata.duanshu.com/#/course/76d38022cd004b09b2aa09647936beb0。通过提取每个相邻省份对的税调企业数据并计算每个税调企业距离共同边界的距离就可以得到这个数据包了,例如丰台区-西城区的:

再例如西城区-东城区的:

图中的散点表示税调企业,散点越小表示距离共同边界越近。

为了方便大家使用,我们将每个县对的数据分别存放:

一共 8110 个文件夹(部分相邻县对没有税调企业被删除了),每个文件夹包含如下内容:

  1. 绘图代码.R

  2. 税调距离共同边界距离数据.dta

  3. line-shp(文件夹)

  4. shp(文件夹)

其中 税调距离共同边界距离数据.dta 是供 Stata 读取的,里面包含了这两个区县的税调企业数据及其距离共同边界的距离(里面有 sdid 变量,可以和从 https://rstata.duanshu.com/#/course/76d38022cd004b09b2aa09647936beb0 下载的数据进行匹配得到含全部变量的税调数据)。

数据中的距离单位是 km。

绘图代码.R 文件是用来绘图的,不过绘图前需要把 song.otf 文件移到工作目录下:

library(tidyverse)
library(sf)
# 设置字体
# 首先把 song.otf 文件移到工作目录下,然后运行下面的代码:
library(showtext)
showtext_auto(enable = TRUE)
font_add("songti",
regular = "song.otf",
bold = "song.otf",
italic = "song.otf",
bolditalic = "song.otf")

# 读取税调企业距离数据
readxl::read_xlsx("税调企业距离共同边界距离数据.xlsx") %>%
st_as_sf(coords = c("经度", "纬度"), crs = 4326) -> maingq

# 读取两个区县的数据
read_sf("shp/110102-110101.shp") -> countypair

# 读取共同边界数据
read_sf("line-shp/110102-110101commonline.shp") -> commonline

# 绘图
countypair %>%
slice(1) -> maincounty
countypair %>%
slice(2) -> touchcounty
for (y in 1998:2014) {
ggplot() +
geom_sf(data = maincounty, aes(fill = 县), alpha = 0.3) +
geom_sf(data = touchcounty, aes(fill = 县), alpha = 0.5) +
geom_sf(data = commonline, color = "#709ae1", size = 2) +
geom_sf(data = subset(maingq, 年份 == y),
aes(size = 距离相邻县对共同边界的最小距离,
color = 县), alpha = 0.9, stroke = T) +
scale_fill_manual(values = c("#ff847c", "#99b898"), name = "") +
scale_size_continuous(range = c(0.01, 7),
name = "距离相邻县对共同边界
的最小距离(km)") +
scale_color_manual(values = c("#ff847c", "#99b898")) +
guides(color = "none") +
theme_modern_rc(base_family = "songti",
subtitle_family = "songti",
caption_family = "songti") +
labs(title = paste0(maincounty$县, "——", touchcounty$县,
"相邻县对税调企业 RD 模型(", y, "年)"),
subtitle = "数据计算&绘图:微信公众号 RStata",
caption = "注:散点大小表示税调企业距离两个共同县界的最小距离,图中的蓝色粗线表示两个县的共同县界") -> p
ggsave(plot = p, filename = paste0("图表/", y, ".pdf"), width = 10, height = 10)
knitr::plot_crop(paste0("图表/", y, ".pdf"))
}

另外考虑到很多小伙伴可能不会 R 语言,所以我还把绘图数据保存成了 shp 格式的,使用类似下面的绘图语句就可以绘制了:

* 生成 Stata 图表
clear all
cd "~/Desktop/相邻县对税调企业距离共同边界距离数据(RDD模型数据包)/Stata绘图代码/110102-110101/"
use "税调企业距离共同边界距离数据.dta", clear
encode 县, gen(county)
save 税调企业距离共同边界距离数据.dta, replace

* shp 转换成 dta
local name = "110102-110101"
shp2dta using "shp/`name'.shp", database(`name'_db) coordinates(`name'_coord) genid(ID) gencentroids(centroid) replace
shp2dta using "line-shp/`name'commonline.shp", database(`name'commonline_db) coordinates(`name'commonline_coord) genid(ID) replace

use `name'_db, clear
encode 县, gen(group)

cap mkdir "Stata图表"
forval y = 1998/2014 {
grmap group using `name'_coord, id(ID) ///
clmethod(custom) clbreaks(0 1 2) ///
fcolor("255 132 124%30" "153 184 152%30") ///
line(data(`name'commonline_coord) ///
color("112 154 225") size(*3)) ///
point(data(税调企业距离共同边界距离数据.dta) x(经度) y(纬度) ///
prop(距离相邻县对共同边界的最小距离) by(county) ///
select(keep if 年份 == "`y'") ///
fcolor("255 132 124%80" "153 184 152%80") size(*0.3)) ///
label(data(`name'_db) x(x_centroid) y(y_centroid) label(县)) ///
leg(off) ti("`=县[1]'——`=县[2]'相邻县对税调企业 RD 模型(`y'年)") ///
subti("数据计算&绘图:微信公众号 RStata") ///
caption("注:散点大小表示税调企业距离两个共同县界的最小距离,图中的蓝色粗线表示两个县的共同县界", size(*0.6)) ///
graphr(margin(medium))
gr export "Stata图表/`y'.pdf", replace
}

希望这份数据包能够帮助大家发论文~

建议

为了建立更好的模型,给大家提供如下建议:

  1. 剔除跨省的相邻县对(不同省份的企业经营环境可能会有其他的不同因素);
  2. 仅仅把共同县界附近的税调企业纳入到模型中(例如剔除掉距离大于 50km 的,这样也可以减少同一家税调企业在模型中被多次使用);
  3. 剔除掉含税调企业过少的相邻县对(例如小于 5 个的),过少的样本缺少代表性。

点击这里跳转到 RStata 短书平台获取附件:相邻区县对的税调与共同边界距离数据 (地理断点回归模型数据包)

评论