上篇(自动显著性标记(1) )提到通过rcompanion
package中的cldList()
功能进行显著性标记,但示例的多重比较是用的dunnTest()
,如果使用其他的多重比较方法呢,如何实现?
可以先看下上一篇推文中多重比较所获得的结果:
关键步骤: 为实现从组内平均值或中位数最大的组开始字母标记,只需将mc$res
排序后至于 cldList()
中就可获得其对应的字母标记,在这里可直接根据两组均值差(即 Z 值)的大小进行降序排序,具体实现方法: mc$res[order(mc$res$Z,decreasing = TRUE),]
再看一下cldList()
中所需的参数:
cldList( formula = NULL, data = NULL, comparison = NULL, p.value = NULL, threshold = 0.05, print.comp = FALSE, remove.space = TRUE, remove.equal = TRUE, remove.zero = TRUE, swap.colon = TRUE, swap.vs = FALSE, ... )
较为关键的参数就是formula
、data
、comparison
和threshold
其中尤其要注意comparison
的形式:
A vector of text describing comparisons, with each element in a form similar to "Treat.A - Treat.B = 0". Spaces and "=" and "0" are removed by default. It also changes ":" to "-", and so can use text in the form e.g. "Treat.A : Treat.B". (见帮助文档)
大概就是A-B = 0(或者 A:B=0、A:B、A-B)类似的形式都可以,会实现自动转换,如果是其他形式的需要提前自己整理
下面以TukeyHSD()
的多重比较结果为例进行展示:
示例 TukeyHSD(aov(y~x,data = dat))
其 comparison
形式与上文所提是一致的,只需稍加整理即可。
#先将所需结果提取出来 mc <- TukeyHSD(aov(y~x,data = dat))[[1]] %>% data.frame()
行名就是我们所需的comparison
部分,因此,进一步添加分组变量
mc$Comparison <- rownames(mc)
字母标记
cld <- cldList(p.adj~Comparison, data=mc[order(mc$diff ,decreasing = TRUE),], threshold = 0.05 ) ### Compact letter display
剩余步骤与上一篇推文就是一样的了,不再赘述,直接放代码了🏄
m <- dat %>% group_by(x) %>% top_n(1,y)#获得每一组的最大值 cld <- merge(cld,m,by.x = "Group" ,by.y = "x" )#合并成一个数据框 #绘图 library(ggplot2) library(ggsci) (p <- ggplot(data = dat,aes(x=x,y=y))+ geom_boxplot(aes(fill=x),color="black" )+#以箱形图展示,按分类变量x填充不同的颜色 geom_text(data=cld, aes(x=Group,y=y*1.3,label=Letter),#让字母位置比每组最大值高1.3倍,避免重叠 size=5,color="red" ,fontface="bold" )+ scale_fill_jama(alpha = 0.8)+#修改填充颜色 theme_bw()+theme(text = element_text(size = 18,face = "bold" ))+ labs(x="class" ,y="hwy" ))
所得箱形图为:
至于其他的多重比较或者多因素显著性标记的思路基本差不多,大家自己探索吧👾