Description Usage Arguments Details Value See Also Examples

Define custom families (i.e. response distribution) for use in
brms models. It allows users to benefit from the modeling
flexibility of brms, while applying their self-defined likelihood
functions. All of the post-processing methods for `brmsfit`

objects can be made compatible with custom families.
See `vignette("brms_customfamilies")`

for more details.
For a list of built-in families see `brmsfamily`

.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | ```
custom_family(
name,
dpars = "mu",
links = "identity",
type = c("real", "int"),
lb = NA,
ub = NA,
vars = NULL,
loop = TRUE,
specials = NULL,
threshold = "flexible",
log_lik = NULL,
posterior_predict = NULL,
posterior_epred = NULL,
predict = NULL,
fitted = NULL,
env = parent.frame()
)
``` |

`name` |
Name of the custom family. |

`dpars` |
Names of the distributional parameters of
the family. One parameter must be named |

`links` |
Names of the link functions of the distributional parameters. |

`type` |
Indicates if the response distribution is
continuous ( |

`lb` |
Vector of lower bounds of the distributional
parameters. Defaults to |

`ub` |
Vector of upper bounds of the distributional
parameters. Defaults to |

`vars` |
Names of variables that are part of the likelihood function
without being distributional parameters. That is, |

`loop` |
Logical; Should the likelihood be evaluated via a loop
( |

`specials` |
A character vector of special options to enable for this custom family. Currently for internal use only. |

`threshold` |
Optional threshold type for custom ordinal families. Ignored for non-ordinal families. |

`log_lik` |
Optional function to compute log-likelihood values of
the model in |

`posterior_predict` |
Optional function to compute posterior prediction of
the model in |

`posterior_epred` |
Optional function to compute expected values of the
posterior predictive distribution of the model in |

`predict` |
Deprecated alias of 'posterior_predict'. |

`fitted` |
Deprecated alias of 'posterior_epred'. |

`env` |
An |

The corresponding probability density or mass `Stan`

functions need to have the same name as the custom family.
That is if a family is called `myfamily`

, then the
Stan functions should be called `myfamily_lpdf`

or
`myfamily_lpmf`

depending on whether it defines a
continuous or discrete distribution.

An object of class `customfamily`

inheriting
from class `brmsfamily`

.

`brmsfamily`

, `brmsformula`

,
`stanvar`

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | ```
## Not run:
## demonstrate how to fit a beta-binomial model
## generate some fake data
phi <- 0.7
n <- 300
z <- rnorm(n, sd = 0.2)
ntrials <- sample(1:10, n, replace = TRUE)
eta <- 1 + z
mu <- exp(eta) / (1 + exp(eta))
a <- mu * phi
b <- (1 - mu) * phi
p <- rbeta(n, a, b)
y <- rbinom(n, ntrials, p)
dat <- data.frame(y, z, ntrials)
# define a custom family
beta_binomial2 <- custom_family(
"beta_binomial2", dpars = c("mu", "phi"),
links = c("logit", "log"), lb = c(NA, 0),
type = "int", vars = "vint1[n]"
)
# define the corresponding Stan density function
stan_density <- "
real beta_binomial2_lpmf(int y, real mu, real phi, int N) {
return beta_binomial_lpmf(y | N, mu * phi, (1 - mu) * phi);
}
"
stanvars <- stanvar(scode = stan_density, block = "functions")
# fit the model
fit <- brm(y | vint(ntrials) ~ z, data = dat,
family = beta_binomial2, stanvars = stanvars)
summary(fit)
# define a *vectorized* custom family (no loop over observations)
# notice also that 'vint' no longer has an observation index
beta_binomial2_vec <- custom_family(
"beta_binomial2", dpars = c("mu", "phi"),
links = c("logit", "log"), lb = c(NA, 0),
type = "int", vars = "vint1", loop = FALSE
)
# define the corresponding Stan density function
stan_density_vec <- "
real beta_binomial2_lpmf(int[] y, vector mu, real phi, int[] N) {
return beta_binomial_lpmf(y | N, mu * phi, (1 - mu) * phi);
}
"
stanvars_vec <- stanvar(scode = stan_density_vec, block = "functions")
# fit the model
fit_vec <- brm(y | vint(ntrials) ~ z, data = dat,
family = beta_binomial2_vec,
stanvars = stanvars_vec)
summary(fit_vec)
## End(Not run)
``` |

Embedding an R snippet on your website

Add the following code to your website.

For more information on customizing the embed code, read Embedding Snippets.