在 Stata 里跑 空间杜宾模型(SDM)最常用、最稳的两条命令就是:
1) 截面/面板通用→ `xsmle`(官方套件)
2) 传统截面→ `spreg` / `spregxt`(用户包)
✅ 1. 面板 SDM:xsmle(官方推荐)
(1)安装与帮助
```stata
ssc install xsmle, replace
help xsmle
```
(2)语法骨架
```stata
1. 声明面板
xtset id year // id 为地区,year 为时间
2. 读入空间权重矩阵(已做行标准化)
spmat import W using "W.spmat", replace
3. 估计面板 SDM
xsmle y x1 x2 x3, ///
wmat(W) /// 空间权重
model(sdm) /// 指定 SDM
fe /// 固定效应(也可选 re 随机效应)
vce(cluster id) /// 稳健标准误
durbin(x1 x2) /// 这些变量生成 WX 项
effects /// 输出直接/间接/总效应
```
(3)结果解读
- 系数表:ρ(Wy)显著 → 存在空间滞后;θ(Wx)显著 → 解释变量存在溢出效应。
- `effects` 选项会自动给出 直接效应 / 间接效应 / 总效应。
---
✅ 2. 截面 SDM:spreg / spregxt
(1)安装
```stata
ssc install spreg, replace
```
(2)截面语法
```stata
读入空间权重(邻接或距离)
spatwmat using "w.dta", name(W) standardize
跑截面 SDM
spreg y x1 x2, model(durbin) wmat(W) wlag(x1 x2)
```
---
⚠️ 常见报错速查
| 报错 | 原因 | 解决 |
|---|---|---|
| `1/max eigenvalue of W` 缺失 | 权重矩阵未标准化 | 用 `spmat ... , normalize(row)` |
| `durbin() only allowed with model(sdm)` | 误把 `xsmle` 写成 `spreg` | 检查命令,面板用 `xsmle` |
| `_mata_matrices_xsmle() not found` | Mata 文件未加载 | `mata: mata mlib index` 后重启 Stata |
---
📌 一句话总结
- 面板数据→ `xsmle ..., model(sdm)` 最省心,官方维护、效应分解一步到位。
- 截面数据→ `spreg ..., model(durbin)` 轻量快速。
把权重矩阵标准化、变量顺序对齐后,直接复制上面模板即可跑通。