# negative_binomial: Family function for Negative Binomial Mixed Models In GLMMadaptive: Generalized Linear Mixed Models using Adaptive Gaussian Quadrature

## Description

Specifies the information required to fit a Negative Binomial generalized linear mixed model, using `mixed_model()`.

## Usage

 `1` ```negative.binomial() ```

## Note

Currently only the log-link is implemented.

## Author(s)

Dimitris Rizopoulos [email protected]

## 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 61 62 63 64 65 66 67 68``` ```# simulate some data set.seed(102) dd <- expand.grid(f1 = factor(1:3), f2 = LETTERS[1:2], g = 1:30, rep = 1:15, KEEP.OUT.ATTRS = FALSE) mu <- 5 * (-4 + with(dd, as.integer(f1) + 4 * as.numeric(f2))) dd\$y <- rnbinom(nrow(dd), mu = mu, size = 0.5) gm1 <- mixed_model(fixed = y ~ f1 * f2, random = ~ 1 | g, data = dd, family = negative.binomial()) summary(gm1) # We do a likelihood ratio test with the Poisson mixed model gm0 <- mixed_model(fixed = y ~ f1 * f2, random = ~ 1 | g, data = dd, family = poisson()) anova(gm0, gm1) # Define a cutom-made family function to be used with mixed_model() # the required components are 'family', 'link', 'linkfun', 'linkinv' and 'log_dens'; # the extra functions 'score_eta_fun' and 'score_phis_fun' can be skipped and will # internally approximated using numeric derivatives (though it is better that you provide # them). my_negBinom <- function (link = "log") { stats <- make.link(link) log_dens <- function (y, eta, mu_fun, phis, eta_zi) { # the log density function phis <- exp(phis) mu <- mu_fun(eta) log_mu_phis <- log(mu + phis) comp1 <- lgamma(y + phis) - lgamma(phis) - lgamma(y + 1) comp2 <- phis * log(phis) - phis * log_mu_phis comp3 <- y * log(mu) - y * log_mu_phis out <- comp1 + comp2 + comp3 attr(out, "mu_y") <- mu out } score_eta_fun <- function (y, mu, phis, eta_zi) { # the derivative of the log density w.r.t. mu phis <- exp(phis) mu_phis <- mu + phis comp2 <- - phis / mu_phis comp3 <- y / mu - y / mu_phis # the derivative of mu w.r.t. eta (this depends on the chosen link function) mu.eta <- mu (comp2 + comp3) * mu.eta } score_phis_fun <- function (y, mu, phis, eta_zi) { # the derivative of the log density w.r.t. phis phis <- exp(phis) mu_phis <- mu + phis comp1 <- digamma(y + phis) - digamma(phis) comp2 <- log(phis) + 1 - log(mu_phis) - phis / mu_phis comp3 <- - y / mu_phis comp1 + comp2 + comp3 } structure(list(family = "user Neg Binom", link = stats\$name, linkfun = stats\$linkfun, linkinv = stats\$linkinv, log_dens = log_dens, score_eta_fun = score_eta_fun, score_phis_fun = score_phis_fun), class = "family") } fm <- mixed_model(fixed = y ~ f1 * f2, random = ~ 1 | g, data = dd, family = my_negBinom(), n_phis = 1, initial_values = list("betas" = poisson())) summary(fm) ```

GLMMadaptive documentation built on May 2, 2019, 2:51 p.m.