Haha so this should have been obvious to me all along, but the results for log_gdpPercap
with gaussian()
are identical to original gdpPercap
with lognormal()
library(tidyverse)
library(gapminder)
library(brms)
library(broom)
library(broom.mixed)
library(modelsummary)
gapminder <- gapminder %>%
mutate(log_gdpPercap = log(gdpPercap))
ggplot(gapminder, aes(x = gdpPercap)) + geom_density()
ggplot(gapminder, aes(x = log_gdpPercap)) + geom_density()
# This is all a **super bad** way to model panel data like this, but it's just an example
# Models with lm()
model_ols_original <- lm(gdpPercap ~ lifeExp, data = gapminder)
model_ols_logged <- lm(log_gdpPercap ~ lifeExp, data = gapminder)
# Models with brms
model_brms_original <- brm(bf(gdpPercap ~ lifeExp),
data = gapminder, seed = 1234,
family = gaussian(), chains = 2)
#> Compiling Stan program...
model_brms_lognormal <- brm(bf(gdpPercap ~ lifeExp),
data = gapminder, seed = 1234,
family = lognormal(), chains = 2)
#> Compiling Stan program...
# Compare results
modelsummary(list("lm, original outcome" = model_ols_original,
"brms, original outcome" = model_brms_original,
"lm, logged outcome" = model_ols_logged,
"brms, original outcome, lognormal family" = model_brms_lognormal),
coef_omit = "^sd__", gof_omit = ".", output = "markdown")
lm, original outcome | brms, original outcome | lm, logged outcome | brms, original outcome, lognormal family | |
---|---|---|---|---|
(Intercept) | -19277.249 | -19314.015 | 3.543 | 3.544 |
(914.093) | (910.017) | (0.084) | (0.082) | |
lifeExp | 445.445 | 445.880 | 0.078 | 0.078 |
(15.020) | (14.987) | (0.001) | (0.001) |
Created on 2021-02-28 by the reprex package (v0.3.0)