运行负二项模型调用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)
解决建议
- 检查变量维度与共线性:模型中
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仅对应一个样本,此时加入该变量会引发完全共线性,需移除该变量或调整模型结构。
检查offset变量:模型使用
offset(log(patient_days)),但提供的测试数据中无该变量,需确认数据集中是否存在该变量、是否有非正值(log(0)或对数负数会导致计算异常)。临时绕过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")
- 排查包冲突:加载的包较多,
car包的summary函数可能与MASS的summary.glm.nb冲突,尝试指定包名调用:
MASS::summary.glm.nb(model)
内容的提问来源于stack exchange,提问作者cardiacpack
相关产品推荐
相关产品推荐

