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

运行pscl包vuong()函数提示$ operator not defined for this S4 class报错

问题原因
  • 函数命名冲突:你同时加载了pscl和lmtest两个包,二者均提供同名的vuong()函数,你加载时lmtest晚于pscl,因此默认调用的是lmtest::vuong(),和你预期使用的pscl包函数逻辑不同,这是你测试lm模型也报错的主要原因。
  • 原生vuong()函数不支持S4类模型:lme4包拟合的lmer模型属于S4类对象,pscl和lmtest的原生vuong()函数底层均使用$运算符提取模型属性,而S4类对象需用@运算符提取插槽,二者不兼容,因此运行时会抛出$ operator not defined for this S4 class的错误。
解决方案

方案1:普通模型(lm、glm等S3类)的Vuong检验

调用时明确指定包名,避免命名冲突即可:

  • 若使用pscl包的版本(适用于计数模型等非嵌套检验):pscl::vuong(mod1, mod2)
  • 若使用lmtest包的版本(适用于广义线性模型的嵌套/非嵌套检验):lmtest::vuong(mod1, mod2)

方案2:lmer混合效应模型的Vuong检验

方法A:使用适配的第三方包

安装加载nonnest2包,该包的vuongtest()函数原生支持lme4生成的S4类混合模型,调用代码如下:

install.packages("nonnest2")
library(nonnest2)
vuongtest(mod1, mod2)

方法B:手动实现检验逻辑

你也可以手动提取对数似然值构造检验统计量,参考代码如下:

# 提取两个模型的逐点对数似然
ll1 <- logLik(mod1)
ll2 <- logLik(mod2)
# 计算似然差值
ll_diff <- as.vector(ll1) - as.vector(ll2)
# 计算Vuong统计量与双侧p值
vuong_stat <- mean(ll_diff) / (sd(ll_diff) / sqrt(length(ll_diff)))
p_val <- 2 * pnorm(-abs(vuong_stat))
# 输出结果
cat(sprintf("Vuong统计量 = %.3f, p值 = %.3f\n", vuong_stat, p_val))

注意:Vuong检验用于混合效应模型的适用性存在统计学争议,若你对比的两个模型为嵌套关系,更推荐使用anova(mod1, mod2)做似然比检验,或直接对比AIC、BIC指标判断拟合效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:15:04