做县域景区政策评估这几年,我最大的感受是:真正决定实证结果可信度的,往往不是回归模型选得多高级,而是把面板数据整理到什么程度。很多人在第一步“怎么定义处理组和对照组”上就含糊了,后面的平行趋势检验再漂亮,也只是在错误的地基上盖楼。今天这篇东西,我想完整复盘一下2002-2025年县域层面景区建设效果评估数据集的构建思路,以及基于这套数据做双重差分分析的完整流程。这里不涉及具体某个县的真实结果,只讲方法论和实操细节,适合正在做区域经济、文旅政策评估或者准备硕士论文的学生、研究人员参考。
数据集的构建表面上看是“找数据、填年份、跑回归”三件事,但实际操作中,时间范围的选择、景区认定标准的统一、县域经济指标的衔接,每一个环节都能让结果发生实质改变。我整理这套县域景区建设DID数据时,最常被问到的三个问题是:为什么起点定在2002年?景区名单到底按什么口径圈定?对照组能不能直接用没建景区的县?这些问题没有一个标准答案,但背后都有相对合理的处理逻辑,下面逐层拆开讲。
1. 数据集定位与研究设计思路
1.1 为什么选县域作为观察单元
做景区政策效应分析,有人用景区层面的微观数据,有人用地级市层面的宏观数据。县域是折中的、也是信息量最合适的观测单元。
景区层面的数据能精确到单个景点,但景区收益、客流、投资额往往分散在各个运营主体手里,公开渠道很难拿到连续十几年的完整台账。地级市层面数据好拿,但一个地级市通常包含多个县市区,景区建设对县域经济的拉动会被市区数据稀释,指标也不好归属。县域刚好卡在中间:县级统计年鉴、旅游统计公报、国民经济和社会发展统计公报都是连续发布的,景区建设行为也大多落在县域行政边界内。更重要的是,县域之间在经济体量、人口规模、产业结构上有足够差异,这为构造处理组和对照组提供了天然空间。
选单元这件事还有一个隐性好处:县级面板在固定效应模型下样本量充足。全国两千多个县级单元,2002到2025年就是二十多年的面板,样本量轻松过万。固定效应模型对样本量消耗很大,如果只用几百个景区做面板,严格控制个体和时间效应后自由度会很紧张,县域层面完全不存在这个问题。
1.2 时间范围2002-2025的设计逻辑
时间窗口定在2002到2025不是随意的。2002年前后,国内很多县域开始系统性地把景区建设纳入地方发展规划,景区评定、基础设施配套、宣传推介逐渐常态化。往前推到90年代,数据缺失严重不说,景区建设也更多是零散行为,很难构成“政策冲击”。
起点定在2002年还有一个数据可用性的考虑。县级统计年鉴从2000年以后电子化程度明显提高,旅游相关指标从2002年前后开始被比较规范地纳入统计口径。很多县从那时起才有连续可查的旅游收入、接待人次数据。再往前的数据靠人工翻阅纸质年鉴整理,误差大、效率低,而且不同县的统计口径差异巨大,强行拼接只会给后续回归引入噪声。
终点放在2025年,一方面是为了容纳最新的景区扩容、评级调整信息,另一方面也是考虑到研究周期。整理数据集的人通常希望把事件冲击后的观察窗口拉长,如果最后的景区认定发生在2023年,那么到2025年至少有两个完整的后续观测年,可以观察短期效应和中期效应。这是DID研究在时间维度上比较理想的配置。
1.3 双重差分方法在景区评估中的适用边界
DID不是万能的,县域景区建设评估用DID有它的前提条件,也有它的局限。
适用之处在于景区建设可以被看作一个“准自然实验”:各个县在2002到2025年之间陆陆续续建成或升级景区,每个县的“处理时点”不一样,这正好符合交错DID的设定。景区建设不是县域经济发展的必要条件,也不是所有县都同步推进,这就给了研究者一个对照组。
需要注意的边界也很明确。DID要求处理组和对照组在政策实施前有共同趋势,这一点在景区建设场景下尤其容易被违反。经济基础好、交通便利的县本来就更容易建景区,旅游收入原本就高于其他县,这种选择性问题不处理,DID估计出来的系数就会混杂“景区建设效应”和“县域基本面差异”。所以数据集构建阶段就要为平行趋势检验留足变量,不能等跑完回归再来想办法。
另一个边界是政策预期效应。如果某个县在景区正式开业前两三年就开始大规模基建、宣传预热,旅游数据可能提前上升,DID的“政策实施后差分”会把预期效应错误地当作建设效应的一部分。要处理这个问题,数据集里需要尽量记录景区项目的立项时间、开工时间、开业时间,而不是只看运营时间。
2. 核心变量定义与指标口径
2.1 处理变量:景区建设状态的认定标准
DID数据集里最核心的变量是“该县在第t年是否已经建成并运营某景区”,这个变量必须严格按时间变化赋值。操作上最大的坑是“建成时间”怎么定。
我建议采用三套时间口径,分别生成三个版本的处理变量,供敏感性检验使用。第一套是景区主管部门正式开业或对外售票的时间,这是最保守的口径;第二套是景区项目主体完工时间,一般能从政府工作报告或项目审批文件中找到;第三套是景区立项或签约时间,这个口径最宽松,容易把预期效应吸收进来。
口径选择直接影响处理组样本量和处理时点分布。如果某景区2008年立项、2011年完工、2012年正式运营,那么采用不同口径,该县的受处理年份就分别落在2012年、2011年和2008年。在回归里,这只是一个小改动,但对事件研究法的逐期系数影响很大。建议在首次跑主回归时使用官方开业时间口径,其他口径放在稳健性检验部分。
2.2 结果变量:经济效应与旅游效应指标
结果变量分两大类。一类是旅游直接指标,包括县级旅游总收入、接待游客总人次、A级景区数量、旅行社数量、星级酒店数量等。这类指标和景区建设的关系最直接,是机制验证的核心。另一类是县域综合经济指标,包括生产总值、人均生产总值、第三产业增加值占比、固定资产投资、财政收入、城乡居民人均可支配收入等。
旅游直接指标的问题在于统计口径调整频繁。很多县在某个年份把旅游统计范围从“景点门票收入”调整为“旅游综合收入”,前后不可比。另一个常见问题是文物、园林、林业部门管理的景区数据分散在不同机构,县级统计年鉴里经常出现缺值或口径突变。我在整理时通常对旅游收入做两类处理:一是取对数,二是用GDP平减指数折算成可比价格,三是对相邻年份差异过大的值逐条核对原始公报。
综合经济指标相对稳定,但要注意产业结构的“滞后效应”。景区开业第一年对GDP的拉动可能还不明显,旅游消费的乘数效应通常体现在两年之后。数据集里最好保留两三期滞后项的空间,不要只存当期值。
2.3 控制变量与固定效应变量
控制变量不是越多越好,但县域层面的基本特征变量必须齐备。我常用的控制变量组合包括:县域常住人口(取对数)、人均GDP(取对数、平减后)、财政自给率、第二产业占比、公路里程、距离地级市政府的公路距离。这些变量共同刻画县域的经济基础、财政能力、交通可及性,它们既可能影响景区建设概率,也可能直接影响旅游产出,不放就会漏掉重要混杂因素。
固定效应变量则包括县域虚拟变量、年份虚拟变量,以及更细化的“地级市×年份”联合固定效应。县域虚拟变量吸收所有不随时间变化的县域特征,年份虚拟变量吸收全国层面的共同冲击,比如旅游行业整体的景气波动、重要节庆活动的影响。“地级市×年份”联合固定效应用来控制同一地级市范围内县域共同面临的政策环境变化,加了这一层之后,识别策略更接近“同一时点、同一大区域内的景区建设县与非建设县”的对比。
数据表里另一个必不可少的字段是“县代码”,格式必须统一为六位行政区划代码。很多县级单元在2002到2025年之间经历过撤县设区、合并拆分,这些代码会让面板不平衡,必须在构建数据时做单元一致性处理。这个细节如果漏掉,后面merge各类统计年鉴时会频繁出现匹配不上或重复匹配的情况。
3. 处理组与控制组的构建方法
3.1 处理组构成的三种常见口径
处理组不是简单地把“有景区的县”都放进去。按照景区属性差异,我通常把处理组拆成三个层次。
最宽泛的口径是“县域内有A级及以上景区”,不管景区类型是什么。这个口径样本量大,但混杂因素也最多,因为A级景区中既有自然风光型,也有文博馆藏型,后者的客流规模和产业链条明显不同。第二种口径只保留大型综合类景区或主题型景区,这类景区投资规模大、带动面广,政策含义更强,但符合条件的县数会明显减少。第三种口径是“有景区且景区在样本期内进行过大规模升级改造或扩容”的县,这类县的处理效应可能更明显,适合做异质性分析。
在处理组名单确定前,我建议画一张“处理时点分布图”,看看各县受处理年份是不是集中在某几年。如果大多数县集中在某一两年内落地景区项目,那就说明推动力量来自上级统一政策而非县域自主决策,这时候DID的“交错处理”假设就受到挑战,需要慎重解释。反之,如果处理时点分散在十几年间,说明各县建设时序有差异,更适合交错DID。
3.2 对照组的挑选原则与匹配思路
对照组的挑选是整个数据集构建中最微妙的部分。不进行任何筛选、直接用“一直无景区”的县作为对照组,在逻辑上说得通,但样本形态可能差距很大。无景区县往往是偏远、海拔较高或人口流出严重的县,和有景区的县在经济结构上不太可比。
推荐的思路有两种。一种是保留全部无景区县作为候选池,但通过倾向得分匹配在每个处理时点前为处理县挑选形态接近的对照县。匹配变量采用滞后一期的县域GDP、人口密度、财政自给率、第二产业占比和公路里程,使用Logit模型估计倾向得分,采取近邻匹配或不带替换的最近邻匹配。另一种是干脆不做样本筛选,直接在全样本上跑双向固定效应模型,然后在稳健性检验里用PSM-DID做对照。实操中我倾向于第二种,因为第一种方法容易让研究者产生“人为筛选样本”的质疑,且匹配后的样本量损失有时很大。
无论采用哪种方式,数据集里都要保存候选对照县的全部变量,不要把尚未匹配的县直接删掉。后续做安慰剂检验、剔除部分样本时,这些“备选对照组”还能重新进入分析。
3.3 排除干扰事件与政策叠加
景区建设通常不是县域唯一的政策变化。样本期内,很多县同时经历了别的产业政策、交通项目落地、重大项目投产,这些都可能影响旅游收入或GDP。DID分析要求处理组和对照组在除景区建设以外的政策冲击上是可比的,但现实中很难完全保证,所以数据集构建阶段就要记录干扰事件。
比较典型的干扰项包括:县级行政中心搬迁(会改变县域经济结构)、高铁或高速公路设站(会大幅改变游客通达性)、大型工业园区投产(会影响GDP和就业)、其它类型景区或文旅项目同期落地(会造成多政策同期叠加)。这些信息逐项整理成一个“干扰事件清单”字段,在回归时做两类处理:一是把受干扰县在对应年份剔除或截断;二是把这些事件作为额外控制变量或分组依据。
这个环节最花时间,但也是整套数据集最有含金量的部分。因为绝大多数公开年鉴只报告了结果性数据,不会告诉你某个县当年发生了什么特殊事件。人工翻阅政府工作报告、重点项目建设清单、发改部门的审批公示是绕不开的工作。我在整理时大概估算过,这部分工作量占总工作量的三分之一以上。
4. 双重差分模型的系数解释与代码实现
4.1 双向固定效应模型的设定细节
标准的县域DID回归模型可以写成下面的形式:
Yit = α + Di政策后it × β + Xitγ + μi + λt + εit
其中Yit是县域i在第t年的结果变量(通常是取对数后的旅游收入或GDP),核心解释变量是“是否处于景区建成后状态”的0-1变量,β就是我们最关心的DID估计量。μi是县域固定效应,λt是年份固定效应,Xit是控制变量向量。
写代码时最需要注意的地方是“政策后状态”这个变量的生成逻辑。它不能用“数据表里是否有景区”来判断,而必须结合各县的受处理年份来生成。一个县在2002年没有景区,到2012年才开门迎客,那么它在2002到2011年取值0,2012到2025年取值1。这里如果只用一个截面识别变量直接合并到面板,就会把整个样本期都变成1,回归系数彻底失真。
代码生成时也要注意截面特征一致性。用Stata时,核心逻辑是先用merge把县级个体特征合并到面板数据上,再通过受处理年份变量生成相对时间变量。相对时间变量在分析中很有价值,它可以进一步支持事件研究法。
4.2 Stata环境下的实现步骤
以Stata为例,整理好的半成品数据应该包含四个关键变量:县代码id、年份year、县是否在某年受处理treat_time(未受处理的县取缺失值)、以及原始结果变量。基础实现代码如下:
* 生成各期政策后状态变量 gen post = (year >= treat_time) if treat_time != . replace post = 0 if treat_time == . * 双向固定效应DID xtset id year xtreg ln_tourism_income post ln_gdp_percapita ln_population fiscal_ratio industry_ratio road_density i.year, fe vce(cluster id) * 事件研究法:生成相对时间虚拟变量 gen rel_time = year - treat_time tab rel_time, gen(rel_) * 以相对时间-1期为基准,去掉首期和末期的完全共线项 xtreg ln_tourism_income rel_* ln_gdp_percapita ln_population i.year, fe vce(cluster id)事件研究法部分,虚拟变量rel_*中需要省略基准期。一般把相对时间-1期(即景区开业前一年)作为基准,并剔除相对时间小于某个阈值(例如-10)的样本避免共线性。如果看到的相对时间虚拟变量在政策前各期不显著,且系数围绕0波动,说明平行趋势假设基本成立。
这里再强调一个容易出错的地方:xtreg配合i.year表示吸收了全国共同年份效应,但县域固定效应已经在xtreg的fe选项里。另外,标准误要按县域聚类,因为同一个县在不同年份的扰动项大概率相关。如果不聚类,旅游收入这种高自相关的宏观变量会让标准误大幅低估,t值会虚高。
4.3 Python实现步骤与数据清洗参考
R或Python用户处理同一套数据时,逻辑完全一致。Python中更适合用linearmodels库的面板模型模块。实现思路是先把数据格式调整成Pandas的MultiIndex面板结构,再用PanelOLS估计。一个关键的操作点是“post”变量必须按各期处理时点动态生成,不能用当前截面信息直接展开。
关于数据清洗,有两点建议。第一,在对结果变量取对数前,先处理旅游收入为0或负值的样本。这类样本通常是统计口径调整产生的异常值,直接删除或设为缺失都可以,但不能用0强行取对数,否则会生成无穷大值。第二,年份字段和受处理年份字段都要定义成整数格式。曾经遇到过受处理年份是字符串格式的情况,合并时被Stata自动当作有序类别变量处理,后续生成相对时间变量时完全变形了,这点务必在清洗阶段统一。
5. 平行趋势检验与稳健性检验方案
5.1 平行趋势检验的实操做法
平行趋势检验是DID审稿人必然会看的内容,实操中绝不能只在正文里写一句“政策前系数不显著”。一张可靠的事件研究图要达到三个标准:政策前各期系数都不显著且置信区间包含0;政策前系数没有系统性的递增或递减趋势;政策后系数有相对明显的跳升(或下降,取决于研究假设)。
做得再细一点,可以分别对处理组中景区开业较早的县和较晚的县做平行趋势检验。因为不同批次处理县之间的趋势可比性可能不同,早批处理县附近可能有更多前期准备效应。另一个做法是检验“对照组内部的平行趋势”,把对照组再按是否靠近处理县分成两组,检验这两组之间在样本期内的趋势是否一致。这个检验如果通过了,能大幅增加平行趋势论证的说服力。
5.2 安慰剂检验与PSM-DID方案
安慰剂检验最常见的形式是随机分配处理时点。把每个处理县的真实受处理年份随机打乱,再重新跑DID回归,重复500到1000次,记录伪估计系数的分布。如果真实估计系数落在随机干扰系数的极端位置(比如大于95%分位数),说明真实效应不太可能只是随机波动。
另一种安慰剂检验是把处理时点整体前移(例如统一提前2年或3年),然后看“伪处理效应”是否显著。如果提前后的系数都显著,说明可能不是景区建设本身在起作用,而是处理县和非处理县之间本来就存在系统性差异。这个检验不需要额外数据,只是对同一套数据做很小的修改,是成本最低的稳健性检查之一。
PSM-DID则是在匹配后的样本上重新估计模型。匹配阶段通常选择处理县受处理前一年的特征作为匹配变量。这里有个容易犯的错误:在每一期都做动态匹配,而不是只做一次性的静态匹配。严格来说,交错DID应该在第一期初始年份匹配,或者在每个阶段重复匹配。实际操作中,大多数研究采取的是“第一次受处理前一年”的静态匹配,这个方法已经在很多权威应用中出现,基本被认可,但要在正文里写清楚匹配时点。
5.3 样本敏感性分析与子样本检验
样本敏感性分析主要围绕处理组口径展开。用第2节提到的三套时间口径分别生成处理变量,看主回归β的方向和显著性是否稳定。如果只有某一种口径下显著,其他口径下不显著,那结论的稳健性就要打个问号。
子样本检验方面,常用的分组维度包括:按景区所在县域的地形条件分类(山区县与非山区县)、按景区类型分类(自然风景类与人文类)、按县域经济体量中位数分组、按距离中心城市距离分组。分组的目的是看景区建设效应是否由某一类县域驱动。比如景区建设效应如果只在非山区县显著,而山区县不显著,背后的机制可能是景区外的住宿餐饮配套水平差异。
这里要提醒一点,子样本检验的分组变量必须来自外生特征或政策前特征,不能拿样本期内受影响的结果变量来做分组。例如用样本期平均旅游收入增长率中位数分组,逻辑上就有内生性嫌疑,审稿人会抓住这一点。
6. 常见问题与排查技巧实录
6.1 县域代码调整与面板错位问题
2002到2025年间,部分县的行政区划代码发生过调整。早期代码在重新编码后,如果直接和当前年度的区划代码合并,同一个县会变成两条不同的个体,固定效应模型等于给它们分别赋予了截距,面板信息直接断裂。
排查方法很简单:检查面板中同一个县域名称是否出现了两组完全不同的代码;检查每个代码的年份连续性是否覆盖完整样本期。如果发现间断,优先用当前代码统一历史年份。如果县域合并,通常按合并后的新单元聚合。这一步骤应该在数据预处理阶段完成,不要等到跑模型时才发现面板不平衡。
6.2 受处理年份缺失与处理组遗漏
部分县景区的开业年份在公开信息里查不到,受处理年份缺失会让该县在整个面板中始终取post=0,实际上被当作对照组。这种情况不报错,但会潜移默化地拉低DID估计值,属于“安静的偏误”。
处理办法是对缺失受处理年份的县做人工核对。优先查景区官网的资讯新闻、历年景区名录和当地文旅局的专题报道。实在查不到,可以在数据集里单独生成一个“受处理年份未知”的指示变量,在稳健性检验中剔除这些样本后再跑一遍模型。
6.3 结果变量的异常突变与缺值填补
旅游收入数据常有异常突变,比如某县旅游收入在一年间暴涨3倍,第二年又回落。这类突变大多对应统计口径变化或区域合并调整,而不是真实业务波动。直接在回归中使用原始值,会让取对数后的数据方差被少数异常值主导。
我常用的处理流程是:计算每个县旅游收入对数序列的相邻年份变化率,标记变化率超过100%或低于-50%的样本,再逐条对照统计公报原始数据。如果确认口径变化,无法还原旧口径时,就把该县在这个年份的值设为缺失值,而不是强行拆解。缺值填补方面,对于连续缺值不超过两年的县级旅游变量,可以用线性插值填充,但要在稳健性检验中证明填充方法对结果没有实质影响。
6.4 DID系数不显著时的排查路径
费了很大力气整理数据,跑完回归后DID系数不显著,这种情况非常多见。不要第一时间去改模型,先按下面几条路径按顺序排查。
第一,先看样本量。处理组县是否过少、对照组是否过多导致样本极度失衡。如果处理组只有几个县,系数本来就不容易显著,需要调整处理组口径或改用连续处理强度变量。第二,画事件研究图。如果政策前系数有上升趋势,说明平行趋势可能不成立,模型被前趋势拖累。第三,检查是否加入了过多的双向固定效应,导致处理变量与年份虚拟变量高度共线。第四,看结果变量是否取对数。景区建设对绝对量的影响可能是非线性的,取对数后的弹性估计在少数超大值存在时会失效。第五,换掉聚类层级,从县域聚类改成“地级市×年份”聚类,有时标准误会因为组内相关结构被错误设定而高估,换了聚类层级反而会得到更合理的置信区间。
7. 数据集后续扩展方向与个人经验总结
一套县域景区DID数据整理出来之后,能做的分析不止于“建景区对旅游收入有没有影响”。后续可以做机制分析,比如把结果变量换成住宿餐饮业从业人员数、县域固定资产投资额、农村居民收入结构,看看景区建设通过哪条路径传导到县域经济。也可以做政策叠加分析,把景区建设与交通基础设施开通的跨政策交互项放进模型,讨论互补效应还是替代效应。还可以做更细颗粒度的异质性分析,比如按景区等级、投资主体性质、运营模式分层回归。
我个人在反复整理了几套类似数据之后的体会是:数据集的价值往往不在变量数量多,而在关键事件的时间戳是否可靠。一个县到底是哪一年开始有了实质性的景区运营行为,比一百个控制变量更能决定DID结论的走向。建议大家在整理时建立一份“事件核验日志”,把每个县每个候选处理时间的证据来源、判定过程记录下来,这样无论后续怎么调整研究方向,数据的地基都能稳稳托住后续的分析工作。
最后再分享一个小技巧:处理组口径不确定时,先跑最小口径和最大口径两个版本的主回归,把两个结果的差距呈现在附录里。这种“透明化处理”看似给自己找麻烦,实际上能省掉很多审稿阶段的反复追问,而且能逼着你在研究设计阶段就把处理组定义想清楚。