# estimate_density: Density Estimation In DominiqueMakowski/bayestestR: Understand and Describe Bayesian Models and Posterior Distributions

## Description

This function is a wrapper over different methods of density estimation. By default, it uses the base R `density` with by default uses a different smoothing bandwidth (`"SJ"`) from the legacy default implemented the base R `density` function (`"nrd0"`). However, Deng \& Wickham suggest that `method = "KernSmooth"` is the fastest and the most accurate.

## Usage

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22``` ```estimate_density( x, method = "kernel", precision = 2^10, extend = FALSE, extend_scale = 0.1, bw = "SJ", ... ) ## S3 method for class 'data.frame' estimate_density( x, method = "kernel", precision = 2^10, extend = FALSE, extend_scale = 0.1, bw = "SJ", ci = NULL, group_by = NULL, ... ) ```

## Arguments

 `x` Vector representing a posterior distribution, or a data frame of such vectors. Can also be a Bayesian model (`stanreg`, `brmsfit`, `MCMCglmm`, `mcmc` or `bcplm`) or a `BayesFactor` model. `method` Density estimation method. Can be `"kernel"` (default), `"logspline"` or `"KernSmooth"`. `precision` Number of points of density data. See the `n` parameter in `density`. `extend` Extend the range of the x axis by a factor of `extend_scale`. `extend_scale` Ratio of range by which to extend the x axis. A value of `0.1` means that the x axis will be extended by `1/10` of the range of the data. `bw` See the eponymous argument in `density`. Here, the default has been changed for `"SJ"`, which is recommended. `...` Currently not used. `ci` The confidence interval threshold. Only used when `method = "kernel"`. `group_by` Optional character vector. If not `NULL` and `x` is a data frame, density estimation is performed for each group (subset) indicated by `group_by`.

## Note

There is also a `plot()`-method implemented in the see-package.

## References

Deng, H., & Wickham, H. (2011). Density estimation in R. Electronic publication.

## Examples

 ``` 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 60``` ```library(bayestestR) set.seed(1) x <- rnorm(250, mean = 1) # Basic usage density_kernel <- estimate_density(x) # default method is "kernel" hist(x, prob = TRUE) lines(density_kernel\$x, density_kernel\$y, col = "black", lwd = 2) lines(density_kernel\$x, density_kernel\$CI_low, col = "gray", lty = 2) lines(density_kernel\$x, density_kernel\$CI_high, col = "gray", lty = 2) legend("topright", legend = c("Estimate", "95% CI"), col = c("black", "gray"), lwd = 2, lty = c(1, 2) ) # Other Methods density_logspline <- estimate_density(x, method = "logspline") density_KernSmooth <- estimate_density(x, method = "KernSmooth") density_mixture <- estimate_density(x, method = "mixture") hist(x, prob = TRUE) lines(density_kernel\$x, density_kernel\$y, col = "black", lwd = 2) lines(density_logspline\$x, density_logspline\$y, col = "red", lwd = 2) lines(density_KernSmooth\$x, density_KernSmooth\$y, col = "blue", lwd = 2) lines(density_mixture\$x, density_mixture\$y, col = "green", lwd = 2) # Extension density_extended <- estimate_density(x, extend = TRUE) density_default <- estimate_density(x, extend = FALSE) hist(x, prob = TRUE) lines(density_extended\$x, density_extended\$y, col = "red", lwd = 3) lines(density_default\$x, density_default\$y, col = "black", lwd = 3) # Multiple columns df <- data.frame(replicate(4, rnorm(100))) head(estimate_density(df)) # Grouped data estimate_density(iris, group_by = "Species") estimate_density(iris\$Petal.Width, group_by = iris\$Species) ## Not run: # rstanarm models # ----------------------------------------------- library(rstanarm) model <- stan_glm(mpg ~ wt + gear, data = mtcars, chains = 2, iter = 200, refresh = 0) head(estimate_density(model)) library(emmeans) head(estimate_density(emtrends(model, ~1, "wt"))) # brms models # ----------------------------------------------- library(brms) model <- brms::brm(mpg ~ wt + cyl, data = mtcars) estimate_density(model) ## End(Not run) ```

DominiqueMakowski/bayestestR documentation built on July 27, 2021, 4:12 p.m.