Fitted and predicted draws on average

I am struggling to wrap my head around the difference between fitted and predict. In my case, it is about the multinomial family. There are a few relevant posts here and on GitHub. After reading them and pp_expect.R with posterior_predict.R, my current understanding is that fitted gives draws of the expected value of the posterior distribution, while predict gives draws from the posterior distribution. How far am I from the truth? If not too far, should one expect the means of the two to match? If I take the average of the draws from fitted and the average of those from predict, should they not be the same? In my example, they deviate.

You are correct. The deviation are likely because of random error in the posterior predictions.

Thank you for the quick reply. I guess I misuse some of the functions then. Let me give a minimal working example:

data <- tribble(
    ~a,   ~b,   ~c, ~total,
  3000, 3000, 7000,  13000,
data$counts <- with(data, cbind(a, b, c))
formula <- brmsformula(counts | trials(total) ~ 1)
fit <- brm(formula, data, multinomial(), seed = 42)

data$counts / data$total
#              a         b         c
# [1,] 0.2307692 0.2307692 0.5384615

colMeans(fitted(fit, summary = FALSE)) / data$total
#              a         b         c
# [1,] 0.2309553 0.2307284 0.5383163

colMeans(predict(fit, summary = FALSE)) / data$total
#              a         b         c
# [1,] 0.1364585 0.2725709 0.5909706

This difference cannot arguably be attributed to chance. I have tried with different seeds. In addition, if it was about chance, it would go away with the sample size.

I will take a look. Thanks!

Thanks! It turned out to be a slightly embarassing typo as I wrote pcategorical instead of dcategorical so accidentally used the cumulative distribution function… Should be fixed now on github.

That was fast! Thank you so much!