☰
排污权交易机制与上市公司TFP:DID实证复现全流程解析
2026/10/12 3:46:35 网站建设 项目流程

最近在复现一篇关于排污权交易机制与上市公司全要素生产率的实证论文时,我把整个流程重新走了一遍:从数据清洗、变量构造,到双重差分(DID)回归、TFP估算、平行趋势检验、安慰剂检验,再到机制分析和异质性讨论。整个过程没有想象中顺利,中途踩了不少坑,但也正是这些坑让我把这篇论文的识别逻辑看得更清楚了。

这篇论文的核心其实是一套标准的微观实证流程:以试点政策作为外生冲击,用上市公司数据构造双重差分(DID),识别排污权交易机制对企业全要素生产率(TFP)的因果效应。论文层面的创新点主要集中在两方面——一是用准自然实验而不是简单的截面比较来识别政策效果,二是用多套TFP测度方法做交叉验证,让结论不至于依赖于某一种估计方法。

如果你是环境经济学、产业经济学方向的研究生,或者正在做企业效率、绿色金融相关实证研究,这篇复现笔记能帮你理清从原始数据到基准回归表格的完整链路。我会把数据口径、模型设定、TFP算法、稳健性检验这些环节的关键细节展开来讲,也会把自己实际复现时遇到的问题直接写出来,希望你少走弯路。

1. 论文思路与机制拆解

1.1 排污权交易机制到底做了什么

排污权交易是一种典型的市场型环境规制工具。它的基本逻辑是:监管者设定一个区域或行业的污染物排放总量上限,再把排放配额分配或拍卖给企业;企业如果减排成本低,可以减少排放并卖出省下的配额获利;减排成本高的企业则可以购买配额来弥补自身的减排压力。

这种机制和传统“命令—控制”型规制最大的区别在于激励结构。传统规制靠罚款、限产、关停这些外部压力倒逼企业,企业只要达到标准就不再有动力进一步减排;而排污权交易给减排行为赋予了价格信号,企业每减少一单位排放都能获得实际收益,这就把“被逼着做环保”变成了“主动寻找减排空间”。

回到论文里,试点政策在不同地区、不同时间的推行节奏是不一样的。有的地区先试点,有的地区后试点,还有的地区一直没纳入。这个时间差和地区差,恰好构成了双重差分所需要的变异来源。换句话说,论文不是简单比较“纳入试点”和“未纳入试点”两类企业的TFP均值,而是利用“纳入前后”和“试点地区/非试点地区”两个维度的交错差异来做因果识别。

另一个值得思考的问题是:为什么用中国的上市公司而不是所有企业?原因很直接——上市公司的财务数据披露规范、指标连续性强,可以方便地构造TFP所需的各种投入产出变量;同时,上市公司的规模普遍较大,受环境规制的影响显著,更容易观测到政策效应的痕迹。正因为如此,论文以中国上市公司作为样本,既保证了数据可得性,也提升了统计检验的效率。

1.2 为什么选TFP作为核心指标

全要素生产率衡量的是产出增长中不能被资本、劳动等要素投入增长解释的部分,通俗地说就是“同样的投入能产出更多”的综合效率。TFP上升意味着企业管理改善、技术进步或资源配置优化,是衡量企业长期竞争力的核心指标。

环境规制对TFP的影响在理论上有两种对立观点。一种观点认为,规制会提高企业合规成本,挤占研发资金,从而降低TFP;另一种观点认为,规制压力会倒逼企业通过工艺升级、产品升级寻找新的盈利空间,进而带来“创新补偿”,反而提升TFP。排污权交易作为一种市场化工具,理论上有更大可能触发后一种机制,因为企业可以把减排视为一种“可以获利的技术改造机会”,而不是单纯的成本负担。

用TFP而不是利润或产值来做被解释变量,还有一个实证层面的考虑:利润和产值受价格波动、市场需求等短期因素干扰太大,政策冲击的边际效应容易被噪声淹没。TFP则通过生产函数把投入产出关系剥离出来,更接近企业“真实效率”的信号,也更容易与既有文献进行横向比较。

所以你会看到,论文的基准回归表格里往往先用营业收入、人均产值这类直观指标,然后再换成几种TFP指标。这样做既能让读者建立直观感受,又能把核心结论锚定在更干净的效率指标上。如果TFP指标上政策效应显著为正,那政策效果的解读就比单纯看利润变化更有说服力。

1.3 DID识别框架的基础逻辑

双重差分(Difference-in-Differences,DID)是这篇论文的主力方法。它的核心思想是:用试点地区企业在政策实施前后的变化,减去非试点地区企业在同一时期的变化,剩下的“净变化”就是政策效应。

DID成立的关键在于两个假设。第一,平行趋势假设——如果没有试点政策,处理组和对照组的TFP应当按相同趋势变化。第二,政策外生性——企业无法自主选择是否进入试点,试点规则也不针对特定企业的经营状况。

我第一次读这篇论文时,花了很长时间才理解为什么作者要把样本时间往前和往后各拉几年。往前拉,是为了展示处理组和对照组在政策实施前趋势平行;往后拉,是为了展示政策效应的持续性。这不仅是格式要求,更是DID识别策略的“生死线”。如果政策前两组趋势已经明显不同,那政策后的差异就不能归因于政策本身。

论文里还用了不少辅助手段来强化识别,比如PSM-DID、安慰剂检验、排除同期其他政策干扰等。这些内容我放在第四节详细展开。这里先建立整体框架:数据准备→基准DID→稳健性检验→机制分析。这是顶刊实证论文的标准动作,也是你复现时一定要按顺序走完的流程。

2. 数据获取与变量构造

2.1 数据来源与版本

复现的第一步永远是确认数据口径。论文使用的通常是上市公司财务数据库,包括资产负债表、利润表、现金流量表以及公司基本信息、行业分类等。在复现时,我建议你先锁定主数据源,再按年份逐期导出,不要直接使用别人整理好的“一站式数据集”,因为很多衍生字段的构造口径并不透明。

需要重点确认的口径包括:固定资产净值是否已扣除累计折旧、员工人数用的是期末数还是全年平均、营业收入是否含税、研发支出在哪个科目下披露。这些细节直接决定TFP测算的准确性。我第一次复现时,固定资产净值少扣了累计折旧,结果LP法和OP法算出的TFP相关系数只有0.6左右,后来逐项核对才发现是口径偏了。

还有一点容易被忽视:数据库在个别年份的财务指标名称会有变化,比如研发投入在早期年报中被归入管理费用,后期才单列。如果你的样本区间跨越了这个时点,务必用统一规则重新构造研发强度指标,而不是直接用数据库给定的研发费用字段,否则异质性分析结果会出现意外的断档。

2.2 处理组与控制组的划定

处理组是试点覆盖地区内的上市公司,对照组是非试点地区的上市公司。这个划定看起来简单,实际操作中最容易踩坑的地方在于“试点名单的动态变化”:某个城市可能先被纳入试点,后来又扩大覆盖范围;有的企业总部注册地虽然在试点城市,但主要生产地在非试点城市。

我复现时的做法是:以企业注册地为划分依据。这样做的好处是注册地信息在上市公司数据库里非常稳定,几乎不存在缺漏;生产基地信息虽然更精确,但很多公司并不披露完整的产能布局,硬要用它做划分会损失大量样本,也会引入新的测量误差。

另一个需要处理的细节是“政策时点”。论文中的政策时点通常取试点正式启动文件发布的年份,而不是企业首次实际参与排污权交易的年份。处理组企业在政策时点后统一赋值为1,即使它实际上到第二年才真正发生交易。这种做法在DID框架下是合理的:政策冲击度量的是“被纳入试点”这件事本身对企业整体预期和行为的影响,而不是“实际交易量”带来的效应。

2.3 核心变量与协变量的构造

被解释变量分为两类:一类是产出类指标,比如营业收入、劳动生产率;另一类是TFP。TFP的具体测算方式我放到第三节详细展开,这里先说一个原则:不同的TFP方法对投入产出变量的要求不同,建议在数据准备阶段就把产出去向调整、从业人员数、固定资产原值/净值、中间品投入等字段一次性整理干净。

下表是我在复现时整理出的TFP测算所需核心变量,格式可以直接参考:

变量类别常用取法注意事项
产出(Y)营业收入若用增加值口径需调整折旧与中间投入
劳动(L)年末从业人数前后年份口径必须一致
资本(K)固定资产净额确认是否已扣除累计折旧
中间品投入(M)营业成本相关科目构造口径复杂,需要逐项核对
代理变量中间投入或投资额OP法用投资额,LP法用中间品投入

解释变量是政策交互项,即“是否试点地区 × 政策是否实施”。它的构造只需要两列0/1变量相乘,但要注意:试点状态不应因为筛选顺序不同而改变。我习惯把试点地区名单和维护政策年份的两个表格放在项目根目录下的单独文件夹里,代码运行时从外部读入,这样任何时候重跑都是同一套口径。

协变量方面,常见的有企业规模(总资产取对数)、资产负债率、现金流比例、企业年龄、股权集中度、行业竞争度等。为什么要加这些?因为DID只要求处理组和对照组满足平行趋势,但在有限样本中,两组的企业特征往往不完全可比,加入协变量可以吸收一部分组间差异,提高估计精度。需要特别注意的是,协变量必须是政策实施前的特征,或者政策实施后不受政策影响的变量,不能把同时受政策冲击影响的变量放进去,否则会引入“坏控制”问题。

2.4 清洗与剔除规则

样本清洗是整个复现过程最耗时但最不能省的一步。我的标准流程是:剔除金融类公司、剔除当年上市或当年退市的公司、剔除关键变量缺失的样本、剔除资不抵债的观测值、对连续变量做上下1%的缩尾处理。

有个细节值得单独提醒:缩尾处理在构造交互项之前还是之后完成,会影响最终系数的稳定性。我个人的惯例是——先构造TFP,对TFP和所有协变量做1%缩尾,然后再生成交互项。这样做的好处是,极端值不会通过乘法结构扩散到其他变量上。反过来,如果先构造交互项再统一缩尾,某些极端观测的交互项会被一起压缩,反而扭曲政策效应的估计。

另外,金融类公司和ST公司的处理也要谨慎。有的文献会直接剔除ST,有的会保留但加入ST哑变量控制。复现时一定要看原文脚注里的样本筛选规则,不能想当然。如果你复现得到的样本量和原文差异超过1%,第一反应不是检查代码,而是检查筛选规则是否一致。

3. 实证策略与实现

3.1 DID模型设定

论文基准模型可以写成这样的形式:

TFP_it = α + β × (Treat_i × Post_t) + γX_it + μ_i + λ_t + ε_it

其中,Treat_i是处理组虚拟变量(试点地区=1,否则=0),Post_t是政策实施年份虚拟变量(政策后=1,否则=0),交互项的系数β就是本文最关心的政策效应。μ_i表示企业固定效应,λ_t表示年份固定效应,X_it是一组随时间变化的企业特征。

为什么要同时控制企业和年份两个维度的固定效应?因为只控制处理组虚拟变量的时候,它吸收的是试点地区和非试点地区之间恒定的差异;只控制年份虚拟变量的时候,它吸收的是所有企业共同的时间趋势。但现实中不同企业有各自的“底色”,比如管理层能力、技术基础、组织文化;不同年份也有全行业层面的宏观冲击,比如原材料价格波动、汇率变动。固定效应恰好能把这些恒定的组间差异和共同冲击从误差项中剥离出来。

聚类标准误的层级在DID里是一个重大选择。论文通常会聚类到处理层面,即城市或省份层面,而不是企业层面。原因是同一地区内企业的干扰项存在相关性,如果不处理,标准误会严重低估。不过,按城市聚类通常要求处理组城市数量不能太少,否则标准误也会向下偏误。我在复现中遇到按城市聚类时聚类数量不足的情况,解决方案是改用省份聚类,并在脚注里说明两种聚类层级的结果方向一致。

3.2 TFP的三种测算方法

论文复现中常见的TFP方法有四类:OLS法、固定效应法、OP法和LP法。OLS法最简单,直接对生产函数取对数回归,但问题是存在同时性偏差——企业当年的生产率冲击会影响当年的投入决策,导致系数估计有偏。OP法用投资额作为生产率冲击的代理变量,缓解了同时性偏差,但投资额在很多上市公司样本中缺失严重。LP法改用中间品投入做代理变量,数据可得性好,成为后续文献的主力方法。

LP法的核心思路是:设定生产函数为Y = A × L^βL × K^βK × M^βM,取对数后通过两阶段GMM估计各投入要素的弹性,残差就构成lnTFP。实际操作中,中间品投入的构造需要用到营业收入、营业成本、折旧摊销等科目,口径稍有不同就会导致生产率排序明显变化。

方法代理变量优点主要问题
OLS无简单直接同时性偏差严重
固定效应法无控制个体不随时间变化特征无法完全解决投入内生性
OP法投资额缓解同时性偏差投资额缺失多
LP法中间品投入数据可得性好中间投入口径敏感

需要提醒的是,TFP估计是有“选择”的。不同方法估计出来的TFP数值上不可直接比较,但它们的相对排序应当高度相关。复现时,一定要同时算至少两种TFP,并把它们的相关系数和分布展示在附录里。如果LP法和OP法算出来的TFP相关系数低于0.7,就要回头检查投入变量是否构造错了。

3.3 Stata实现步骤

我整个复现过程是在Stata里完成的。数据合并的流程是:先读入上市公司财务数据,按证券代码和年份匹配试点名单;然后生成Treat、Post和交互项;接着用LP法估算TFP;最后进入DID回归。

* 1. 合并数据 use 上市公司面板数据.dta, clear merge m:1 城市代码 using 试点城市名单.dta, keep(1 3) keepusing(是否试点) gen Post = (年份 >= 政策启动年份) gen Treat = (是否试点 == 1) gen DID = Treat * Post * 2. 变量构造 gen lnY = ln(营业收入) gen lnL = ln(从业人员数) gen lnK = ln(固定资产净额) gen lnM = ln(中间品投入) gen lnAge = ln(公司年龄) * 3. LP法估计TFP ssc install prodest prodest lnY, free(lnL) proxy(lnM) state(lnK) method(lp) predict tfp, resid * 4. DID基准回归 reghdfe tfp DID 企业规模 资产负债率 现金流 公司年龄, absorb(证券代码 年份) vce(cluster 城市代码) * 5. 输出结果 est store m1 esttab m1 using 基准回归.rtf, b(3) se(3) scalars(N r2) replace

当然,上面的代码是示意性的。prodest命令的优势在于支持LP、OP、ACF等多种方法,而且可以直接输出TFP序列。我建议你先在一个干净的目录里把估计命令跑通,再回到主回归脚本中调用,避免因为命令内部报错污染整个流程。

3.4 基准结果解读

基准回归跑出来之后,第一件事是看交互项系数。如果系数显著为正,说明排污权交易试点政策确实提高了上市公司的TFP。但显著性只是第一步,还要看系数大小是否有经济意义。比如TFP上升0.02,意味着平均而言企业全要素生产率提升了约2%。放在制造业语境里,这已经是一个相当可观的变化。

解读时还要留意系数在不同TFP方法之间的稳定性。如果LP法得到的系数显著为正,OP法不显著,但方向一致,那处理效应可能对方法选择比较敏感,论文可以放在稳健性分析里详细讨论,不能直接下强结论。如果两种方法方向相反,那就不是方法选择问题了,而是数据本身有潜在问题,需要立刻回头查样本筛选规则。

基准回归之外,我一般还会顺手做三个辅助检验:一是把产出指标换成劳动生产率看结果是否一致;二是剔除试点当年的样本,看政策是否有提前效应;三是把政策时点提前一年做“伪回归”,如果在虚假时点上也显著为正,说明结果可能是某种共同趋势,而不是真实的政策效应。

4. 稳健性与机制检验

4.1 平行趋势检验

DID的第一道防线是平行趋势检验。最简单的方法是画图:以政策前一期为基期,把处理组和对照组每年TFP均值之差画出来,并附95%置信区间。政策前各期的置信区间应当包含0,政策后逐步偏移到0以外。

在代码里,这个检验的做法是用事件研究法展开:生成政策前3年、政策前2年、政策后1年、政策后2年、政策后3年与处理组的交互项,一次性放进回归。如果政策前交互项系数不显著,而政策后交互项显著为正,就说明DID的平行趋势假设基本成立。

我在复现中习惯把事件研究图放在正文中间,因为它比任何显著性表格都更直观。如果政策前各期系数不是全部不显著,而是有一期显著,也不要立刻放弃:需要看是否有明确的前瞻效应,比如企业在政策公布后、正式实施前就开始调整行为。这种情况下,合理的做法是把基准时点前移到“政策公布年份”,再重新做平行趋势检验。

4.2 PSM-DID与安慰剂检验

PSM-DID(倾向得分匹配+双重差分)是为了缓解处理组和对照组在可观测特征上的差异。做法是先用企业规模、资产负债率、行业、盈利能力等可观测变量估计每个企业进入试点的概率,也就是倾向得分,再按照倾向得分给处理组企业匹配对照组企业,最后只用匹配后的样本做DID。

注意,PSM并不能解决不可观测变量的选择性问题,所以论文里它通常只作为稳健性检验之一。复现时,我建议把PSM-DID和基准DID放到同一个表格中对比展示,如果两者的核心结论一致,读者才更有信心。

安慰剂检验有两个常用版本。一是“随机分配试点”:随机生成试点名单,重复1000次,记录每次的伪政策系数,画出系数分布。如果真实系数明显落在随机系数分布的尾端,说明真实效应很难用偶然性解释。二是“虚假政策时点”:选择一个政策尚未发生的年份作为伪时点,重新构造交互项,预期系数不显著。这个检验非常简单,却非常有说服力。

4.3 机制检验

论文核心结论是排污权交易提高了TFP,但读者一定会问“为什么”。机制检验通常围绕三条可能路径展开。

第一条路径是创新补偿。排污权交易的价格信号促使企业主动改造工艺、研发清洁技术来降低减排成本,研发投入和专利数量会随之上升。你可以把研发强度、专利申请量作为被解释变量重新回归,看交互项是否为正。第二条路径是资源配置。试点政策会加速淘汰部分高排放、低效率企业,把市场份额向高效企业集中,表现为行业内生产率分布变化或头部企业占比上升。第三条路径是成本转嫁。企业可能通过提高产品价格把减排成本转嫁给下游客户,这样对TFP的负向拖累被部分对冲。

机制检验的实证写法有几种。最常见的是“替换被解释变量”:将研发强度、专利申请量等变量作为新的被解释变量进行DID回归,看交互项系数方向;另一种是“分组交互”:把样本分成高创新能力和低创新能力两组,分别估计政策效应,比较系数大小。无论哪种写法,都要注意机制变量本身不能是政策的直接结果变量。如果“是否通过环保认证”本身就受政策影响,用它做机制变量会有内生性风险。

4.4 异质性分析

异质性分析回答的是“对不同类型的企业,政策效果有没有差异”。常见分组包括:企业规模、产权性质、行业污染强度、区域市场化程度、企业出口状态等。

实际操作中,分组的边界要明确可辩护。比如按企业规模分组,可以用中位数或三分位数;按污染强度分组,可以依据行业所属类别的平均排放强度来排名。复现时我踩过的坑是:分组变量如果和行业高度相关,会导致某一组内样本过少,回归结果极不稳定。此时可以先看组内处理组城市数量,如果处理组城市只有两三个,聚类标准误几乎必然失效,应当考虑合并分组或改用其他分组标准。

异质性结果还有一个隐藏的判断要求:不能只看两个分组是否都显著,还要看系数差异是否显著。正确做法是用全样本跑一个包含三重交互的模型,直接检验“政策效应在A组和B组之间的差异是否显著”,而不是简单比较两组回归系数的p值大小。

5. 复现踩坑记与排查技巧

5.1 数据合并时的错位

这是复现中最大的坑。上市公司的证券代码在不同年份可能会发生变更,尤其是有增发、吸收合并、重组等情形时。直接用证券代码做匹配,会导致同一家公司在不同年份被误判为不同公司。解决方法是额外匹配一个不随年份变化的公司标识码,或者用公司名称做辅助匹配。

另一个高频错位来自年份格式。财务数据库的年份字段常会出现“会计期间”和“报告期”两个概念,报告期可以是半年报、三季报或年报。如果直接把三季报当成年报去构造年度面板,TFP估计结果会偏差惊人。我个人的做法是:只保留年报记录,再用报告期类型字段做硬筛选,宁可损失样本量,也要保证时间口径干净。

5.2 聚类标准误与固定效应

聚类标准误的层级如果没有按“处理单元”处理,系数显著性很容易被夸大。很多初复现者默认按企业或年份聚类,这在处理组数量较多时问题不大,但处理组只有少数城市时,按企业聚类会高估t值。如果你发现论文里报告的是按城市聚类,而你按企业聚类算出来的显著性完全不同,那基本可以确定聚类层级设置错了。

固定效应方面有个更隐蔽的问题:如果同时使用企业固定效应和年份固定效应,但忽略了行业×年份交互项,那么行业层面的宏观冲击没有被充分吸收。在较长的时间面板中,行业层面的技术冲击、原材料价格冲击都会影响TFP。复现时试着加入行业×年份固定效应,看核心系数是否仍稳健。如果系数大幅缩小,说明一部分政策效应可能被行业冲击所混淆。

5.3 TFP的极端值和负值问题

TFP估计出来之后,经常会有个别观测值极端偏离或为负。TFP为负从经济学角度可以做解释,比如企业处于严重产能过剩状态;但在政策评估中,负的TFP往往来自错误设定——比如中间品投入出现负数、固定资产净额为0,或者员工数缺失被填充成0。

处理方式不是直接删除,而是逐条检查原值。我在复现中就遇到过一家公司的中间品投入因为并表调整变成负数,直接导致当年TFP为负的极端值。严格流程是:先检查数据问题,修正后可保留;确属极端值再做缩尾;缩尾后仍然不合理,再考虑删除。所有删除操作都要记录删除原因和观测数量,放到复现说明文件里。

5.4 代码版本管理与复现清单

顶刊论文的复现应该做到“可一键重跑”。我的做法是把整个流程拆成四个脚本:第一步数据清洗与合并,第二步变量构造,第三步TFP估计,第四步基准回归与检验。每个脚本开头都要写清楚输入、输出文件和重要的口径说明,这样即使过了半年再回来跑,也不需要重新猜当时在想什么。

版本控制建议从最开始就用。不需要复杂的工具,给每个版本加日期后缀即可,比如step1_data_v2_20240818.dta。如果你中间改了筛选规则,千万不要覆盖旧文件,因为后续很多检验需要回到旧的样本口径重新对比。

最后,准备一个简单的复现清单:数据来源及版本、样本区间、回归命令、结果版本、异常说明。这个清单看着繁琐,但当你真正写论文、应对审稿意见或者给合作者交付代码时,它会帮你省下大量时间。

我个人在复现整篇论文之后最大的体会是:顶刊论文的“顶”不仅在结论的新颖,更在于每一个环节都经得起推敲。数据筛选、TFP测算、DID识别,任何一步如果口径不严谨,最后的结果都可能出现天壤之别。如果你正准备复现或扩展这篇论文,建议你先从原始数据自己跑一遍基准回归,再逐项加入固定效应和稳健性检验;不要一上来就抄现成代码,那样看起来快,但你会错过整条实证链条里最有价值的部分。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询