distionary:
The distionary package is more useful when augmented with the distplyr package, which provides a grammar for distribution manipulation.
distionary is not on CRAN yet. You can download the development version from GitHub with:
# install.packages("devtools")
devtools::install_github("vincenzocoia/distionary")
Or, install distplyr, and distionary will come along with it.
library(distionary)
We can make distributions from standard families, like beta and Poisson:
(d_beta <- dst_beta(2, 4))
#> [1] "beta" "parametric" "dst"
#>
#> name :
#> [1] "beta"
(d_pois <- dst_pois(1.2))
#> [1] "pois" "parametric" "dst"
#>
#> name :
#> [1] "pois"
We can also make empirical distributions from data:
x <- c(4.1, 2.3, 3.4, 5.5, 1.0, 6.8)
(d_emp <- dst_empirical(x))
#> [1] "finite" "dst"
#>
#> probabilities :
#> # A tibble: 6 × 2
#> location size
#> <dbl> <dbl>
#> 1 1 0.167
#> 2 2.3 0.167
#> 3 3.4 0.167
#> 4 4.1 0.167
#> 5 5.5 0.167
#> 6 6.8 0.167
We can evaluate different distributional forms, such as the density or pmf:
eval_density(d_beta, at = c(0.1, 0.2))
#> [1] 1.458 2.048
eval_pmf(d_pois, at = c(1, 1.5, 3))
#> [1] 0.36143305 0.00000000 0.08674393
Or, we can enframe the results in a tibble:
enframe_cdf(d_beta, d_pois, d_emp, at = c(0.1, 0.6, 1.5, 3))
#> # A tibble: 4 × 4
#> .arg cdf_d_beta cdf_d_pois cdf_d_emp
#> <dbl> <dbl> <dbl> <dbl>
#> 1 0.1 0.0815 0.301 0
#> 2 0.6 0.913 0.301 0
#> 3 1.5 1 0.663 0.167
#> 4 3 1 0.966 0.333
Evaluate properties of the distributions:
mean(d_beta)
#> [1] 0.3333333
skewness(d_pois)
#> [1] 0.9128709
range(d_emp)
#> [1] 1.0 6.8
You can make your own distributions, too. Want to make a distribution
whose density decays linearly from 0 to a
? Just ensure the p
/d
/q
functions are available:
# dlinear <- function(x, a) (a - x) / (a^2 / 2)
# plinear <- function(x, a) x * (a - x / 2) / (a^2 / 2)
# qlinear <- function(p, a) a * (1 - sqrt(1 - p))
# (my_dst <- dst_parametric("linear", a = 3, .variable = "continuous"))
Hazard function:
# plot(my_dst, "hazard", from = 0, to = 3)
Mean:
# mean(my_dst)
Please note that the distionary project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.