打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
修正--R语言自动显著性标记
  • 几个月前发表过有关通过R语言进行字母法显著性标记的方法,最近有反馈说:dunnTest()进行多重比较之后,即使事先排序了,用这个方法标记出来的字母也不是从平均值最大的组开始的😢。

  • 其实在我自己进行数据分析的过程中有一次也出现了这个问题,但不知为啥,重新运行代码这个问题又消失了🤣,也就没有过多关注。

  • 既然再次被提起,我就重新去看了一遍,换了一种实现的思路,暂时没有问题了(能力有限,大家发现我的推文有问题甚至是很明显的错误还请留言反馈😂)

问题来源:dunnTest()这个函数在进行多重比较时会直接按照分类变量的首字母排序,而不会关注之前设置好的因子顺序以及各组平均值的大小。如果之间根据Z值大小排序,会涉及到正负号的问题,当最大值字母靠后,则不会出现在两两比较的左边,进而影响后续字母标记。

现在的思路是:在进行该方法的多重比较之前,将分组变量按其均值从大到小排序之后,直接将标签改成A、B、C、D···,通过cldList()获得正确的字母后再替换回来。
好了,罗里吧嗦说了半天,下面进入代码演示部分(仍然使用之前推文中的数据,至于整体差异显著性的检验,这里就不作演示):
#导入数据,调用所需packages
library(rcompanion)#引入`cldList()`功能
library(FSA)#引入`dunnTest()`功能
library(dplyr)
dat <- mpg[,c("class","hwy")]
colnames(dat) <- c("x","y")

#备份原始数据,用于后续作图
dat1 <- dat
colnames(dat1) <- c("x","y")

重新根据均值大小排列分组变量顺序,并修改标签为A、B、C、D····

mean.y <- dat %>% group_by(x) %>% summarise(mean=mean(y))#求各组均值
mfactor <- mean.y[order(mean.y$mean,decreasing = TRUE),1] %>% data.frame()#重新排序
rownames(mfactor) <- mfactor$x
dat$x <- factor(dat$x,levels = rownames(mfactor),
                labels = LETTERS[seq(1,7,1)])#7个组,所以这里数字为7,其余水平需作相应修改

多重比较及字母标记(这里就不需要再对数据进行排序了)

#多重比较
#Dunn (1964) Kruskal-Wallis multiple comparison
#p-values adjusted with the Bonferroni method.
mc <- dunnTest(y~x,data =dat,method ="bonferroni")
#Compact letter display
cld <- cldList(P.adj~Comparison,
               data = mc$res,
               threshold = 0.05 ) 

绘图部分代码:

#获得每一组的最大值
m <- dat %>% group_by(x) %>% summarise(y=max(y))#放弃使用top_n()函数
cld <- merge(cld,m,by.x = "Group",by.y = "x")#合并成一个数据框

#将各组标签替换回原始标签
rownames(cld) <- cld$Group
cld <- cld[levels(dat$x),]
cld$Group <- rownames(mfactor)

#绘图
library(ggplot2)
library(RColorBrewer)
display.brewer.all() #展示所有的色板
col <- colorRampPalette(brewer.pal(7,'Accent'))(7)#提前设置填充颜色
(p <- ggplot(data = dat1,aes(x=x,y=y))+#这里使用之前备份的原始数据,因为dat中的分组变量已经被修改了
    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_manual(values = col)+#修改填充颜色
    theme_bw()+theme(text = element_text(size = 18,face = "bold"))+
    labs(x="class",y="hwy"))

结果如下,跟之前那篇推文结果一致

好了,今天的推文结束😅

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
生信技能树-R语言视频课听后感 (10万+的播放量就看这个春节)
GEO数据挖掘流程——代码版(方便抄袭)
变量命名
授人以鱼,不如授之以渔。奉上凯立德导航地图文件作用分项说明 - GPS 专区 - DIYP...
凯立德导航地图文件作用分项说明
R语言实现LEfse分析从数据整理到树形图绘制
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服