Home > OS >  Fitted values and confidence intervals on grouped bar chart
Fitted values and confidence intervals on grouped bar chart

Time:01-23

I have a dataset with 5 levels for treatment and 4 levels for time, and values for germination for those 20 combinations. I am trying to make a grouped bar chart that will show fitted values and confidence intervals from a glm that I have made.

mod_time <- glm(cbind(germination, total - germination) ~ time, data = df, family = binomial)

df$time_fit <- predict(mod_time, newdata = df, interval = "confidence")

conf_int <- confint(mod_time)

ggplot(df, aes(x = treatment, y = germination, fill = time))  
  geom_col(position = "dodge")  
  geom_line(aes(y = time_fit), position = position_dodge(width = 0.9), color = "blue")  
  geom_errorbar(aes(ymin = conf_int[,2], ymax = conf_int[,3]), position = position_dodge(width = 0.9))  
  labs(x = "Scarification", y = "Germination/Total", fill = "Time")

However this just gives me a grouped bar chart without the confidence intervals and runs up errors about the confidence intervals not having the correct dimensions. The confidence intervals seem to be made into a vector rather than a matrix. Any ideas as to what I am doing wrong?

CodePudding user response:

I didn't have your data, so with some toy data this is how I'd approach this:

It doesn't look like predict.glm supplies confidence intervals, even with interval="confidence" so I used emmeans to generate a dataset with the mean probabilties and confidence intervals for each group. type=response made sure the results came back on the probability scale not the 'xb' scale.

These are asymptotic CIs so for small counts I would probably not use this method but generate exact CIs instead.

library(ggplot2)
library(emmeans)

dat <- data.frame(time = factor(1:5), germination=sample(100,5), total=100)

mod_time <- glm(cbind(germination, total-germination) ~ time, data=dat, family="binomial")

preds <- as.data.frame(emmeans(mod_time, ~time, type="response"))

ggplot(preds, aes(x=time, y=prob, ymin=asymp.LCL, ymax=asymp.UCL))   
  geom_col(aes(fill=time))   
  geom_errorbar(width=0.5)

enter image description here

  • Related