You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R的plm包pgmm函数运行系统GMM时出现system is exactly singular错误求助

报错核心原因

你遇到的矩阵奇异报错本质是短面板(T=5)下模型滞后阶数设置不合理、工具变量设定不符合数据维度、缺失值导致样本/工具变量矩阵共线三个问题共同导致的,和变量本身相关性无关,解决方案如下:


具体修复步骤

  • 第一步:简化模型滞后阶数
    T=5的短面板最多支持被解释变量1阶滞后,你当前设置的lag(log(GDP), 1:2)会直接损失2期初始观测,每个个体仅剩3期有效观测,自由度严重不足;同时控制变量Humancapital的0-2阶滞后也会进一步压缩有效样本,建议仅保留被解释变量1阶滞后,控制变量最多用到1阶滞后。

  • 第二步:修正工具变量设定
    你当前只指定了log(GDP)的滞后作为工具变量,未纳入Stations、Humancapital的工具变量;同时lag(log(GDP), 2:5)的设置完全不符合你的数据维度:T=5的情况下最多存在3阶滞后,4、5阶滞后会生成全空的工具列,直接导致矩阵奇异。建议工具变量滞后阶数最高设置到3阶,同时补充所有内生/前定变量的工具,额外添加collapse = TRUE参数压缩工具数量,避免工具过多导致的共线问题。

  • 第三步:处理缺失值
    你的样本中1870年的Humancapital全为缺失值,做滞后转换时会进一步损失大量有效样本,建议先按个体对人力资本做线性插值补全缺失值,或直接剔除观测不足4期的个体。

  • 第四步:调整估计参数
    短面板下两步GMM估计对样本要求更高,建议先使用model = "onestep"跑通基础模型,再逐步尝试两步估计和双向固定效应;初始测试阶段先使用effect = "individual",避免时间效应占用过多自由度。


修复后参考代码

# 加载缺失值处理包,按个体补全人力资本缺失值
library(dplyr)
library(zoo)
Bachelor_DF <- Bachelor_DF %>%
  group_by(id) %>%
  mutate(Humancapital = na.approx(Humancapital, na.rm = FALSE)) %>%
  ungroup()

# 简化后的GMM估计代码
gmm_estimator <- pgmm(log(GDP) ~ lag(log(GDP), 1) + lag(Stations, 0:1) + lag(Humancapital, 0:1)
                      | lag(log(GDP), 2:3) + lag(Stations, 2:3) + lag(Humancapital, 2:3),
                      data = Bachelor_DF,
                      effect = "individual",
                      model = "onestep",
                      collapse = TRUE)

模型跑通后可再逐步调整滞后阶数、换成两步估计、添加双向效应验证稳健性。


内容的提问来源于stack exchange,提问作者DLTS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:45:03