Add simulated poisson distributions to a ggplot

2019-06-26 04:00发布

问题:

I have made a poisson regression and then visualised the model:

library(ggplot2)
year <- 1990:2010
count <- c(29, 8, 13, 3, 20, 14, 18, 15, 10, 19, 17, 18, 24, 47, 52, 24, 25, 24, 31, 56, 48)
df <- data.frame(year, count)
my_glm <- glm(count ~ year, family = "poisson", data = df)
my_glm$model$fitted <- predict(my_glm, type = "response")
ggplot(my_glm$model) + geom_point(aes(year, count)) + geom_line(aes(year, fitted))

Now I want to add these simulated Poisson distributions to the plot:

library(plyr)
poisson_sim <- llply(my_glm$model$fitted, function(x) rpois(100, x))

The plot should look something like this (red points are photoshopped):

回答1:

You can convert simulated values to vector and then use them to make new data frame where one column contains years repeated each 100 times and second column is simulated values.

poisson_sim <- unlist(llply(my_glm$model$fitted, function(x) rpois(100, x)))
df.new<-data.frame(year=rep(year,each=100),sim=poisson_sim)

Then add simulated points with geom_jitter().

ggplot(my_glm$model) + geom_point(aes(year, count)) + geom_line(aes(year, fitted))+
      geom_jitter(data=df.new,aes(year,sim),color="red")