ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Stata空间杜宾模型SDM全流程:从权重矩阵构造到效应分解实操指南

Stata空间杜宾模型SDM全流程:从权重矩阵构造到效应分解实操指南

空间计量这几年在实证研究里出现的频率越来越高,尤其是做区域经济、产业集聚、环境规制这类带地理属性的题目,审稿人几乎默认你要处理空间溢出效应。但很多人卡在一个尴尬的位置:知道要用空间杜宾模型,打开Stata却不知道从哪一步下手,检验做了一堆不知道看哪个,结果跑出来一堆系数不知道怎么解读。这篇就把从数据准备、空间权重矩阵构造、LM检验、LR检验、Hausman检验,到SDM估计、效应分解、稳健性检验的完整链路拆开讲清楚,每一步都说明白为什么这么做、参数怎么定、结果怎么看。适合刚接触空间计量、手头有一份面板数据、想在Stata里把SDM跑通并写进论文的人。

1. 先搞清楚SDM到底在解决什么问题

1.1 从OLS的失效说起

普通最小二乘法有个隐含假设:样本之间相互独立。做区域数据的时候这个假设基本站不住脚。相邻城市的GDP会互相影响,一个地方的污染排放会飘到隔壁,产业政策的效果会沿着交通网络扩散。这种"你中有我、我中有你"的关联,在计量上就叫空间自相关。

如果无视空间自相关直接跑OLS,后果不是系数稍微偏一点那么简单。空间滞后项被遗漏进误差项,会导致解释变量系数估计有偏且不一致,标准误也算不准,显著性检验基本失去意义。我见过不少初稿,区域数据直接上固定效应面板回归,结果核心变量显著得离谱,一加空间项就掉到不显著,问题就出在这里。

空间杜宾模型(Spatial Durbin Model,简称SDM)的思路是:因变量的空间滞后、自变量的空间滞后,两个都放进来。用公式表达就是:

$$y = \rho Wy + X\beta + WX\theta + \varepsilon$$

其中W是空间权重矩阵,$\rho$是因变量的空间自回归系数,$\theta$是自变量空间滞后的系数。这个设定比空间滞后模型(SAR,只有$Wy$)和空间误差模型(SEM,只有误差项空间相关)都更一般,因为它同时允许因变量和自变量产生空间溢出。这也是为什么很多论文把SDM作为首选设定——它嵌套了SAR和SEM,可以通过检验退化到更简洁的模型。

1.2 SDM、SAR、SEM三者的取舍逻辑

很多人纠结到底用哪个模型。我的经验是:不要一上来就拍板,让检验说话。标准的做法是先跑OLS,做LM检验判断是否存在空间自相关;如果存在,再分别做LM-lag和LM-error的稳健版本(Robust LM),看是滞后项显著还是误差项显著。两个都显著的情况下,SDM是更稳妥的起点,因为它不会因为遗漏某一类空间依赖而产生设定误差。

这里有个容易被忽略的点:LM检验是基于OLS残差做的,它只能告诉你"有空间依赖",不能直接告诉你"该用SDM"。真正决定要不要从SAR/SEM升级到SDM的,是后面的LR检验或者Wald检验——检验$\theta = 0$(退化为SAR)和$\theta = -\rho\beta$(退化为SEM)。两个原假设都被拒绝,才说明SDM是必要的。这个逻辑链条一定要在论文里写清楚,否则审稿人会问你凭什么用SDM。

1.3 什么数据适合上SDM

不是所有面板数据都值得上空间模型。我的判断标准有三条:第一,观测单元有明确的地理或经济邻近关系,比如地级市、省份、县域,或者企业之间的供应链距离;第二,样本量不能太小,截面维度至少几十个单元,时间维度三五年以上,否则空间权重矩阵的自由度吃掉太多,估计不稳;第三,核心解释变量本身有空间扩散的机制,比如环境规制、技术扩散、政策试点,这类变量天然会产生溢出,用SDM才有经济学意义。

反过来说,如果你的观测单元是随机抽样的个体、企业财务数据没有地理标签、或者研究问题本身不涉及交互影响,硬套空间模型就是给自己找麻烦。我见过把行业面板强行按省份匹配权重矩阵的做法,逻辑上说不通,跑出来的$\rho$也没法解释。

2. 空间权重矩阵:整个模型的地基

2.1 权重矩阵的三种常见构造方式

空间权重矩阵W是SDM的核心输入,它定义了"谁和谁相邻、相邻程度多强"。构造方式直接决定结果,所以这一步必须想清楚经济学含义,不能随便找个现成的矩阵套上去。

最常见的三类:

矩阵类型构造逻辑适用场景注意事项
邻接矩阵(0-1)地理接壤为1,否则为0行政区划清晰的省/市级数据孤岛单元(如岛屿)会出现全零行,需特殊处理
地理距离矩阵取距离倒数或倒数的平方连续地理单元,距离有经济含义距离单位要统一,避免量纲问题
经济距离矩阵以GDP、人口等经济指标差异构造研究经济关联而非纯地理溢出需说明为何选该指标,避免内生性争议

邻接矩阵最直观,但有个坑:如果研究区域里有不与任何单元接壤的"孤岛"(比如某些海岛城市),那一行全是0,Stata在标准化时会报错或者产生异常值。处理办法是手动给孤岛指定最近的一个邻居,或者改用距离矩阵。这个细节论文里一般不用写,但实操时必须处理,否则后面估计直接崩。

2.2 行标准化到底要不要做

这是新手问得最多的问题之一。行标准化的作用是让每一行的权重之和等于1,这样$Wy$就变成了邻居的加权平均,$\rho$的解释也更直观——因变量对邻居平均水平的响应程度。

做不做标准化,取决于你的研究目的。如果关心的是溢出的相对强度,行标准化是常规操作;如果关心的是绝对溢出规模(比如距离衰减的具体形态),保留原始距离权重可能更合适。但要注意:行标准化之后,矩阵不再对称,某些基于对称矩阵的检验(比如Moran's I的某些变体)需要调整。我的建议是,绝大多数应用经济学论文用行标准化,解释起来方便,审稿人也习惯这个设定。

在Stata里用spmatrix系列命令或者spatwmat(旧版)构造,行标准化用spmatrix normalize。如果用xsmle命令,它内部会自动处理,但你要清楚它做了什么。

2.3 权重矩阵的稳健性检验思路

审稿人经常质疑的一点是:你凭什么用这个权重矩阵?换个矩阵结果还成立吗?所以稳健性检验里几乎必做的一项就是替换权重矩阵。常见做法是主回归用邻接矩阵,稳健性检验换成地理距离矩阵或经济距离矩阵,看核心系数符号和显著性是否稳定。

我个人的习惯是至少准备两个矩阵,一个地理属性强的,一个经济属性强的,主回归用更贴合研究问题那个,另一个放稳健性部分。如果两个矩阵下结论方向一致,说服力会强很多;如果方向相反,那就要老实讨论为什么,而不是藏起来。

3. 检验链条:从LM到Hausman,一步都不能省

3.1 LM检验:判断要不要上空间模型

LM检验的原假设是"无空间自相关"。操作上,先跑一个普通的面板回归(可以是固定效应),然后对残差做LM检验。Stata里用estat lm(针对截面)或者空间面板命令自带的检验选项。

结果看两个统计量:LM-lag和LM-error。如果两个都不显著,说明空间依赖不明显,老老实实用普通面板模型就行,别硬上SDM。如果只有一个显著,比如LM-lag显著而LM-error不显著,倾向SAR;反之倾向SEM。如果两个都显著,进入下一步做稳健LM检验(Robust LM-lag和Robust LM-error),看哪个更稳健。

这里有个实操细节:LM检验对模型设定敏感,如果你在OLS里漏了重要的解释变量,残差里的空间相关可能来自遗漏变量而非真正的空间依赖。所以做LM检验之前,先把控制变量选好,别指望空间项来救设定误差。

3.2 LR/Wald检验:SDM能不能退化

前面说过,SDM嵌套了SAR和SEM。LR检验就是用来判断能不能退化:

  • 检验$H_0: \theta = 0$,如果拒绝,说明自变量的空间滞后不能省,不能退化成SAR;
  • 检验$H_0: \theta = -\rho\beta$,如果拒绝,说明不能退化成SEM。

两个都拒绝,SDM就是必要的。Stata里用lrtest对比嵌套模型,或者用xsmle之后的estat选项。Wald检验是LR的替代,渐近等价,报告哪个都行,我一般报LR,因为似然值直接可得。

这一步很多人偷懒跳过,直接上SDM,论文里也不交代。审稿人一看就知道你没做模型选择,很容易被要求补做。花十分钟跑一下,省得后面返修。

3.3 Hausman检验:固定效应还是随机效应

空间面板同样面临FE和RE的选择。Hausman检验的原假设是"随机效应估计一致",如果拒绝,用固定效应。空间模型里的Hausman检验比普通面板复杂一些,因为要处理空间滞后项的内生性,Stata的xsmle提供了hausman选项,或者用spregress之后的检验命令。

我的经验是:区域数据几乎都用固定效应,因为个体效应(比如某地的地理禀赋、历史基础)大概率与解释变量相关,随机效应的一致性假设很难满足。但还是要跑一下检验,报告出来,这是规范。如果Hausman统计量不显著,理论上RE更有效,但也要结合经济学判断,别机械照搬。

4. Stata实操:从数据到SDM估计

4.1 数据准备与面板设定

先把数据整理成标准面板格式:一个个体标识变量(比如city_id),一个时间变量(year),以及各变量。用xtset city_id year声明面板。检查一下是否有缺失值、异常值,空间模型对缺失值很敏感,一个单元某年缺数据,整个权重矩阵的对应行都要处理。

xtset city_id year xtdescribe summarize y x1 x2 x3

如果面板不平衡,xsmle能处理,但要注意权重矩阵的维度要和截面单元数严格对应。我踩过的坑:数据里有个城市中途改名,id变了,结果权重矩阵对不上,报错报了半天才找到原因。所以合并数据前先把id统一。

4.2 构造空间权重矩阵

以邻接矩阵为例,假设有N个单元,需要准备一个N×N的矩阵文件(可以是Excel或文本),然后用spmatrix导入:

spmatrix use W using weight_adj.txt, replace spmatrix summarize W spmatrix normalize W, normalize(row)

如果用xsmle,它接受wmat()选项指定矩阵名。注意矩阵的单元顺序必须和数据里的id顺序一致,这是最容易出错的地方。我的做法是先把id排序,再按同样顺序生成矩阵,生成后核对几个已知相邻的单元对,确认无误再往下走。

4.3 主回归命令与选项

xsmle是跑空间面板最常用的命令(需要先安装)。SDM的基本写法:

xsmle y x1 x2 x3, wmat(W) model(sdm) fe type(both) nolog

几个关键选项说明:

  • model(sdm)指定模型类型,也可以写sar、sem、sac;
  • fe固定效应,re随机效应;
  • type(both)表示个体和时间双向固定效应,type(ind)仅个体,type(time)仅时间;
  • wmat(W)指定权重矩阵;
  • nolog关闭迭代日志,跑大样本时能省不少屏幕输出。

如果要做效应分解(直接效应、间接效应、总效应),加effects选项:

xsmle y x1 x2 x3, wmat(W) model(sdm) fe type(both) effects nolog

效应分解是SDM的精髓,因为$\beta$和$\theta$单独看没有完整的经济含义,真正的边际效应要通过$(I-\rho W)^{-1}(I\beta + W\theta)$算出来。直接效应是自变量对本单元的影响,间接效应(溢出效应)是对其他单元的影响,两者相加是总效应。很多人只报$\rho$和$\beta$,不报分解效应,这是不完整的。

4.4 一个完整的命令流程示例

把前面的步骤串起来,一个典型的分析流程大概是这样:

* 1. 面板设定 xtset city_id year * 2. 普通面板回归(用于LM检验基准) xtreg y x1 x2 x3, fe * 3. 导入并标准化权重矩阵 spmatrix use W using weight_adj.txt, replace spmatrix normalize W, normalize(row) * 4. SDM估计(双向固定效应) xsmle y x1 x2 x3, wmat(W) model(sdm) fe type(both) effects nolog * 5. 保存结果 estimates store sdm_result * 6. LR检验:SDM vs SAR xsmle y x1 x2 x3, wmat(W) model(sar) fe type(both) nolog estimates store sar_result lrtest sdm_result sar_result * 7. LR检验:SDM vs SEM xsmle y x1 x2 x3, wmat(W) model(sem) fe type(both) nolog estimates store sem_result lrtest sdm_result sem_result

这套流程跑下来,模型选择、估计、检验都有了,论文的方法部分基本能交代清楚。

5. 结果解读:系数、rho和效应分解怎么读

5.1 rho的经济含义与显著性

$\rho$是因变量的空间自回归系数,衡量邻居的因变量对本单元的影响方向和强度。$\rho$显著为正,说明存在正向空间溢出,邻居水平高会带动本单元;显著为负,说明存在竞争或虹吸效应。$\rho$的绝对值一般不超过1(稳定性条件),如果估计出来接近1甚至超过1,要警惕模型设定问题或者权重矩阵构造不当。

解读$\rho$的时候别脱离研究背景。比如研究区域经济增长,$\rho$为正可以解释为增长的空间集聚;研究污染排放,$\rho$为正说明污染有扩散效应。同一个数值在不同语境下含义不同,论文里要结合机制说清楚。

5.2 直接效应、间接效应、总效应的区分

这是SDM解读的核心,也是最容易写错的地方。很多人把$\beta$直接当成直接效应,这是不对的。由于反馈效应(本单元影响邻居,邻居又反过来影响本单元)的存在,直接效应不等于$\beta$,间接效应也不等于$\theta$。

正确的解读框架:

  • 直接效应:某单元自变量变化1单位,对本单元因变量的平均影响,包含反馈回路;
  • 间接效应(溢出效应):某单元自变量变化1单位,对其他单元因变量的平均影响;
  • 总效应:直接效应加间接效应,即所有单元自变量同时变化1单位的总影响。

Stata的effects选项会直接输出这三个效应的点估计和标准误。报告的时候三个都要给,尤其是间接效应,往往是论文的亮点。如果间接效应显著而直接效应不显著,说明这个变量的作用主要通过空间扩散实现,这个发现本身就很有价值。

5.3 显著性判断与常见误读

效应分解的标准误是通过模拟(通常是Delta方法或蒙特卡洛)算出来的,和普通系数的标准误不是一回事。看显著性还是看p值或者置信区间,别拿$\beta$的显著性去推断间接效应的显著性,两者可能不一致。

一个常见误读:看到$\rho$显著就认为空间效应重要,但没看间接效应是否显著。$\rho$显著只说明因变量有空间依赖,不代表你关心的解释变量有显著溢出。真正的溢出要看间接效应的显著性。我审稿时经常看到这种混淆,写的时候务必分清。

6. 稳健性检验与常见报错处理

6.1 替换权重矩阵与子样本检验

稳健性部分至少做两件事:换权重矩阵、换样本区间或子样本。换矩阵前面说过,主回归用邻接,稳健性用距离或经济矩阵。子样本可以按区域拆分(东部/中西部)、按时间拆分(政策前后),看核心结论是否稳定。

如果换矩阵后核心变量符号翻转,不要急着删掉,先想想为什么。可能是不同矩阵捕捉的空间机制不同,比如地理邻接捕捉的是行政扩散,经济距离捕捉的是市场关联,两者结论不同反而能讲出更深的故事。当然,如果翻转得毫无逻辑,那就要回头检查数据或设定。

6.2 不收敛、矩阵奇异等报错

xsmle跑的时候常见几类报错:

  • 不收敛:迭代次数不够或者初值不好。可以加iterate(100)增加迭代次数,或者换个优化算法technique(bhhh)。样本小、权重矩阵稀疏时容易出现,实在不行考虑简化模型。
  • 矩阵奇异:通常是权重矩阵有全零行,或者某些单元在样本期内数据缺失导致矩阵维度不匹配。检查矩阵每一行是否至少有一个非零元素,检查id顺序。
  • 变量被omitted:双向固定效应下,不随时间变化的变量会被吸收,这是正常的,不是错误。如果核心变量被omitted,说明它在样本期内没变化,那就没法识别,得换变量。

6.3 论文写作中的报告规范

最后说下报告规范。方法部分要交代:权重矩阵怎么构造、为什么这么构造、是否行标准化;模型选择依据(LM、LR检验结果);FE还是RE及Hausman结果。结果部分要报:$\rho$、各变量$\beta$和$\theta$、三个分解效应及显著性、拟合优度(within R²或log-likelihood)。稳健性部分报替换矩阵和子样本的结果。

表格排版上,我习惯把主回归的直接、间接、总效应分三列并排,下面标注显著性星号,表注写清楚权重矩阵类型和固定效应设定。这样审稿人一眼能看全,不用来回翻。

空间杜宾模型这套流程,说复杂也复杂,说简单也就是几个命令的事。真正花时间的是想清楚权重矩阵的经济学含义、把检验链条走完整、把效应分解讲明白。这三件事做到位,SDM就不只是个跑数据的工具,而是能支撑你研究结论的分析框架。我自己的体会是,第一次跑通可能要折腾一两天,把流程固化成do文件之后,换个题目换个数据,半天就能出一版完整结果。建议你从一开始就养成写do文件的习惯,每一步加注释,后面复现和返修会省太多事。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进