使用VGAM包vglm()拟合零截断负二项模型时遇'dposnegbin2'未找到错误
问题解决与替代方案
VGAM包报错的解决方法
- 更新VGAM到最新版本:这个报错大概率是版本兼容性问题,旧版VGAM中
posnegbinomial()家族的内部实现存在函数引用问题。执行以下命令重新安装最新版:
安装完成后重新运行拟合代码,多数情况下能解决找不到install.packages("VGAM", dependencies = TRUE) library(VGAM)dposnegbin2的问题。 - 临时 workaround(不推荐长期使用):如果暂时无法更新包,可以手动暴露内部函数后再拟合:
dposnegbin2 <- VGAM:::dposnegbin2 m1 <- vglm(stay ~ age + hmo + died, family = posnegbinomial(), data = dat)
零截断负二项模型的替代方案
如果VGAM的问题仍无法解决,推荐以下成熟工具:
- countreg包:专门处理计数模型,支持零截断负二项模型,用法简洁:
install.packages("countreg") library(countreg) m1 <- zerotrunc(stay ~ age + hmo + died, data = dat, dist = "negbin") summary(m1) - pscl包的hurdle模型:通过设置
zero = "none"实现零截断负二项拟合:install.packages("pscl") library(pscl) m1 <- hurdle(stay ~ age + hmo + died, data = dat, dist = "negbin", zero = "none") summary(m1) - brms包(贝叶斯框架):适合需要贝叶斯推断的场景,对零截断负二项模型支持完善:
install.packages("brms") library(brms) m1 <- brm(stay ~ age + hmo + died, data = dat, family = zero_truncated_negbinomial()) summary(m1)
内容的提问来源于stack exchange,提问作者Ariel
相关产品推荐
相关产品推荐

