指标来源与背景
虚拟集聚度(Virtual Agglomeration Index,简称 Vag)是一种用于衡量城市间经济关联程度的指标。该指标由宋林等学者提出(参见《虚拟集聚与城市经济韧性》),其核心思想是:一个城市的经济发展不仅取决于自身条件,还受到周边城市的辐射影响。
数据来源 本教程使用的数据包括:
新增企业数据:1949~2023年各省市区县、行业新增企业数量统计.dta
注销企业数据:1970~2023年各年各省市区县、各行业注销公司数量面板数据.dta
行政区划数据:2021行政区划/市.shp(用于计算城市质心坐标)
数据处理基于工商注册信息,由 RStata 数据中心整理。
Stata 计算代码 环境设置与数据读取 *- 设置工作目录 cd "/Users/ac/Desktop/使用 Stata 测算各城市虚拟集聚程度" clear set more off set maxvar 5000
第一步:计算城市质心坐标 使用 shp2dta 命令的 gencentroids() 选项直接提取城市的几何质心坐标:
shp2dta using "2021行政区划/市.shp" , data("市_data.dta" ) coor("市_coord.dta" ) genid(cityid) gencentroids(city) replace use "市_data.dta" , clear rename 市 citynamekeep cityid cityname x_city y_citydestring cityid, replace save "city_centroids.dta" , replace
说明:
gencentroids(city) 会生成 x_city 和 y_city 变量,表示城市质心的经纬度坐标
genid(cityid) 为每个城市生成唯一 ID
第二步:处理新增企业数据 use "1949~2023年各省市区县、行业新增企业数量统计.dta" , clear drop if missing (成立年份)rename 新增注册企业数量 newcountcollapse (sum ) newcount, by (成立年份 省份 城市 行业门类)rename 成立年份 yearrename 城市 cityrename 省份 provincerename 行业门类 industryrename newcount cum_newsort province city industry yearby province city industry: gen cumsum_new = sum (cum_new)save "new_summary.dta" , replace
第三步:处理注销企业数据 此处代码需下载讲义材料查看~
第四步:合并计算存续企业数 use "new_summary.dta" , clear merge 1:1 province city industry year using "quit_summary.dta" , nogeneratereplace cumsum_new = 0 if missing (cumsum_new)replace cumsum_quit = 0 if missing (cumsum_quit)gen surviving = cumsum_new - cumsum_quitreplace surviving = 0 if surviving < 0save "firms_merged.dta" , replace
第五步:汇总 IT 行业数据 local it_sector "信息传输、软件和信息技术服务业" use "firms_merged.dta" , clear gen IT_firms = (industry == "`it_sector'" ) * survivingcollapse (sum ) total_surv = surviving (sum ) IT_count = IT_firms, by (year city province) save "city_year_data.dta" , replace
第六步:计算区位熵 此处代码需下载讲义材料查看~
第七步:匹配城市坐标 use "city_year_lq.dta" , clear rename city citynamemerge m :1 cityname using "city_centroids.dta" , keepusing(x_city y_city) update nogenerate drop if missing (x_city)drop if year >= 9999save "city_year_lq_coord.dta" , replace
第八步:构建距离矩阵 use "city_centroids.dta" , clear rename cityid cityid_irename cityname cityname_irename x_city lon_irename y_city lat_icross using "city_centroids.dta" rename cityid cityid_jrename cityname cityname_jrename x_city lon_jrename y_city lat_jgeodist lat_i lon_i lat_j lon_j, sphere gen (dist_km) gen weight = 1 / dist_kmreplace weight = 1 if dist_km == 0 | missing (dist_km)save "distance_matrix.dta" , replace
第九步:计算虚拟集聚度 use "city_year_lq_coord.dta" , clear levelsof year, local (years)use "vag_final.dta" , clear drop if missing (city) | missing (year)destring year national_IT national_total, replace format year national_IT national_total total_surv IT_count %12.0grename year 年份rename city 城市rename total_surv 总企业数rename IT_count IT企业数rename national_IT 全国ITrename national_total 全国总rename nat_IT_ratio 全国IT集聚度rename city_IT_ratio 城市IT集聚度rename LQ 区位熵rename Vag 虚拟集聚度gsort 年份 城市save "vag_results.dta" , replace export delimited using "vag_results.csv" , replace
Stata 绘图代码 环境设置与配色 clear all set more off cd "/Users/ac/Desktop/使用 Stata 测算各城市虚拟集聚程度" set scheme lightrstata cap mkdir "picdir" local caption_src = `"数据来源:RStata 数据中心,根据工商注册信息计算得到"' local subti_txt "数据处理 & 绘制:微信公众号 RStata" local mapdata_nhb "`c(pwd)'/map-data" local mapdata "`c(pwd)'/map-data" *- 配色方案 local c1 = "254 212 57" local c2 = "112 154 225"
图1:各城市虚拟集聚度历年趋势 use "vag_results.dta" , clear keep if 年份 >= 1990gen is_muni = 0replace is_muni = 1 if inlist (城市, "北京市" , "上海市" , "天津市" , "重庆市" )levelsof 城市, local (all_cities) sep(" " )local cmd "tw" foreach city in `all_cities' { local cmd `"`cmd' (line 虚拟集聚度 年份 if 城市 == `"`city'"' , sort lc(gs12) lw(*0.2))"' } 此处代码需下载讲义材料查看~ gr export "picdir/01_各城市虚拟集聚度历年趋势.png" , replace width(4800)
knitr:: include_graphics( "picdir/01_各城市虚拟集聚度历年趋势.png" )
图2:2023年城市分布地图 use "vag_results.dta" , clear keep if 年份 == 2023gen city_match = 城市replace city_match = "北京" if 城市 == "北京市" replace city_match = "上海" if 城市 == "上海市" replace city_match = "天津" if 城市 == "天津市" replace city_match = "重庆" if 城市 == "重庆市" replace city_match = subinstr (city_match, "市" , "" , .)save /tmp/city_data_2023.dta, replace use "`mapdata'/chinacity2021mini_db.dta" , clear gen city_match = subinstr (市, "市" , "" , .)merge 1:m city_match using /tmp/city_data_2023.dta, keepusing(虚拟集聚度) keep (master match) nogenerate replace 虚拟集聚度 = -1000 if missing (虚拟集聚度)_pctile 虚拟集聚度 if 虚拟集聚度 != -1000, n (8) local r1 = string (`r (r1)', "%9.3f" )local r2 = string (`r (r2)', "%9.3f" )local r3 = string (`r (r3)', "%9.3f" )local r4 = string (`r (r4)', "%9.3f" )local r5 = string (`r (r5)', "%9.3f" )local r6 = string (`r (r6)', "%9.3f" )local r7 = string (`r (r7)', "%9.3f" )sum 虚拟集聚度 if 虚拟集聚度 != -1000local maxv = string (`=r (max)+0.1', "%9.3f" )此处代码需下载讲义材料查看~ gr export "picdir/02_2023年各城市虚拟集聚度分布地图_带邻国.png" , replace width(4800)
knitr:: include_graphics( "picdir/02_2023年各城市虚拟集聚度分布地图_带邻国.png" )
点击这里跳转到 RStata 短书平台获取附件:名师讲堂|使用 Stata 测算各城市虚拟集聚程度
评论