使用contr_sum构建III型ANOVA模型后因子名称显示异常的解决方法
解决sjPlot中contr.sum对比下因子名称显示异常的问题
针对使用contr.sum构建III型ANOVA模型后,sjPlot的tab_model输出因子名称(如pH1)而非实际水平名称的问题,提供两种可行的解决方法:
方法一:使用tab_model的terms参数手动重命名
直接在tab_model函数中通过terms参数映射模型项与自定义显示名称,精准替换每个对比项的显示文本:
library(sjPlot) library(stats) # 生成数据并构建模型(你的原代码) data <- data.frame(pH = rep(c(7.5, 7.75, 8.1), each = 10), Photoperiod = rep(c("Day", "Night"), times = 15), Phase = rep(c(1, 2), each = 15), GR = runif(30, min = 0, max = 1)) data$pH <- as.factor(data$pH) data$Photoperiod <- as.factor(data$Photoperiod) data$Phase <- as.factor(data$Phase) mod <- lm(GR ~ pH * Photoperiod * Phase, data=data, contrasts=list(pH=contr.sum, Photoperiod=contr.sum, Phase = contr.sum)) # 自定义显示名称 tab_model(mod, terms = list( "pH1" = "pH 7.5", "pH2" = "pH 7.75", "Photoperiod1" = "光周期:白天", "Phase1" = "阶段 1", "pH1:Photoperiod1" = "pH 7.5 × 白天", "pH2:Photoperiod1" = "pH 7.75 × 白天", "pH1:Phase1" = "pH 7.5 × 阶段 1", "pH2:Phase1" = "pH 7.75 × 阶段 1", "Photoperiod1:Phase1" = "白天 × 阶段 1", "pH1:Photoperiod1:Phase1" = "pH 7.5 × 白天 × 阶段 1", "pH2:Photoperiod1:Phase1" = "pH 7.75 × 白天 × 阶段 1" ))
说明:
- 模型中
pH1对应因子pH的第一个水平(7.5),pH2对应第二个水平(7.75),第三个水平(8.1)作为参照组(由前两个水平的负和体现); - 其他因子同理,
Photoperiod1对应Day,Phase1对应1,可根据需求调整显示文本的表述。
方法二:提前设置因子水平的对比名称(进阶)
通过contrasts函数手动指定对比项的名称,替代默认的1、2后缀,这样tab_model会直接使用自定义的对比名称:
# 为pH因子设置带名称的sum对比 contrasts(data$pH) <- setNames(contr.sum(3), c("pH_7.5", "pH_7.75")) # 为光周期设置带名称的sum对比 contrasts(data$Photoperiod) <- setNames(contr.sum(2), c("Photoperiod_Day")) # 为阶段设置带名称的sum对比 contrasts(data$Phase) <- setNames(contr.sum(2), c("Phase_1")) # 重新构建模型 mod <- lm(GR ~ pH * Photoperiod * Phase, data=data) # 直接输出,此时模型项名称已自定义 tab_model(mod)
说明:
- 这种方法在构建因子对比时就定义好名称,后续模型输出会自动沿用这些名称,无需在
tab_model中重复映射; - 注意
contr.sum的维度:3水平因子对应2个对比项,2水平因子对应1个对比项,命名数量要匹配。
内容的提问来源于stack exchange,提问作者Wonderia
相关产品推荐
相关产品推荐

