问题描述
我有一个 data.frame
,其中包含每两组观察到的成功/失败结果以及预期概率:
library(dplyr)
observed.probability.df <- data.frame(group = c("A","B"),p = c(0.4,0.6))
expected.probability.df <- data.frame(group = c("A",p = qlogis(c(0.45,0.55)))
observed.data.df <- do.call(rbind,lapply(c("A",function(g)
data.frame(group = g,value = c(rep(0,1000*dplyr::filter(observed.probability.df,group != g)$p),rep(1,group == g)$p)))
)) %>% dplyr::left_join(expected.probability.df)
observed.probability.df$group <- factor(observed.probability.df$group,levels = c("A","B"))
observed.data.df$group <- factor(observed.data.df$group,"B"))
我正在使用 binomial
项对这些数据进行逻辑回归(glm
logit
和 link
function
offset
) :
fit <- glm(value ~ group + offset(p),data = observed.data.df,family = binomial(link = 'logit'))
现在,我想使用 ggplot2
的 geom_bar
将这些数据绘制为条形图,由 group
进行颜色编码,并添加趋势线和fit
中估计的阴影标准误差区域。
为此我会使用 stat_smooth
,但我认为它无法处理公式中的 offset
项,所以看起来我需要以另一种方式组装这个数字。
要获取我使用的条形图和趋势线:
slope.est <- function(x,ests) plogis(ests[1] + ests[2] * x)
library(ggplot2)
ggplot(observed.probability.df,aes(x = group,y = p,fill = group)) +
geom_bar(stat = 'identity') +
stat_function(fun = slope.est,args=list(ests=coef(fit)),size=2,color="black") +
scale_x_discrete(name = NULL,labels = levels(observed.probability.df$group),breaks = sort(unique(observed.probability.df$group))) +
theme_minimal() + theme(legend.title = element_blank()) + ylab("Fraction of cells")
那么问题是如何添加趋势线周围的阴影标准误差?
使用 stat_function
我可以将整个区域从标准误差的上限一直向下到 X 轴:
ggplot(observed.probability.df,color="black") +
stat_function(fun = slope.est,args=list(ests=summary(fit)$coefficients[,1]+summary(fit)$coefficients[,2]),geom='area',fill="gray",alpha=0.25) +
scale_x_discrete(name = NULL,breaks = sort(unique(observed.probability.df$group))) +
theme_minimal() + theme(legend.title = element_blank()) + ylab("Fraction of cells")
接近但不完全在那里。
知道如何从低于标准误差下限的区域上方的阴影区域中减去吗?也许 geom_ribbon
是通往这里的路,但我不知道如何将它与 slope.est
function
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)