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

使用emmeans/lsmeans对clm模型做事后多重比较遇vcov方法错误求助

解决clm模型使用emmeans/lsmeans时的vcov方法错误

我来帮你搞定这个问题!你遇到的no applicable method for 'vcov' applied to an object of class "clm"错误,本质是ordinal包的clm模型和emmeans/lsmeans的兼容性问题——默认情况下后者找不到提取clm模型协方差矩阵的正确方法,下面给你几个可行的解决方案:

方案1:更新依赖包并手动指定vcov矩阵

首先确保你的ordinal、emmeans和lsmeans都是最新版本,旧版本的兼容性确实不太好:

update.packages(c("ordinal", "emmeans", "lsmeans"))

重新拟合模型后,在调用emmeans时手动传入模型的协方差矩阵:

library(ordinal)
library(emmeans)

# 先确保分组变量是因子类型(避免非因子变量导致的潜在问题)
Data$Instructor <- factor(Data$Instructor)
Data$Question <- factor(Data$Question)

# 重新拟合模型
model <- clm(Likert.f ~ Instructor + Question + Instructor:Question, 
             data = Data, threshold="symmetric")

# 提取边际均值并做Tukey调整的两两比较,手动传入vcov矩阵
marginal <- emmeans(model, pairwise ~ Instructor + Question, 
                    adjust = "tukey", vcov = vcov(model))

# 查看比较结果
marginal

# 生成带字母标记的组分离结果
cld(marginal, alpha = 0.05, Letters = letters, adjust = "tukey")

方案2:借助multcomp包实现多重比较

如果方案1还是不行,可以用multcomp包来衔接clm模型和多重比较:

library(multcomp)

# 先获取边际均值的线性对比矩阵
emm <- emmeans(model, ~ Instructor + Question)

# 转换为glht对象进行多重比较
glht_model <- glht(model, linfct = emm@linfct)

# 输出Tukey调整后的组间比较结果
summary(glht_model, test = adjusted("tukey"))

# 生成带字母标记的组分离结果
cld(glht_model, alpha = 0.05, Letters = letters)

错误原因说明

clm模型的协方差矩阵存储方式和普通线性模型不同,旧版本的emmeans/lsmeans没有专门为clm对象实现vcov提取方法,手动传入vcov(model)或者用multcomp中转,就能绕过这个兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 22:58:13