问题描述
我正在尝试同时使用facet_wrap和stat_compare_means,但是我遇到了问题。 数据的两侧没有相同数量的点。因此stat_compare_means失败... 例如查看图片:
在类型1“ B”中有3个点,而在类型2“ B”中只有1个点。 这种差异使得几乎所有的t检验都失败了,因此未作图。 我需要的是对具有匹配分数的组的t检验(在这种情况下, 类型1的所有t检验,类型2的A与C对比)。 使用的图如下:
library(RColorBrewer)
library(ggpubr)
library(BBmisc)
adf=read.csv("test1.txt",sep=" ")
myColors <- brewer.pal(length(unique(adf$ID)),"Set1")
names(myColors) <- unique(adf$ID)
colScale <- scale_colour_manual(name = "ID",values = myColors)
my_comparison=as.data.frame(combn(unique(adf$sampletype),2))
my_comparison=convertColsToList(my_comparison)
ggplot(adf,aes(x=sampletype,y=value,fill=sampletype ))+
geom_point(aes(group=ID,colour=ID))+
geom_line(aes(group=ID,colour=ID))+
facet_wrap(~response,scale="free")+
colScale+
ggtitle("Entropy")+
theme(text = element_text(size=20))+
stat_compare_means(comparisons = my_comparison,method = "t.test",paired = TRUE)
数据(保存为test1.txt):
sampletype value ID response
A 8.192 gr_6 Type2
B 13.99 gr_6 Type2
C 9.186 gr_6 Type2
A 5.616 gr_5 Type1
B 15.55 gr_5 Type1
C 7.126 gr_5 Type1
A 5.484 gr_4 Type1
B 12.54 gr_4 Type1
C 4.492 gr_4 Type1
A 9.949 gr_3 Type2
C 6.631 gr_3 Type2
A 2.533 gr_7 Type2
C 12.25 gr_7 Type2
A 2.196 gr_2 Type2
C 6.447 gr_2 Type2
A 11.20 gr_1 Type1
B 16.63 gr_1 Type1
C 6.637 gr_1 Type1
有解决方法吗?
解决方法
我有办法,但是由于缺少方差,所提供的数据未能通过t检验,所以我确实进行了更改。
library(tidyverse)
library(rstatix)
library(ggpubr)
df <- enframe(c("A 8.192 gr_6 Type2","B 13.99 gr_6 Type2","C 9.186 gr_6 Type2","A 5.616 gr_5 Type1","B 15.55 gr_5 Type1","C 7.126 gr_5 Type1","A 5.484 gr_4 Type1","B 12.54 gr_4 Type1","C 4.492 gr_4 Type1","A 9.949 gr_3 Type2","C 6.631 gr_3 Type2","A 2.533 gr_7 Type2","C 12.25 gr_7 Type2","A 2.196 gr_2 Type2","C 6.447 gr_2 Type2","A 11.20 gr_1 Type1","B 16.63 gr_1 Type1","C 6.637 gr_1 Type1"))
df <- df %>%
separate(value,into =c("sampletype","value","ID","response"),sep=" ") %>% select(-name) %>%
mutate(
value = sample(1:50,18)
)
keep_vars <- df %>%
group_by(response,sampletype) %>% tally() %>% filter(n>1) %>%
pivot_wider(names_from = sampletype,values_from = n) %>%split(.$response) %>%
map(pivot_longer,cols=-c(response)) %>% map(filter,value>=0) %>% bind_rows(.) %>%
mutate(UID = paste0(response,name)) %>%pull(UID)
df_plot <- df %>% mutate(UID = paste0(response,sampletype)) %>%
filter(UID %in% keep_vars) %>%
group_by(response) %>%
t_test(value~sampletype) %>% add_xy_position(x='sampletype')
ggpubr::ggline(df,x='sampletype',y='value',color = 'ID',add='jitter',facet.by = 'response'
) +
stat_pvalue_manual(df_plot,label = "p.adj.signif",tip.length = 0.01)
,
NColl的解决方案很棒,我也支持它,但是对于我的具体情况,它失败了。特别是在其中一种情况下只有一个值时(例如Type2,A,gr_X处的一个值)。这是我的错,该示例缺乏我想要的一般性。 但是,Ncoll使我意识到必须查看要比较的变量。 我不想继续打扰,所以我实施了解决方案。 实际上,我绘制了两个ggplot并将它们与gridExtra合并:
adf_r=adf[adf$sampletype %in% ctime & adf$response=="Responders",]
adf_nr=adf[adf$sampletype %in% ctime &d adf$response=="Non-responders",]
adrmyColors <- brewer.pal(length(unique(adf$ID)),"Set1")
names(myColors) <- unique(adf$ID)
colScale <- scale_colour_manual(name = "ID",values = myColors)
for(st in unique(adf_r$sampletype)){
if(sum(adf_r$sampletype==st)>=3){
keepvar1=c(keepvar1,st)
}
}
my_comparison=NULL
if(length(keepvar1)>1){
my_comparison=as.data.frame(combn(keepvar1,2))
my_comparison=convertColsToList(my_comparison)
}
p1=ggplot(adf_r,aes(x=sampletype,y=value,fill=sampletype ))+
geom_point(aes(group=ID,colour=ID))+
geom_line(aes(group=ID,colour=ID))+
colScale+
ggtitle("Entropy")+
theme(text = element_text(size=20))+
guides(fill=FALSE)+
stat_compare_means(comparisons = my_comparison,method = "t.test",paired = TRUE)
keepvar2=NULL
for(st in unique(adf_nr$sampletype)){
if(sum(adf_nr$sampletype==st)>=3){
keepvar2=c(keepvar2,st)
}
}
my_comparison=NULL
if(length(keepvar2)>1){
my_comparison=as.data.frame(combn(keepvar2,2))
my_comparison=convertColsToList(my_comparison)
}
p2=ggplot(adf_nr,colour=ID))+
colScale+
ggtitle("Entropy")+
guides(fill=FALSE)+
theme(text = element_text(size=20))+
stat_compare_means(comparisons = my_comparison,paired = TRUE)
final_p=gridExtra::grid.arrange(p1,p2,ncol = 2)