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

使用gmm包估计正态分布尺度参数时遇参数缺失报错求助

解决gmm函数正态分布估计报错的方案

1. 错误原因分析

报错l'argument "x" est manquant, avec aucune valeur par défaut(x参数缺失,无默认值),核心问题是你定义的矩条件函数g0不符合gmm包的要求:

  • gmm要求矩函数必须以待估参数向量theta作为第一个参数,数据x作为第二个参数
  • 你的g0要么没定义x参数,要么参数顺序搞反了,导致函数调用时无法拿到数据value_2020

2. 正确定义正态分布的矩条件函数

对于正态分布,恰好识别的矩条件对应一阶矩(均值)和二阶中心矩(方差),正确的g0写法如下:

# 恰好识别的矩条件函数:theta[1]是均值mu,theta[2]是方差sigma²
g0 <- function(theta, x) {
  mu <- theta[1]
  sigma_sq <- theta[2]
  # 返回n×2的矩条件矩阵,每行对应一个样本的两个矩条件
  cbind(x - mu, (x - mu)^2 - sigma_sq)
}

注:这里直接估计方差sigma²更稳妥,后续可通过开平方得到标准差。如果要直接估计标准差,矩条件需调整为(x - mu)^2 - theta[2]^2。

3. 修正后的gmm调用代码

确保value_2020是数值向量,然后调用gmm:

library(gmm)

# 提取清理后的收入数值列(替换成你的实际列名)
value_2020 <- your_clean_data$income_2020

# 初始值用样本统计量(远好于0,加快收敛)
t0 <- c(mu = mean(value_2020), sigma_sq = var(value_2020))

# 调用gmm函数
res0 <- gmm(g0, value_2020, t0 = t0, wmatrix = "ident")
print(res0)

4. 泊松分布拟合的参考代码

泊松分布的矩条件可基于一阶矩(均值=lambda)和二阶矩(E[X²] = lambda + lambda²),对应的矩函数和调用代码如下:

# 泊松分布矩条件函数:theta[1]是lambda
g_pois <- function(theta, x) {
  lambda <- theta[1]
  cbind(x - lambda, x^2 - (lambda + lambda^2))
}

# 估计泊松分布参数
res_pois <- gmm(g_pois, value_2020, t0 = c(lambda = mean(value_2020)))
print(res_pois)

5. 拟合优度判断方法

对比两种分布的拟合效果可参考:

  • 查看gmm结果的J统计量:J值越小、p值越大,说明矩条件越满足,拟合效果越好
  • 绘制数据直方图,叠加两种分布的概率密度曲线做直观对比
  • 计算残差的均方误差等统计量

内容的提问来源于stack exchange,提问作者Maxime Delrèe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:46:06