The **enrichwith** R
package provides the `enrich`

method to enrich list-like R objects
with new, relevant components. The resulting objects preserve their
class, so all methods associated with them still apply.

This vignette is a demo of the available enrichment options for
`family`

objects, focusing on objects that correspond to members of
the exponential family of distributions.

`family`

objects`family`

objects specify characteristics of the models used by
functions such as `glm`

. The families implemented in the `stats`

package include `binomial`

, `gaussian`

, `Gamma`

, `inverse.gaussian`

,
and `poisson`

, which obvious corresponding distributions. These
distributions are all special cases of the exponential family of
distributions with probability mass or density function of the
form
$$
f_{Y}(y) = \exp\left{\frac{y \theta - b(\theta) - c_1(y)}{\phi/m} - \frac{1}{2}a\left(-\frac{m}{\phi}\right) + c_2(y) \right}
$$
for some sufficiently smooth functions $b(.)$, $c_1(.)$, $a(.)$ and $c_2(.)$, and a fixed weight $m$. The expected value and the variance of $Y$ are then
\begin{align*}
E(Y) & = \mu = b'(\theta) \
Var(Y) & = \frac{\phi}{m}b''(\theta) = \frac{\phi}{m}V(\mu)
\end{align*}
where $V(\mu)$ and $\phi$ are the variance function and the dispersion parameter, respectively. Below we list the characteristics of the distributions supported by `family`

objects.

$\theta = \mu$, $\displaystyle b(\theta) = \frac{\theta^2}{2}$, $\displaystyle c_1(y) = \frac{y^2}{2}$, $\displaystyle a(\zeta) = -\log(-\zeta)$, $\displaystyle c_2(y) = -\frac{1}{2}\log(2\pi)$

$\displaystyle \theta = \log\frac{\mu}{1- \mu}$, $\displaystyle b(\theta) = \log(1 + e^\theta)$, $\displaystyle \phi = 1$, $\displaystyle c_1(y) = 0$, $\displaystyle a(\zeta) = 0$, $\displaystyle c_2(y) = \log{m\choose{my}}$

$\displaystyle \theta = \log\mu$, $\displaystyle b(\theta) = e^\theta$, $\displaystyle \phi = 1$, $\displaystyle c_1(y) = 0$, $\displaystyle a(\zeta) = 0$, $\displaystyle c_2(y) = -\log\Gamma(y + 1)$

$\displaystyle \theta = -\frac{1}{\mu}$, $\displaystyle b(\theta) = -\log(-\theta)$, $\displaystyle c_1(y) = -\log y$, $\displaystyle a(\zeta) = 2 \log \Gamma(-\zeta) + 2 \zeta \log\left(-\zeta\right)$, $\displaystyle c_2(y) = -\log y$

$\displaystyle \theta = -\frac{1}{2\mu^2}$, $\displaystyle b(\theta) = -\sqrt{-2\theta}$, $\displaystyle c_1(y) = \frac{1}{2y}$, $\displaystyle a(\zeta) = -\log(-\zeta)$, $\displaystyle c_2(y) = -\frac{1}{2}\log\left(\pi y^3\right)$

`family`

objects`family`

objects provide functions for the variance function (`variance`

), a specification of deviance residuals (`dev.resids`

) and the Akaike information criterion (`aic`

). For example

inverse.gaussian()$dev.resids inverse.gaussian()$variance inverse.gaussian()$aic

`family`

objectsThe **enrichwith** R package provides methods for the enrichment of
`family`

objects with a function that links the natural parameter
$\theta$ with $\mu$, the function $b(\theta)$, the first two
derivatives of $V(\mu)$, $a(\zeta)$ and its first four derivatives,
and $c_1(y)$ and $c_2(y)$. To illustrate, let's write a function that
reconstructs the densities and probability mass functions from the
components that result from enrichment

library("enrichwith") dens <- function(y, m = 1, mu, phi, family) { object <- enrich(family) with(object, { c2 <- if (family == "binomial") c2fun(y, m) else c2fun(y) exp(m * (y * theta(mu) - bfun(theta(mu)) - c1fun(y))/phi - 0.5 * afun(-m/phi) + c2) }) }

The following chunks test `dens`

for a few distributions against the
standard `d*`

functions

## Normal all.equal(dens(y = 0.2, m = 3, mu = 1, phi = 3.22, gaussian()), dnorm(x = 0.2, mean = 1, sd = sqrt(3.22/3))) ## Gamma all.equal(dens(y = 3, m = 1.44, mu = 2.3, phi = 1.3, Gamma()), dgamma(x = 3, shape = 1.44/1.3, 1.44/(1.3 * 2.3))) ## Inverse gaussian all.equal(dens(y = 0.2, m = 7.23, mu = 1, phi = 3.22, inverse.gaussian()), SuppDists::dinvGauss(0.2, nu = 1, lambda = 7.23/3.22)) ## Binomial all.equal(dens(y = 0.34, m = 100, mu = 0.32, phi = 1, binomial()), dbinom(x = 34, size = 100, prob = 0.32))

**Any scripts or data that you put into this service are public.**

Embedding an R snippet on your website

Add the following code to your website.

For more information on customizing the embed code, read Embedding Snippets.