Skip to contents

Bins the observations by the fitted mean of the first model, computes the empirical conditional variance-to-mean ratio in each bin (the mean of the Pearson contributions \((y_i - \hat\mu_i)^2/\hat\mu_i\)), and sets it against the ratio each fitted family implies at those means. The families differ in how their dispersion moves with the mean: the CPB and the Katz family hold it essentially constant (at alpha and delta; the implied curves are the exact moments of the fitted pmf, so the renormalized CPB's ratio rises above alpha where the implied ceiling is small: by up to about a third at alpha = 0.3 where \(\lambda/(1-\alpha)\) lies between one and three, and toward one, the Poisson's value, as the rate falls toward zero; on the floor support it dips below alpha instead), the COM-Poisson, gamma-count, and double Poisson approach a constant only as the mean grows and rise toward the Poisson at small means, and the negative binomial's ratio rises linearly; the hyper-Poisson's cannot fall below \(1 - 1/\mu\) (\(1 - \mu\) below a mean of one), so it approaches one as the mean grows, and the EWP's follows its two tail weights. The profile therefore shows which variance function the data follow (a fitted distribution does not by itself identify the process behind it), where a family's fails, and whether the observed underdispersion is confined to a range of means. Zero-truncated fits are profiled on their conditional moments. With frequency weights (those of the first model) the bins hold equal weight rather than equal numbers of rows, each row kept whole, every bin statistic is a weighted mean, and n is the bin's weight total, so a weighted fit is profiled as the data it stands for.

Usage

dispersion_profile(
  object,
  ...,
  bins = 10,
  plot = TRUE,
  ylim = NULL,
  main = "Dispersion profile",
  xlab = "Fitted mean",
  ylab = "Conditional Var / Mean"
)

# S3 method for class 'dispersion_profile'
plot(
  x,
  ylim = NULL,
  main = "Dispersion profile",
  xlab = "Fitted mean",
  ylab = "Conditional Var / Mean",
  ...
)

Arguments

object

A fitted single-equation model (cpb, cpb_fe, gec, gec_fe, or count_reg); its fitted means define the bins and the empirical ratio.

...

Further fitted models on the same data, whose implied ratios are added as columns (name them for readable labels).

bins

Number of equal-frequency bins by fitted mean (default 10).

plot

Draw the profile (default TRUE); the table is returned invisibly either way.

ylim, main, xlab, ylab

Plot settings.

x

A "dispersion_profile" table.

Value

A data frame of class "dispersion_profile" with one row per bin: bin, n, mean_fitted, mean_y, ratio_empirical, and one ratio_<model> column per fitted model.

Examples

set.seed(4); n <- 400; x <- rnorm(n)
d <- data.frame(y = rgammacount(n, exp(0.8 + 0.6 * x), alpha = 2.5), x = x)
m_gc <- count_reg(y ~ x, d, family = "gammacount")
m_nb <- count_reg(y ~ x, d, family = "negbin")
m_cp <- cpb(y ~ x, d, truncated = FALSE, se = "none")
dispersion_profile(gammacount = m_gc, negbin = m_nb, cpb = m_cp)