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

运行负二项模型调用summary时出现nsmall参数无效错误求助

问题:glm.nb模型summary报错"invalid 'nsmall' argument"

错误信息

Error in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L, : invalid 'nsmall' argument

模型代码

model<- glm.nb(upvotes ~ Answer_Rate + Score + offset(log(patient_days)) + factor(Post_ID) - 1, control = glm.control(maxit = 500), data = na.omit(mock_data))

summary(model)

测试数据框(含缺失值)

# Create the dataframe with NA values
df <- data.frame(
  Post_ID = c(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18),
  Creation_Year = c(2002, 2003, 2004, 2005, 2008, 2009, 2012, 2013, 2015, 2016, 2021, 2022, 2023, 2027, 2030, 2037),
  Last_Activity_Year = c(rep(2022, 16)),
  Views = c(3868, 2390, 1727, 5456, 2667, 2623, 1084, 2963, 5228, 1833, 1945, 2038, 3856, 3170, 5626, 2058),
  Upvotes = c(364, 654, 151, 246, 341, 82, 0, 270, 569, 184, 291, 265, 366, 439, 628, 293),
  Downvotes = c(63, 40, 54, 44, 90, 75, 36, 105, 157, 55, 79, 79, 93, 119, 103, 94),
  Answer_Count = c(66, 41, 34, 27, 24, 11, 22, 35, 85, 19, 49, 108, 63, 99, 70, 74),
  Score = c(42064, 24958, 18124, 32560, 36219, 27458, 11496, 46426, 60378, 28678, 34798, 32836, 42100, 62402, 54574, 28638),
  View_Rate = c(3.116946, 3.013748, 3.00667, 2.503681, 3.325894, 2.838673, 3.050738, 3.018707, 3.118339, 3.030976, 3.152526, 3.086555, 3.161453, 3.121305, 2.781192, 3.152503),
  Comment_Count = c(0.228, 0.259, NA, 0.215, 0.113, NA, 0.096, 0.035, 0.25, 0.003, 0.337, NA, 0.147, 0.103, NA, 0.203),
  Answer_Rate = c(21.1, NA, 19.7, 18.1, 19.6, 14.8, 12.2, 15.0, 15.3, 16.5, NA, 14.3, 19.8, NA, 17.6, 17.7),
  Favorite_Rate = c(8.65348, 26.204023, 8.331494, 7.555283, 9.414948, NA, 0.0, 5.815707, 9.423962, NA, 8.36255, 8.070411, NA, 7.035031, 11.507311, 10.231161),
  Average_Answer_Rate = c(1.497718, NA, 2.979475, 1.351351, 2.484884, 2.731444, 3.131524, 2.261664, NA, 1.917846, 2.270245, 2.405896, NA, 1.90699, 1.887346, NA),
  Answer_Accept_Rate = c(1.5690377, 1.6427598, 1.8759656, NA, 0.6626356, 0.4006118, NA, 0.7538879, 1.4077975, NA, 1.4081269, 3.289073, 1.4964371, 1.5864876, NA, 2.5839793)
)

已尝试操作

  • 用na.omit()处理数据缺失值,模型能拟合并输出p值等结果,但调用summary(model)仍报错
  • 加载的包列表:
library(tidyverse)
library(lubridate)
library(janitor)
library(knitr)
library(kableExtra)
library(lme4)
library(gtsummary)
library(data.table)
library(ggalluvial)
library(alluvial)
library(geepack)
library(conflicted)
library(MASS)
library(car)
library(lmtest)
library(vcd)
library(AER)
library(pscl)

conflicts_prefer(gtsummary::select)
conflicts_prefer(dplyr::filter)

解决建议

  1. 检查变量维度与共线性:模型中factor(Post_ID) - 1会生成与Post_ID类别数一致的虚拟变量,若经na.omit()后的样本量与Post_ID类别数接近甚至相等,会导致参数估计极端,触发summary格式化错误。先执行以下代码验证:
clean_data <- na.omit(mock_data)
cat("样本量:", nrow(clean_data), "\n")
cat("Post_ID类别数:", length(unique(clean_data$Post_ID)), "\n")

若两者相等,说明每个Post_ID仅对应一个样本,此时加入该变量会引发完全共线性,需移除该变量或调整模型结构。

  1. 检查offset变量:模型使用offset(log(patient_days)),但提供的测试数据中无该变量,需确认数据集中是否存在该变量、是否有非正值(log(0)或对数负数会导致计算异常)。

  2. 临时绕过summary函数:若模型拟合正常仅summary报错,可手动提取统计量:

# 提取系数、标准误、z值、p值
coef_result <- data.frame(
  系数 = coef(model),
  标准误 = sqrt(diag(vcov(model))),
  z值 = coef(model)/sqrt(diag(vcov(model))),
  p值 = 2*pnorm(abs(coef(model)/sqrt(diag(vcov(model)))), lower.tail=FALSE)
)
print(coef_result)

# 提取离散参数
cat("离散参数θ:", model$theta, "\n")
  1. 排查包冲突:加载的包较多,car包的summary函数可能与MASS的summary.glm.nb冲突,尝试指定包名调用:
MASS::summary.glm.nb(model)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:27:48