# distributions

`distributions3`

, inspired by the eponynmous Julia package, provides a generic function interface to probability distributions. `distributions`

has two goals:

Replace the `rnorm()`

, `pnorm()`

, etc, family of functions with S3 methods for distribution objects

Be extremely well documented and friendly for students in intro stat classes.

The main generics are:

`random()`

: Draw samples from a distribution.
`pdf()`

: Evaluate the probability density (or mass) at a point.
`cdf()`

: Evaluate the cumulative probability up to a point.
`quantile()`

: Determine the quantile for a given probability. Inverse of `cdf()`

.

## Installation

`distributions`

is not yet on CRAN. You can install the development version with:

```
install.packages("devtools")
devtools::install_github("alexpghayes/distributions3")
```

## Basic Usage

The basic usage of `distributions3`

looks like:

```
library(distributions3)
X <- Bernoulli(0.1)
random(X, 10)
#> [1] 0 0 0 0 0 0 0 0 0 1
pdf(X, 1)
#> [1] 0.1
cdf(X, 0)
#> [1] 0.9
quantile(X, 0.5)
#> [1] 0
```

Note that `quantile()`

**always** returns lower tail probabilities. If you aren’t sure what this means, please read the last several paragraphs of `vignette("one-sample-z-confidence-interval")`

and have a gander at the plot.

## Contributing

I am very happy to review PRs and provide advice on how to add new functionality to the package. Documentation improvements are particularly appreciated!

To add a new distribution, the best way to get started is to look at `R/Beta.R`

and `tests/testthat/test-Beta.R`

, copy them, and modify them for whatever new distribution you’d like to add.

Please note that `distributions3`

is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.

For a comprehensive overview of the many packages providing various distribution related functionality see the CRAN Task View.

`distr`

is quite similar to `distributions`

, but uses S4 objects and is less focused on documentation.
`distr6`

builds on `distr`

, but uses R6 objects
`fitdistrplus`

provides extensive functionality for fitting various distributions but does not treat distributions themselves as objects