这篇文章有点相关这个帖子 https://stackoverflow.com/questions/62974766/removing-alpha-transparency-from-ggplot-legend-and-setting-x-axis-labels-to-be-f/62986181#62986181.
这里我有xy
分组数据,其中y
是分数:
library(dplyr)
library(ggplot2)
library(ggpmisc)
set.seed(1)
df1 <- data.frame(value = c(0.8,0.5,0.4,0.2,0.5,0.6,0.5,0.48,0.52),
age = rep(c("d2","d4","d45"),3),
group = c("A","A","A","B","B","B","C","C","C")) %>%
dplyr::mutate(time = as.integer(age)) %>%
dplyr::arrange(group,time) %>%
dplyr::mutate(group_age=paste0(group,"_",age))
df1$group_age <- factor(df1$group_age,levels=unique(df1$group_age))
我想要实现的是绘制df1
作为条形图,如下所示:
ggplot(df1,aes(x=group_age,y=value,fill=age)) +
geom_bar(stat='identity')
但我想适合每一个group
a binomial glm
with a logit link function
,它估计这些分数如何受到影响time
.
假设每个观察值有 100 个age
(time
) 每一个group
:
df2 <- do.call(rbind,lapply(1:nrow(df1),function(i){
data.frame(age=df1$age[i],group=df1$group[i],time=df1$time[i],group_age=df1$group_age[i],value=c(rep(T,100*df1$value[i]),rep(F,100*(1-df1$value[i]))))
}))
然后glm
对于每个group
(e.g., group
A
) is:
glm(value ~ time, dplyr::filter(df2, group == "A"), family = binomial(link='logit'))
所以我想添加到估计上方的图中regression
slopes
对于每个group
以及它们相应的p-value
s(类似于我为连续所做的事情df$value
in 这个帖子 https://stackoverflow.com/questions/62974766/removing-alpha-transparency-from-ggplot-legend-and-setting-x-axis-labels-to-be-f/62986181#62986181).
我认为使用:
ggplot(df1,aes(x=group_age,y=value,fill=age)) +
geom_bar(stat='identity') +
geom_smooth(data=df2,mapping=aes(x=group_age,y=value,group=group),color="black",method='glm',method.args=list(family=binomial(link='logit')),size=1,se=T) +
stat_poly_eq(aes(label=stat(p.value.label)),formula=my_formula,parse=T,npcx="center",npcy="bottom") +
scale_x_log10(name="Age",labels=levels(df$age),breaks=1:length(levels(df$age))) +
facet_wrap(~group) + theme_minimal()
可以工作,但我收到错误:
Error in Math.factor(x, base) : ‘log’ not meaningful for factors
知道如何做对吗?