Parse distribution specifications into columns of a data frame
Parse distribution specifications into columns of a data frame
Parses simple string distribution specifications, like "normal(0, 1)", into two columns of a data frame, suitable for use with the dist and args aesthetics of stat_slabinterval()
and its shortcut stats (like stat_halfeye()). This format is output by brms::get_prior, making it particularly useful for visualizing priors from brms models.
object: A character vector containing distribution specifications or a data frame with a column containing distribution specifications.
...: Arguments passed to other implementations of parse_dist.
dist: The name of the output column to contain the distribution name
args: The name of the output column to contain the arguments to the distribution
dist_obj: The name of the output column to contain a distributional object representing the distribution
package: The package or environment to search for distribution functions in. Passed to distributional::dist_wrap(). One of:
NULL: use the calling environment
a string: use the environment for the package with the given name
an environment : use the given environment
to_r_names: If TRUE (the default), certain common aliases for distribution names are automatically translated into names that R can recognize (i.e., names which have functions starting with r, p, q, and d representing random number generators, distribution functions, etc. for that distribution), using the r_dist_name function. For example, "normal" is translated into "norm" and "lognormal" is translated into "lnorm".
dist_col: A bare (unquoted) column or column expression that resolves to a character vector of distribution specifications.
lb: The name of an input column (for data.frame and brms::prior objects) that contains the lower bound of the distribution, which if present will produce a truncated distribution using dist_truncated(). Ignored if lb is NULL or if object[[lb]] is NA for the corresponding input row.
ub: The name of an input column (for data.frame and brms::prior objects) that contains the upper bound of the distribution, which if present will produce a truncated distribution using dist_truncated(). Ignored if ub is NULL or if object[[ub]] is NA for the corresponding input row.
dist_name: For r_dist_name, a character vector of distribution names to be translated into distribution names R recognizes. Unrecognized names are left as-is.
Returns
parse_dist returns a data frame containing at least two columns named after the dist and args
parameters. If the input is a data frame, the output is a data frame of the same length with those two columns added. If the input is a character vector or factor, the output is a two-column data frame with the same number of rows as the length of the input.
r_dist_name returns a character vector the same length as the input containing translations of the input names into distribution names R can recognize.
Details
parse_dist() can be applied to character vectors or to a data frame + bare column name of the column to parse, and returns a data frame with ".dist" and ".args" columns added. parse_dist() uses r_dist_name() to translate distribution names into names recognized by R.
r_dist_name() takes a character vector of names and translates common names into R distribution names. Names are first made into valid R names using make.names(), then translated (ignoring character case, ".", and "_"). Thus, "lognormal", "LogNormal", "log_normal", "log-Normal", and any number of other variants all get translated into "lnorm".
Examples
library(dplyr)# parse dist can operate on strings directly...parse_dist(c("normal(0,1)","student_t(3,0,1)"))# ... or on columns of a data frame, where it adds the# parsed specs back on as columnsdata.frame(prior = c("normal(0,1)","student_t(3,0,1)"))%>% parse_dist(prior)# parse_dist is particularly useful with the output of brms::prior(),# which follows the same format as above
See Also
See stat_slabinterval() and its shortcut stats, which can easily make use of the output of this function using the dist and args aesthetics.