Become an expert in R — Interactive courses, Cheat Sheets, certificates and more!
Get Started for Free

skellam

Skellam Distribution Family Function


Description

Estimates the two parameters of a Skellam distribution by maximum likelihood estimation.

Usage

skellam(lmu1 = "loglink", lmu2 = "loglink", imu1 = NULL, imu2 = NULL,
        nsimEIM = 100, parallel = FALSE, zero = NULL)

Arguments

lmu1, lmu2

Link functions for the mu1 and mu2 parameters. See Links for more choices and for general information.

imu1, imu2

Optional initial values for the parameters. See CommonVGAMffArguments for more information. If convergence failure occurs (this VGAM family function seems to require good initial values) try using these arguments.

nsimEIM, parallel, zero

See CommonVGAMffArguments for information. In particular, setting parallel=TRUE will constrain the two means to be equal.

Details

The Skellam distribution models the difference between two independent Poisson distributions (with means mu_j, say). It has density function

f(y;mu1,mu2) = ( μ1 / mu_2 )^(y/2) * exp(-mu1-mu2 ) * I_(|y|)( 2 * sqrt(mu1*mu2))

where y is an integer, mu1 > 0, mu2 > 0. Here, I_v is the modified Bessel function of the first kind with order v.

The mean is mu1 - mu2 (returned as the fitted values), and the variance is mu1 + mu2. Simulated Fisher scoring is implemented.

Value

An object of class "vglmff" (see vglmff-class). The object is used by modelling functions such as vglm and vgam.

Warning

This VGAM family function seems fragile and very sensitive to the initial values. Use very cautiously!!

Note

Numerical problems may occur for data if mu1 and/or mu2 are large.

References

Skellam, J. G. (1946). The frequency distribution of the difference between two Poisson variates belonging to different populations. Journal of the Royal Statistical Society, Series A, 109, 296.

See Also

Examples

## Not run: 
sdata <- data.frame(x2 = runif(nn <- 1000))
sdata <- transform(sdata, mu1 = exp(1 + x2), mu2 = exp(1 + x2))
sdata <- transform(sdata, y = rskellam(nn, mu1, mu2))
fit1 <- vglm(y ~ x2, skellam, data = sdata, trace = TRUE, crit = "coef")
fit2 <- vglm(y ~ x2, skellam(parallel = TRUE), data = sdata, trace = TRUE)
coef(fit1, matrix = TRUE)
coef(fit2, matrix = TRUE)
summary(fit1)
# Likelihood ratio test for equal means:
pchisq(2 * (logLik(fit1) - logLik(fit2)),
       df = df.residual(fit2) - df.residual(fit1), lower.tail = FALSE)
lrtest(fit1, fit2)  # Alternative

## End(Not run)

VGAM

Vector Generalized Linear and Additive Models

v1.1-5
GPL-3
Authors
Thomas Yee [aut, cre], Cleve Moler [ctb] (author of several LINPACK routines)
Initial release
2021-01-13

We don't support your browser anymore

Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.