使用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
相关产品推荐
相关产品推荐

