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

rcompanion包cldList()生成紧凑字母显示时部分分组无字母问题

问题描述

我此前在相关平台提问过类似问题,目前遇到了新的问题:运行rcompanion包的cldList()函数生成分组紧凑字母显示表时,部分分组明明和其他组不存在显著性差异,但未返回对应字母。
我的原始数据量较大,已上传至公共存储位置。
请问这是函数bug还是我操作有误?我使用的代码如下:

library(FSA)
library(multcompView)
library(rcompanion)
library(ggplot2)
library(ggpubr)
library(tidyr)

raw_df <- read.csv("raw_data.csv")


# 完成Kruskal-Wallis H检验得到组间显著的结果后,我用以下代码执行Dunn事后检验
bells <- dunnTest(Group ~ as.factor(Color_Score), method = "bh", data = raw_df)

# 提取校正后的P值存储为单独变量
piano <- bells$`res`

# Dunn检验完成后,生成紧凑字母显示表
flute <- cldList(P.adj ~ Comparison, data = piano, threshold = 0.05) 

# 问题出现在这一步:我总共有40个需要比较的分组,但函数只返回了38个组的字母结果

# 我尝试用以下代码绘制箱线图并添加显著性字母
ggboxplot(raw_df, x = "Group", y = "Color_Score", 
          combine = FALSE, 
          x.text.angle = 360,
          orientation = "vertical",
          ylab = "Measurement (cm)",
          xlab = "Group", 
          color = "Group",
          fill = "Group", 
          notch = FALSE,
          ggtheme = theme_gray()) + 
            font("xy.text", size = 7, color = "black") + 
            theme(legend.position = "None", 
             axis.text.x =element_text(color = "black")) +  
            color of the y-axis (Measurement) tick labels
            geom_text(data  = flute, 
                      aes(x = Group, y = 12, angle = 90,
                      label = Letter),
                      position = position_nudge(x = 0.1),
                      hjust = 0,
                      color = "red")

我总计有40个待对比分组,但函数仅返回了38组的字母结果,搜索相关资料未找到解决方案,请问有没有人遇到过类似问题?

解决方案

这不是函数bug,是代码操作错误导致的,按以下步骤修正即可:

  1. 修正Dunn检验的公式写法
    Dunn检验的公式规范为响应变量 ~ 分组变量,你当前的代码把两个变量写反了,原本的需求是比较不同Group的Color_Score取值差异,所以需要把dunnTest的调用代码改为:
bells <- dunnTest(Color_Score ~ Group, method = "bh", data = raw_df)

原来的写法是用Color_Score作为分组维度比较Group的取值,完全背离分析目标,自然会出现分组数量不匹配的问题。

  1. 匹配因子水平避免分组遗漏
    如果公式修正后仍有分组缺失,说明存在分组未被识别到比较列表中,可以先将Group转为因子指定所有水平,同时调整cldList的参数:
# 显式指定Group的所有因子水平,避免遗漏
raw_df$Group <- factor(raw_df$Group)
# 调用cldList时增加参数匹配分组名
flute <- cldList(P.adj ~ Comparison, data = piano, threshold = 0.05, remove.space = TRUE, remove.zero = FALSE)
  1. 修正ggplot部分的语法错误
    你现有ggplot代码中存在一行无效文本color of the y-axis (Measurement) tick labels,直接删除该行即可避免运行报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:15:01