首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tukey的测试结果框图

Tukey的测试结果框图
EN

Stack Overflow用户
提问于 2020-06-05 20:38:03
回答 1查看 229关注 0票数 0

我需要绘制Tukey的测试结果,其中包括8组。我正在遵循R图画廊的例子,它适用于四个组。我试着花时间修改它1.将Tukey.levels <- TUKEY[variable]改为Tukey.levels <- TUKEY[variable],因为我有8个组。这在TUKEY[variable]中给了我错误:下标越界,所以我再次使用4 2。添加了更多的颜色

但是我不能得到在一个盒子图上显示所有28个比较的曲线图。以下是数据和我的代码

代码语言:javascript
复制
treatment <- rep(c("A", "B", "C", "D", "E","F","G","H"), each=20)
value=c( sample(2:5, 20 , replace=T) , sample(6:10, 20 , replace=T), sample(1:7, 20 , replace=T), sample(3:10, 20 , replace=T) , sample(10:20, 20 , replace=T),sample(11:15, 20 , replace=T),sample(6:12, 20 , replace=T),sample(3:3, 20 , replace=T) )
data=data.frame(treatment,value)
model=lm( data$value ~ data$treatment )
ANOVA=aov(model)
TUKEY <- TukeyHSD(x=ANOVA, 'data$treatment', conf.level=0.95)
plot(TUKEY , las=1 , col="brown")

generate_label_df <- function(TUKEY, variable){


  Tukey.levels <- TUKEY[[variable]][,4]
  Tukey.labels <- data.frame(multcompLetters(Tukey.levels)['Letters'])


  Tukey.labels$treatment=rownames(Tukey.labels)
  Tukey.labels=Tukey.labels[order(Tukey.labels$treatment) , ]
  return(Tukey.labels)
}
LABELS <- generate_label_df(TUKEY , "data$treatment")
my_colors <- c( 
  rgb(143,199,74,maxColorValue = 255),
  rgb(242,104,34,maxColorValue = 255), 
  rgb(111,145,202,maxColorValue = 255),
  rgb(255,0,0,maxColorValue = 255),
  rgb(0,255,255,maxColorValue = 255),
  rgb(128,0,0,maxColorValue = 255),
  rgb(128,0,128,maxColorValue = 255)
)
a <- boxplot(data$value ~ data$treatment , ylim=c(min(data$value) , 1.1*max(data$value)) , col=my_colors[as.numeric(LABELS[,1])] , ylab="value" , main="")
text( c(1:nlevels(data$treatment)) , a$stats[nrow(a$stats),]+over , LABELS[,1]  , col=my_colors[as.numeric(LABELS[,1])] )

如果这些组是相同的,那么它们应该用相同的颜色和相同的字母表示。

我还想知道generate_label是如何工作的。即使我有8个组,我也总是需要给4赋值吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-05 22:45:39

如果您使用的是R 4.0.0或更高版本,那么一个问题是data.frame函数更改了其默认行为。尝试调整函数内部的代码,以便为每个data.frame()调用stringsAsFactors = TRUE。还要确保加载了multicompView库,这在您的代码中没有提到:

代码语言:javascript
复制
treatment <- rep(c("A", "B", "C", "D", "E","F","G","H"), each=20)
set.seed(1) # for reproducability
value=c( sample(2:5, 20 , replace=T) , sample(6:10, 20 , replace=T), sample(1:7, 20 , replace=T), sample(3:10, 20 , replace=T) , sample(10:20, 20 , replace=T),sample(11:15, 20 , replace=T),sample(6:12, 20 , replace=T),sample(3:3, 20 , replace=T) )
data=data.frame(treatment,value, stringsAsFactors = T)
model=lm( data$value ~ data$treatment )
ANOVA=aov(model)
TUKEY <- TukeyHSD(x=ANOVA, 'data$treatment', conf.level=0.95)
plot(TUKEY , las=1 , col="brown")

library(multcompView) # load this library

generate_label_df <- function(TUKEY, variable){


  Tukey.levels <- TUKEY[[variable]][,4] # leave this value as 4. It is extracting the 4th column of the TUKEY object.
  Tukey.labels <- data.frame(multcompLetters(Tukey.levels)['Letters'], stringsAsFactors = TRUE)


  Tukey.labels$treatment=rownames(Tukey.labels)
  Tukey.labels=Tukey.labels[order(Tukey.labels$treatment) , ]
  return(Tukey.labels)
}
LABELS <- generate_label_df(TUKEY , "data$treatment")
my_colors <- c( 
  rgb(143,199,74,maxColorValue = 255),
  rgb(242,104,34,maxColorValue = 255), 
  rgb(111,145,202,maxColorValue = 255),
  rgb(255,0,0,maxColorValue = 255),
  rgb(0,255,255,maxColorValue = 255),
  rgb(128,0,0,maxColorValue = 255),
  rgb(128,0,128,maxColorValue = 255)
)
a <- boxplot(data$value ~ data$treatment , ylim=c(min(data$value) , 1.1*max(data$value)) , col=my_colors[as.numeric(LABELS[,1])] , ylab="value" , main="")

over <- 0.1*max( a$stats[nrow(a$stats),] )

text( c(1:nlevels(data$treatment)) , a$stats[nrow(a$stats),]+over , LABELS[,1]  , col=my_colors[as.numeric(LABELS[,1])] )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62215549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档