233 3

[程序分享] 空间杜宾模型 Stata 演示代码(附合成区域数据与权重矩阵检查表) [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

0%

还不是VIP/贵宾

-

威望
0 级
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
10 点
帖子
0
精华
0
在线时间
0 小时
注册时间
2026-10-23
最后登录
2026-10-23

楼主
熊猫债券22092 发表于 2026-10-23 18:15:16 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
资料名称: 空间杜宾模型 Stata 教学包(spatial_demo.do + synthetic_region.csv + 矩阵检查表.md),版本 1.0
帖内附件: 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,体现邻居条件的连带作用)。写成命令就是
  1.  
  2. spregress y_growth x_fiscal dens_control, gs2sls ///
  3.  
  4.     dvarlag(W) ivarlag(W: x_fiscal dens_control)
  5.  
复制代码
dvarlag(W) 是因变量空间滞后,ivarlag(W: 变量) 是解释变量空间滞后,gs2sls 是广义空间两阶段最小二乘(也可以换 ml)。只有 dvarlag 没有 ivarlag,那是空间自回归模型(SAR);两个都有,才是杜宾。
判断要不要用杜宾,不该只看拟合优度。先问两个问题:邻居的 x 在机制上是否可能影响本地 y?本地 y 与邻居 y 的相关,是真实的溢出,还是共同面临的区域冲击?前者支持杜宾,后者更接近误差项相关。
权重矩阵与标准化顺序
Stata 的 Sp 体系里,先用 spset 声明空间数据,再用 spmatrix create 建矩阵。附件用的是反距离矩阵:
  1.  
  2. spset region_id, coord(coord_x coord_
  3. y) coordsys(planar)
  4.  
  5. spmatrix create idistance W, normalize(row)
  6.  
复制代码
coordsys(planar) 表示平面坐标。如果你手上是经纬度,要改成 coordsys(latlong),距离按大圆距离算——两种设定的权重完全不同,不能混用。
标准化方式有三种,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 合成坐标数据、矩阵检查表(建矩阵与读结果的完整自查项)。
游客,如果您要查看本帖隐藏内容请回复
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


新军事变革40245 该用户已被删除
沙发
新军事变革40245 发表于 2026-10-24 18:18:22
提示: 作者被禁止或删除 内容自动屏蔽

藤椅
jngod 发表于 2026-10-25 09:57:48

板凳
ZGYNLF119986 发表于 2026-10-26 08:20:51
支持!!!!!!!!!!!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-10-28 04:04