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

如何用jglmm实现类似lmer中anova的模型比较?

jglmm模型间比较的替代方法(替代lmer的anova函数)

问题背景

使用lmer拟合线性混合模型时,可直接通过anova()函数比较嵌套模型,示例代码如下:

mod.ld.frq = lmer(ln_rt_offset ~ 1 + lfrq + 
                  (1 + lfrq | PID) + (1| Item), 
                  data=ldfw.std)
mod.ld.frq.dur = lmer(ln_rt_offset ~ 1 + lfrq + duration + 
                  (1 + lfrq | PID) + (1| Item), 
                  data=ldfw.std)
anova(mod.ld.frq, mod.ld.frq.dur)

但用jglmm拟合同类模型后,调用anova()会抛出如下错误:

jmod.ld.frq = jglmm(ln_rt_offset ~ 1 + lfrq + 
                  (1 + lfrq | PID) + (1| Item), 
                  data=ldfw.std)
jmod.ld.frq.dur = jglmm(ln_rt_offset ~ 1 + lfrq + duration + 
                  (1 + lfrq | PID) + (1| Item), 
                  data=ldfw.std)

anova(jmod.ld.frq, jmod.ld.frq.dur.phon)
# 错误信息:
# Error in UseMethod("anova") : 
#  no applicable method for 'anova' applied to an object of class "jglmm"

解决方案

jglmm包未内置anova方法,针对嵌套模型的比较,可采用以下两种等效方式:

1. 手动计算似然比检验(LRT)

对于嵌套模型,似然比检验是标准的比较方法,可手动实现:

# 提取两个模型的对数似然值
ll_null = logLik(jmod.ld.frq)
ll_full = logLik(jmod.ld.frq.dur)

# 计算似然比统计量(2倍对数似然差值)
lrt_stat = 2 * (ll_full - ll_null)
# 计算参数自由度差(即新增变量的数量,此处为1)
df_diff = attr(ll_full, "df") - attr(ll_null, "df")
# 计算对应的p值
p_value = pchisq(lrt_stat, df = df_diff, lower.tail = FALSE)

# 输出结果
cat("似然比统计量:", round(lrt_stat, 3), "\n")
cat("自由度:", df_diff, "\n")
cat("p值:", round(p_value, 4), "\n")

2. 使用jglmm内置的compare()函数(需新版本支持)

部分新版本的jglmm包提供了compare()函数,专门用于模型间的似然比检验,用法和anova()类似:

compare(jmod.ld.frq, jmod.ld.frq.dur)

该函数会直接输出包含统计量、自由度、p值的检验结果,逻辑与lmer的anova()完全一致。

如果你的jglmm版本没有compare()函数,可先更新包:

install.packages("jglmm")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:01:32