子
子非鱼和熊
V1
2022/04/24阅读:18主题:橙心
显著性自动标记(1)
问题
在多重比较后如何用R代码实现显著性的
自动
标记?
以下R包都具有该功能,可自行百度检索: ggsignif
package、ggpubr
package、ggstatsplot
package和rcompanion
package
rcompanion
我比较熟悉rcompanion
package中的cldList()
功能进行显著性标记,今天就先讲讲这个(大神请自动忽略🐶 )。
-
查看帮助文档
?cldlist

要注意的一点是:标字母法,一般应该从均值或者中位数最大的一组开始标,而这个
cldList()
并不是默认对其排序,因而在作图前需自己排个序
示例
-
示例数据:
mpg {ggplot2}
,加载ggplot2之后就可直接调用(我并没有仔细看其含义,仅做示例😂,感兴趣的可自行查看帮助文档,本次选择其中的连续变量hwy
和分类变量class
进行演示)
-
数据具体情况


ps:可按图中所示进行数据摆放,每列为一个变量,行为样本
-
筛选出所需数据,并修改列名为x和y,先对整体进行组间差异显著性检验
dat <- mpg[,c("class","hwy")]
colnames(dat) <- c("x","y")
str(dat)#查看数据类型
# 残差正态性检验
mod1 <- lm(y~x,data = dat)
shapiro.test(resid(mod1))
#方差齐性检验
library(car)#引入`leveneTest()`功能
leveneTest(y~x,data = dat)

不满足单因素方差分析的前提条件,选用
Kruskal-Wallis rank sum test
kruskal.test(y~x,data = dat)#差异显著

5.多重比较及可视化
-
多重比较
library(FSA)#引入`dunnTest()`功能
#Dunn (1964) Kruskal-Wallis multiple comparison
#p-values adjusted with the Bonferroni method.
mc <- dunnTest(y~x,data =dat,method ="bonferroni")
mc$res
可以先看下保存在mc中的多重比较结果

关键步骤: 为实现从组内平均值或中位数最大的组开始字母标记,只需将mc$res
排序后至于cldList()
中就可获得其对应的字母标记,在这里可直接根据两组均值差(即 Z 值)的大小进行降序排序,具体实现方法:mc$res[order(mc$res$Z,decreasing = TRUE),]
-
获得显著性字母标记以及每组的最大值,用于后续作图
library(rcompanion)#引入`cldList()`功能
#Compact letter display
cld <- cldList(P.adj~Comparison,
data = mc$res[order(mc$res$Z,decreasing = TRUE),],#对数据进行排序
threshold = 0.05 )
library(dplyr)#引入`top_n()`功能
m <- dat %>% group_by(x) %>% top_n(1,y)#获得每一组的最大值
cld <- merge(cld,m,by.x = "Group",by.y = "x")#合并成一个数据框
cld

-
绘图
#绘图
library(ggplot2)
library(ggsci)#引入`scale_fill_jama()`功能,用于修改颜色
(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"))

展示一下错误的结果:
其余方法,后续再写吧🤣
作者介绍
子
子非鱼和熊
V1