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

位于两个相邻省份的税调企业经营环境大致相同,但是由于处于不同的省份境内,又可能受到不同的政策环境影响,因此以相邻省份的共同边界为界,可以构造很好的地理断点回归模型。 为了让大家能够更便捷的应用这种模型,我们特意为大家准备了这份“相邻省份对税调企业距离共同边界距离数据(RDD模型数据包)”。非常适合进行省份级别政策的效应评估。

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

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

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

#> # A tibble: 70 × 2
#> 省代码 相邻省
#> <dbl> <dbl>
#> 1 120000 110000
#> 2 130000 110000
#> 3 130000 120000
#> 4 140000 130000
#> 5 150000 130000
#> 6 210000 130000
#> 7 370000 130000
#> 8 410000 130000
#> 9 150000 140000
#> 10 410000 140000
#> # … with 60 more rows

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

再例如辽宁省-内蒙古自治区的:

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

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

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

  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")

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

# 读取两个区省的数据
read_sf("shp/140000-130000.shp") -> provpair

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

# 绘图
provpair %>%
slice(1) -> mainprov
provpair %>%
slice(2) -> touchprov
for (y in 1998:2014) {
ggplot() +
geom_sf(data = mainprov, aes(fill = 省), alpha = 0.3) +
geom_sf(data = touchprov, 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, 2),
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(mainprov$省, "——", touchprov$省,
"相邻省对税调 RD 模型(", y, "年)"),
subtitle = "数据计算&绘图:微信公众号 RStata",
caption = "注:散点大小表示税调距离两个共同省界的最小距离,图中的蓝色粗线表示两个省的共同省界") -> p
ggsave(plot = p, filename = paste0("图表/", y, ".pdf"), width = 10, height = 10)
}

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

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

*- shp 转换成 dta
local name = "410000-370000"
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. 仅仅把共同省界附近的税调企业纳入到模型中(例如剔除掉距离大于 50km 的,这样也可以减少同一家税调企业在模型中被多次使用);
  2. 剔除掉含税调企业过少的相邻省份对(例如小于 5 个的),过少的样本缺少代表性。

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

评论