分享

R与自动显著性标记(2)

 哈_有条鱼 2022-04-25

上篇(自动显著性标记(1))提到通过rcompanionpackage中的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,
  ...
)

较为关键的参数就是formuladatacomparisonthreshold其中尤其要注意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()的多重比较结果为例进行展示:

示例

1. 查看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"))

所得箱形图为:

至于其他的多重比较或者多因素显著性标记的思路基本差不多,大家自己探索吧👾

新开公众号🎉🎉🎉,欢迎大家多多转发及提建议👻👻👻

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多