位于两个相邻省份的工企经营环境大致相同,但是由于处于不同的省份境内,又可能受到不同的政策环境影响,因此以相邻省份的共同边界为界,可以构造很好的地理断点回归模型。 为了让大家能够更便捷的应用这种模型,我们特意为大家准备了这份“相邻省份对工企距离共同边界距离数据(RDD模型数据包)”。非常适合进行省份级别政策的效应评估。
首先我们找到了中国所有的相邻省份对(基于 2019 年中国省级行政区划),一共是 70 组:
附件中的 2019年中国相邻省对.xlsx 文件。
readxl:: read_xlsx( "2019年中国相邻省对.xlsx" )
之前我们分享过 1998~2014 年中国工企地理位置数据,可以从这里下载:https://rstata.duanshu.com/#/brief/course/183f77fb6a5d46b7ba06f30bd0ea0147 (里面的 高德地图结果合成面板 数据)。通过提取每个相邻省份对的工企数据并计算每个工企距离共同边界的距离就可以得到这个数据包了,例如 410000 和 370000 的:
再例如 500000 和 420000 的:
图中的散点表示工企,散点越小表示距离共同边界越近。
为了方便大家使用,我们将每个省份对的数据分别存放:
一共 70 个文件夹(部分相邻省份对没有工企被删除了),每个文件夹包含如下内容:
工企距离共同边界距离数据.dta
工企距离共同边界距离数据.xlsx
绘图代码.R
图表(文件夹)
line-shp(文件夹)
shp(文件夹)
其中 工企距离共同边界距离数据.dta 是供 Stata 读取的,里面包含了这两个省份的工企数据及其距离共同边界的距离(里面有 gqid 变量,可以和从 https://rstata.duanshu.com/#/brief/course/1c0d065e272c46b49cc528a445c2d3d9 下载的数据进行匹配得到含全部变量的工企数据)。
数据中的距离单位是 km。
工企距离共同边界距离数据.xlsx 是供 Excel 打开的文件,内容和上面的一样。
绘图代码.R 文件是用来绘图的,不过绘图前需要把 song.otf 文件移到工作目录下:
library( tidyverse) library( sf) 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 格式的,使用类似下面的绘图语句就可以绘制了:
clear allcd "~/Desktop/相邻省对工企距离共同边界距离数据(RDD模型数据包)/Stata绘图代码/410000-370000/" use "工企距离共同边界距离数据.dta" , clear encode 省, gen (county)save 工企距离共同边界距离数据.dta, replace 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 }
希望这份数据包能够帮助大家发论文~
建议 为了建立更好的模型,给大家提供如下建议:
仅仅把共同省界附近的工企纳入到模型中(例如剔除掉距离大于 50km 的,这样也可以减少同一家工企在模型中被多次使用);
剔除掉含工企过少的相邻省份对(例如小于 5 个的),过少的样本缺少代表性。
点击这里跳转到 RStata 短书平台获取附件:省份版:相邻省份对的工企与共同边界距离数据 (地理断点回归模型数据包)
评论