# univariateML ## Overview

`univariateML` is an `R`-package for user-friendly maximum likelihood estimation of a selection of parametric univariate densities. In addition to basic estimation capabilities, this package support visualization through `plot` and `qqmlplot`, model selection by `AIC` and `BIC`, confidence sets through the parametric bootstrap with `bootstrapml`, and convenience functions such as the density, distribution function, quantile function, and random sampling at the estimated distribution parameters.

## Installation

Use the following command from inside `R`:

``````# install.packages("devtools")
devtools::install_github("JonasMoss/univariateML")``````

## Usage

The core of `univariateML` are the `ml***` functions, where `***` is a distribution suffix such as `norm`, `gamma`, or `weibull`.

``````library("univariateML")
mlweibull(egypt\$age)
#> Maximum likelihood estimates for the Weibull model
#>  shape   scale
#>  1.404  33.564``````

Now we can visually assess the fit of the Weibull model to the `egypt` data with a plot.

``````hist(egypt\$age, freq = FALSE, xlab = "Mortality", main = "Egypt")
lines(mlweibull(egypt\$age))`````` ## Implementations

Analytic formulae for the maximum likelihood estimates are used whenever they exist. Most `ml***` functions without analytic solutions have a custom made Newton-Raphson solver. These can be much faster than a naïve solution using `nlm` or `optim`. For example, `mlbeta` has a large speedup over the naïve solution using `nlm`.

``````# install.packages("microbenchmark")
set.seed(313)
x <- rbeta(500, 2, 7)

microbenchmark::microbenchmark(
univariateML = univariateML::mlbeta(x),
naive = nlm(function(p) -sum(dbeta(x, p, p, log = TRUE)), p = c(1, 1)))
#> Unit: microseconds
#>          expr     min       lq      mean   median       uq     max neval
#>  univariateML   864.2  1102.90  1305.743  1192.30  1340.95  6007.9   100
#>         naive 36398.0 39097.35 41108.804 40530.15 43035.50 50693.3   100``````

The maximum likelihood estimators in this package have all been subject to testing, see the `tests` folder for details.

## Documentation

For an overview of the package and its features see the overview vignette. For a list of implemented densities see the start of the details vignette. For an illustration of how this package can make an otherwise long and laborious process much simpler, see the copula vignette.

## How to Contribute or Get Help

Please read `CONTRIBUTING.md` for details about how to contribute or get help.