绿色创新效率和绿色投资效率这两个词,这几年在实证研究里出现的频率越来越高。但凡涉及环境规制、产业升级、区域可持续发展这类选题,几乎绕不开要把这两个效率值算出来。而一旦要算效率,SBM-DEA模型就是绕不过去的一道坎——它处理非期望产出的方式比传统DEA干净得多,能同时把"好产出"和"坏产出"塞进一个框架里。我前后用这套方法处理过几批省级和地级市的面板数据,中间踩过的坑不算少,从指标方向搞反到代码跑出来一堆缺失值,再到结果解释时把效率值当成绝对水平来用,几乎每个环节都交过学费。这篇就把整套流程拆开讲清楚:数据怎么组织、Stata里怎么落地、结果怎么读、哪些地方最容易翻车。不管你是刚接触DEA的研究生,还是已经跑过几轮但结果总觉得不对劲的老手,下面这些内容应该都能对上你的某个痛点。
1. 先搞清楚SBM-DEA到底在算什么
很多人一上来就急着找代码、凑指标,结果模型设定错了,后面全白搭。SBM-DEA的核心逻辑其实不复杂,但它的几个关键设定直接决定了你最终算出来的效率值有没有意义,值得先花点时间捋清楚。
1.1 从径向DEA到SBM:为什么传统模型不够用
传统的CCR和BCC模型属于径向模型,它衡量效率的方式是"投入能按比例压缩多少"。这个思路有个硬伤:它假设所有投入和产出都按同一个比例变动,而且完全不考虑松弛变量。举个直观的例子,假设某地区用劳动和能源两种投入生产GDP,同时排放污染物。传统径向模型只会告诉你"投入整体还能压缩20%",但它不会告诉你到底是劳动过剩了还是能源过剩了,更不会告诉你污染物还能减多少。更麻烦的是,当存在非期望产出(比如污染排放)时,径向模型要么把它当普通产出处理(方向完全反了),要么直接忽略,两种做法都不对。
SBM(Slack-Based Measure)模型换了个思路,它直接对松弛变量建模——所谓松弛,就是实际值与前沿面之间的差距。投入的松弛代表可压缩的冗余,期望产出的松弛代表可扩张的空间,非期望产出的松弛代表可削减的余地。效率值等于1减去所有松弛占实际值的比例的平均。这样一来,每个维度的冗余和不足都被单独刻画出来了,不再被一个笼统的比例掩盖。我第一次从径向模型切到SBM时,最直观的感受就是效率值的分布变宽了——原来挤在0.9附近的一堆样本被拉开了差距,那些"隐性浪费"被识别了出来。
1.2 非期望产出怎么进模型:方向设定是命门
绿色创新效率和绿色投资效率这两个概念,本质上都要求把环境污染或碳排放作为非期望产出纳入模型。这里有个关键设定:非期望产出的方向必须和期望产出相反。期望产出(如专利数、GDP)越多越好,非期望产出(如COD排放、碳排放)越少越好。在SBM框架下,这通过给非期望产出赋予负向的松弛方向来实现。
实际操作中最容易犯的错,是把非期望产出当成普通产出直接放进产出列表。这样跑出来的结果,等于在奖励高污染——排放越多效率反而越高,完全违背直觉。我在早期一次复现中就犯过这个错,跑出来的效率值和文献对不上,排查了大半天才发现是产出方向设反了。所以你在整理数据时,一定要在变量命名上就做好区分,比如期望产出用y_good、非期望产出用y_bad,从源头避免混淆。
1.3 规模报酬假设:CRS还是VRS
SBM模型同样面临规模报酬假设的选择。CRS(不变规模报酬)假设所有决策单元都在最优规模上运行,算出来的是技术效率;VRS(可变规模报酬)则放松了这个假设,允许规模差异存在,算出来的是纯技术效率。对于省级或地级市面板数据,我一般建议用VRS,因为不同地区的经济体量差异巨大,强行假设它们都在最优规模上并不现实。用VRS的话,你还能进一步分解出规模效率(技术效率除以纯技术效率),多一个分析维度。
不过要注意,VRS下容易出现多个决策单元效率值为1的情况(即多个样本都落在前沿面上),这在样本量不大时尤其明显。如果你发现效率值为1的样本占比过高,可以考虑换用超效率SBM模型来进一步区分这些"有效"单元之间的差异。这个取舍没有绝对标准,取决于你的研究问题和样本特征。
2. 指标选取与数据组织:决定成败的前置环节
模型设定清楚了,接下来就是凑指标。这一步看着琐碎,但它对最终结果的影响比代码本身大得多。指标选偏了,代码写得再漂亮也是垃圾进垃圾出。
2.1 绿色创新效率的投入产出框架
绿色创新效率衡量的是"用多少资源投入换来了多少创新产出,同时控制了多少污染"。投入端一般包括人力投入和资金投入两块:人力用R&D人员全时当量,资金用R&D经费内部支出。产出端分两类,期望产出通常是专利申请数或授权数(专利比论文更能反映创新活动的市场化程度),非期望产出则用工业废水、废气排放或碳排放。
这里有个细节值得说:专利到底用申请数还是授权数?申请数反映的是创新活动的活跃程度,授权数反映的是创新质量,但授权有滞后性。我个人的做法是主回归用申请数,稳健性检验换授权数,两者结论一致才放心。另外,R&D经费如果跨年波动大,建议做存量处理(永续盘存法),不过面板数据里很多人直接用当期流量,这个要在论文里说明清楚,别默认读者知道你的处理方式。
2.2 绿色投资效率的投入产出框架
绿色投资效率的逻辑稍有不同,它关注的是"环保投入换来了多少环境改善"。投入端常用的是环境污染治理投资总额、或者细分到工业污染治理投资。产出端的期望产出可以是污染物削减量、或者环境质量改善指标,非期望产出则用当期剩余排放量。
这里有个容易混淆的点:绿色投资效率的"产出"到底该用削减量还是排放量?我的理解是,削减量是投资直接带来的正向结果,应该作为期望产出;而剩余排放量是投资后仍然存在的负向结果,作为非期望产出。两者同时纳入,才能完整刻画"投了钱、减了多少、还剩多少"的全貌。如果只放削减量,等于忽略了投资的边际效果递减问题。
2.3 面板数据的结构要求与常见格式错误
SBM-DEA在Stata里跑面板数据,对数据格式有明确要求。最基本的是平衡面板——每个决策单元在每一期都要有完整观测。如果某个地区某年缺了数据,要么插值补齐,要么剔除该地区,不能留着空缺直接跑,否则代码会报错或者悄悄给你算出错误结果。
另一个高频错误是决策单元编号重复或混乱。面板数据里每个地区应该有一个唯一且稳定的ID,年份变量也要规范。我见过有人把地区名直接当ID用,结果名称里带空格或特殊字符,读入后ID错位,效率值全串了。稳妥的做法是单独建一列数值型ID,从1开始顺序编号,地区名另存一列仅作标签。数据整理完,跑之前先xtset id year确认一下面板结构是否被正确识别,这一步花不了几秒钟,但能省掉后面大量排查时间。
| 效率类型 | 投入指标 | 期望产出 | 非期望产出 |
|---|---|---|---|
| 绿色创新效率 | R&D人员全时当量、R&D经费内部支出 | 专利申请数 | 工业废水/废气排放量、碳排放 |
| 绿色投资效率 | 环境污染治理投资总额 | 污染物削减量 | 当期剩余排放量 |
3. Stata落地:从数据读入到效率值输出
代码这块我不打算只贴一段黑箱脚本让你复制粘贴,而是把每一步在干什么讲清楚,这样出了问题你能自己定位。
3.1 环境准备与命令安装
Stata本身没有内置SBM-DEA命令,需要借助外部命令。目前用得比较多的是sbmeff或者基于dea命令的扩展。安装方式很简单,在命令窗口输入:
ssc install sbmeff, replace如果ssc连不上,也可以手动下载ado文件放到个人ado目录下。装完之后用help sbmeff确认一下命令是否可用。这里提醒一句:不同版本的命令参数名可能有差异,跑之前务必看一眼帮助文档里的选项说明,别照着旧教程的参数硬套。
3.2 数据读入与面板结构确认
假设你的数据存为green_efficiency.dta,读入后先做结构检查:
use "green_efficiency.dta", clear xtset id year xtdescribextdescribe会告诉你面板是否平衡、每个单元有几期观测。如果显示不平衡,先别急着跑模型,回去把缺失值处理掉。确认无误后,把投入、期望产出、非期望产出分别存成矩阵或指定为变量列表,方便后面调用。
3.3 模型参数设定与运行
以sbmeff为例,一个典型的VRS、含非期望产出的设定大致如下:
sbmeff input_var1 input_var2 = output_good : output_bad, /// rts(vrs) dmu(id) time(year) saving(eff_results.dta)这里=左边是投入,:左边是期望产出,右边是非期望产出。rts(vrs)指定可变规模报酬,dmu和time分别指定决策单元和时间变量。跑完之后效率值会存到你指定的文件里。第一次跑建议先用小样本(比如三五个地区)试一下,确认输出结构符合预期,再上全样本。全样本跑起来可能比较慢,尤其是决策单元多、时期长的时候,耐心等,别中途打断。
3.4 结果导出与初步检查
效率值出来后,先做几项基本检查:效率值是否都在0到1之间(超效率模型可能大于1,普通SBM不会);有没有大量缺失;效率值为1的样本占比多少。如果发现效率值异常集中或者大量为1,回头检查指标单位是否统一、非期望产出方向是否设对。我习惯把结果merge回原始面板,用summarize和tabstat按年份、按地区分组看一眼分布,确认没有离谱的异常值再进入分析阶段。
4. 结果解读与论文写作中的高频误区
代码跑通只是第一步,怎么解读结果、怎么在论文里呈现,才是真正拉开差距的地方。这一块我见过太多似是而非的写法。
4.1 效率值的相对性:别当成绝对水平用
SBM-DEA算出来的效率值是相对效率,是相对于样本中构造出的前沿面而言的。效率值为0.8,意思是"在现有样本中,该单元距离最优前沿还有20%的改进空间",而不是"该地区只发挥了80%的绝对潜力"。这个区别在写作时特别重要。我审过一些稿子,直接把效率值当绝对绩效排名,说"某地效率0.6说明其绿色创新水平处于及格线",这是典型的误读。正确的表述应该是"相对于样本前沿面,该地尚有40%的改进空间"。
另外,效率值不能跨样本比较。你这批数据算出来的0.8,和另一篇文献里的0.8,因为前沿面不同,根本没有可比性。所以文献对话时,重点应该放在趋势、排名变化和影响因素上,而不是纠结绝对数值的高低。
4.2 效率分解与动态变化的呈现方式
如果用VRS,记得把技术效率分解成纯技术效率和规模效率,这样能看出低效率到底是因为管理水平不行还是规模不经济。呈现上,我建议至少做三张表:分年份的效率均值趋势、分区域的效率对比、效率值的核密度分布(看动态演进)。核密度图能直观展示效率分布的移动和极化趋势,比单纯看均值有信息量得多。
如果要做动态分析,可以考虑Malmquist指数,它能分解出技术进步和技术效率变化。不过Malmquist对数据质量要求更高,样本期太短或者数据波动大时结果不稳定,用之前先想清楚是否必要。
4.3 稳健性检验的几种务实做法
效率类研究的稳健性检验,常见做法有几种:换投入产出指标(比如专利授权数替代申请数)、换模型设定(CRS换VRS、或换超效率SBM)、换样本期或剔除极端值。我个人的经验是,至少做两种不同维度的检验,而且要在正文里说清楚每种检验针对的是什么疑虑。比如换指标是为了排除指标选取的偶然性,换模型是为了排除设定敏感性,两者逻辑不同,不能混为一谈。
还有一点,如果稳健性检验后核心结论变了,别藏着掖着,老老实实讨论为什么变。效率类结果对指标和模型设定本来就敏感,结论不稳定是常态,如实报告反而显得严谨。
5. 那些年我踩过的坑与排查思路
前面讲的都是"应该怎么做",这一节讲讲"实际做的时候会出什么幺蛾子"。这些坑大多不会在教程里出现,但几乎每个人都会撞上一两个。
5.1 效率值全为1或者大量缺失
这是最让人抓狂的情况。效率值全为1,通常意味着所有决策单元都被判定为有效,前沿面退化成了一个点。原因可能是投入产出指标太少(维度不够撑起前沿面)、样本量太小、或者指标间高度共线。排查顺序:先看指标数量是否少于决策单元数量的三分之一(经验法则),再看指标间相关系数是否过高,最后检查是否有指标单位量级差异过大导致数值计算问题。
大量缺失则多半是数据本身有缺失值,或者某个指标存在负值(SBM对负值处理有限制)。回去用misstable summarize查缺失,用summarize查负值,逐个定位。
5.2 结果和文献对不上但找不到原因
这种情况我遇到过不止一次。排查链路一般是:先核对指标定义是否和文献一致(同名指标口径可能完全不同),再核对模型设定(CRS还是VRS、是否含非期望产出、方向设定),然后核对样本范围(年份、地区、是否剔除异常值),最后核对软件实现(不同命令对同一模型的数值处理可能有细微差异)。我建议养成一个习惯:拿文献里公开的一小部分数据或描述性统计,先复现它的均值趋势,对上了再往下做自己的分析。这一步能帮你排除掉大部分设定层面的错误。
5.3 面板不平衡与异常值的处理取舍
不平衡面板在现实数据里太常见了。处理方式无非三种:插值补齐、剔除缺失单元、或者用能处理不平衡面板的模型。插值要谨慎,线性插值在中间年份缺失时还算合理,端点缺失就别硬插了。剔除单元会损失样本,如果剔除的是关键地区,结论可能受影响,要在论文里说明。
异常值方面,效率值本身对极端值敏感。我一般先看箱线图和散点图,对明显离群的观测,先核实数据录入是否有误,确认无误后考虑缩尾处理(比如1%和99%分位)。但缩尾要在稳健性检验里报告,不能悄悄做了不说。
5.4 代码跑得慢或者中途报错
决策单元多、时期长的时候,SBM-DEA的计算量不小,跑几个小时是常事。如果中途报错,先看报错信息指向哪个变量或哪一行,最常见的是变量名拼写错误、变量类型不对(比如把字符串当数值用)、或者矩阵维度不匹配。跑之前把变量列表单独存成global,能减少手误。另外,跑大样本前先用set matsize调大矩阵容量,避免因为默认容量不够而报错。
6. 从效率值到影响因素分析:下一步怎么走
算出效率值只是研究的起点,真正有意思的是解释效率为什么有高有低。这一步的衔接做得好,整篇论文的逻辑才完整。
6.1 效率值作为被解释变量的回归设定
最常见的做法是把效率值作为被解释变量,跑Tobit或者面板固定效应模型。这里有个技术细节:效率值被截断在0到1之间(或0到正无穷,超效率情况下),普通OLS可能有偏,Tobit更合适。但如果效率值大量为1,Tobit的估计也会受影响,这时候可以考虑用分数响应模型或者直接对效率值做logit变换后再回归。
解释变量方面,常见的有环境规制强度、产业结构、对外开放程度、研发投入强度等。设定时注意控制地区固定效应和年份固定效应,否则遗漏变量偏误很难避免。
6.2 机制分析与异质性讨论的切入点
如果要做机制分析,可以考虑效率值影响的中介渠道,比如技术创新、产业集聚、资源配置优化等。异质性方面,按区域(东中西)、按城市规模、按资源禀赋分组回归是常规操作。分组时注意样本量,组内样本太少时结论不可靠,宁可少分几组。
还有一个容易被忽略的点:效率值的动态变化可能比静态水平更有解释力。用效率值的差分或者增长率做被解释变量,有时能挖出静态分析看不到的结论。这个思路在文献里不算主流,但如果你的数据支持,值得一试。
6.3 数据与代码的可复现性整理
最后说一句实在话:效率类研究的可复现性一直是个问题,很大程度上是因为指标口径和代码细节没交代清楚。我现在的习惯是,把数据清洗、指标构造、模型运行、结果导出拆成几个独立的do文件,每个文件开头写清楚输入输出和依赖关系,最后用一个主控do文件串起来。这样别人拿到你的代码能直接跑,你自己过几个月回头看也不至于抓瞎。数据文件里保留原始变量和构造变量的对照说明,别嫌麻烦,这是给自己省事。
整套流程走下来,从指标设计到结果解读,每个环节都有需要拿捏的分寸。SBM-DEA不是那种"跑出数就完事"的工具,它的价值在于逼着你想清楚每个投入产出维度的经济含义。我自己的体会是,模型跑得顺不顺,八成取决于前期指标和数据整理做得扎不扎实,代码本身反而没那么玄乎。真要说有什么诀窍,就是每次跑完先别急着看结论,花十分钟做一遍基本检查——效率值范围、缺失情况、分布形态——这十分钟能帮你挡掉后面大部分的返工。