帖内附件: spatial_demo.do(5,552 字节)、synthetic_region.csv(1,629 字节)、矩阵检查表.md(3,826 字节),共 3 个文件;需 Stata 15 及以上的 Sp 系列命令
类型: 原创 Stata 教学脚本+合成空间数据+自查清单
版本: 1.0(2026-10-22)
运行环境: Stata 15 及以上(Sp 系列命令);使用空间功能需相应授权
输入: 40 个虚构区域的平面坐标与两个解释变量
输出: 反距离权重矩阵(行标准化与谱标准化两版)、SDM 估计结果、直接/间接/总效应
示例: 8×5 网格布点的 40 个虚构区域
适用任务: 区域经济、财政、环境等横截面空间计量;把 OLS 升级为 SDM 的教学演示
验证情况: 脚本未在 Stata 中执行;坐标、距离矩阵与标准化属性由独立复算核对(对角线为 0、行和为
1、无孤立点)
空间杜宾模型不是"加一个空间滞后项"那么简单。它同时包含因变量的空间滞后 Wy 和解释变量的空间滞后 Wx,因此系数不能直接读成边际效应,必须做效应分解。而这一切的前提是:权重矩阵的行列顺序,和数据里的观测顺序严格对应。
空间杜宾模型多出来的那几个部件
普通回归假设每个地区相互独立。空间杜宾模型放开两个方向:本地区的 y 受邻居 y 影响(Wy,体现溢出与共同冲击),本地区的 y 也受邻居的 x 影响(Wx,体现邻居条件的连带作用)。写成命令就是
- spregress y_growth x_fiscal dens_control, gs2sls ///
- dvarlag(W) ivarlag(W: x_fiscal dens_control)
判断要不要用杜宾,不该只看拟合优度。先问两个问题:邻居的 x 在机制上是否可能影响本地 y?本地 y 与邻居 y 的相关,是真实的溢出,还是共同面临的区域冲击?前者支持杜宾,后者更接近误差项相关。
权重矩阵与标准化顺序
Stata 的 Sp 体系里,先用 spset 声明空间数据,再用 spmatrix create 建矩阵。附件用的是反距离矩阵:
- spset region_id, coord(coord_x coord_
- y) coordsys(planar)
- spmatrix create idistance W, normalize(row)
标准化方式有三种,spmatrix create 默认按最大特征值缩放(谱标准化):
- normalize(row):每行和为 1。ρ 的解释接近"邻居加权平均的边际影响",是应用研究里最常见的做法。
- normalize(spectral):保持矩阵的比例结构,只差一个标量倍数。
- normalize(minmax):按行和与列和的最大值缩放。
关键一点:行标准化和谱标准化下的 ρ 数值不能直接比较,换方式就要在表注里说明。附件脚本把两版都估一遍,就是为了让这个差异显形。
样本顺序错了,结果会整组反掉
权重矩阵不携带 ID,只有行列位置。W 的第 3 行第 7 列代表"第 3 个单位受第 7 个单位影响",至于第 3 个单位是谁,取决于数据集当前的行顺序。
所以有三条纪律:
- 先排序,再建矩阵。 附件脚本在 spset 之前先 sort region_id,把顺序固定下来。
- 中途删样本后必须重建矩阵。 drop if 之后,原来的第 17 行变成第 16 行,W 没变,模型就开始拿错邻居——而且不会报错。
- 不要为了"看起来整齐"重排数据。 需要按别的变量排序时,先 spmatrix export 存一份,或干脆重建。
这类错误最难发现:结果能跑出来、系数也有、显著性也有,只是解释全错。
系数不等于边际效应这件事
这是杜宾模型最容易被写错的地方。由于 Wy 的存在,某个地区 x 变化会通过邻居反馈回来影响自己,因此:
- 输出里 x_fiscal 的系数(β),不是"x 增加一单位对自身 y 的影响";
- W:x_fiscal 的系数(θ),也不是"邻居 x 对本地 y 的影响"的全部;
- 真正的边际影响要算 estat impact:直接效应、间接(溢出)效应、总效应。
论文里只报 β 和 θ、不报这三项,是空间杜宾模型报告中最常见的缺陷。附件脚本在估计之后立刻执行 estat impact,就是为了把这一步变成固定动作。
孤立点、坐标重复和其他坑
- 孤立点:某个单位没有任何邻居时,行权重全为 0,行标准化后出现空行,矩阵不可逆。建矩阵前先查最小距离,或设一个截断距离把远邻接进来。
- 坐标重复:两个单位坐标一模一样,反距离会除零。duplicates report coord_x coord_y 一行就能查。
- 单位不匹配:矩阵建的是 40×40,数据里有 41 个单位(多一个),或者反过来。Stata 会报维度不符,但如果你先建矩阵再删样本,就不一定报了。
- 距离单位:坐标的刻度决定权重的相对大小。经纬度和"公里"混着用,等于给不同区域换了尺子。
附件里有什么
spatial_demo.do 六段:读入与结构检查 → spset 与两种权重矩阵 → OLS 对照 → SDM 估计与 estat impact → 换标准化方式再估 → 报告要点。数据是 40 个虚构区域,生成规则里内设 ρ=0.
4、β_x=0.
8、β_dens=0.3,估计值围绕这几个数波动属于抽样误差。
矩阵检查表.md 是配套的自查清单:五道建矩阵前的检查、样本顺序的三条纪律、三个参数区(ρ、β、θ)分别对应输出的哪一部分、效应分解怎么读,以及两种标准化为什么不可比。
如果手上只有邻接关系(谁和谁接壤)而没有坐标,把 spmatrix create idistance 换成 contiguity 即可,其余流程不变;但邻接矩阵需要形状文件或显式的邻接表,这一步不能靠坐标猜。
────────────────
回复本帖即可查看以下内容
下面是帖子的相关资料的获取以及相关的内容说明,内容包含:spatial_demo.do 脚本、synthetic_region.csv 合成坐标数据、矩阵检查表(建矩阵与读结果的完整自查项)。
游客,如果您要查看本帖隐藏内容请回复


雷达卡



京公网安备 11010802022788号







