VGAM (version 1.1-6)

gaitdzeta: Generally--Altered, --Inflated, --Truncated and Deflated Zeta Regression


Fits a generally--altered, --inflated, --truncated and deflated zeta regression by MLE. The GAITD combo model having 7 types of special values is implemented. This allows mixtures of zetas on nested and/or partitioned support as well as a multinomial logit model for altered, inflated and deflated values.


gaitdzeta(a.mix = NULL, i.mix = NULL, d.mix = NULL,
         a.mlm = NULL, i.mlm = NULL, d.mlm = NULL,
         truncate = NULL, = Inf,
         zero = c("pobs", "pstr", "pdip"), eq.ap = TRUE, eq.ip = TRUE,
         eq.dp = TRUE, parallel.a = FALSE,
         parallel.i = FALSE, parallel.d = FALSE,
         lshape.p = "loglink", lshape.a = lshape.p,
         lshape.i = lshape.p, lshape.d = lshape.p,
         type.fitted = c("mean", "shapes", "pobs.mlm", "pstr.mlm",
         "pdip.mlm", "pobs.mix", "pstr.mix", "pdip.mix", "Pobs.mix",
         "Pstr.mix", "Pdip.mix", "nonspecial",
         "Numer", "Denom.p", "sum.mlm.i", "sum.mix.i", "sum.mlm.d",
         "sum.mix.d", "ptrunc.p", "cdf.max.s"),
         gshape.p = -expm1(-ppoints(7)), gpstr.mix = ppoints(7) / 3,
         gpstr.mlm = ppoints(7) / (3 + length(i.mlm)),
         imethod = 1, mux.init = c(0.75, 0.5, 0.75),
         ishape.p = NULL, ishape.a = ishape.p,
         ishape.i = ishape.p, ishape.d = ishape.p,
         ipobs.mix = NULL, ipstr.mix = NULL, ipdip.mix = NULL,
         ipobs.mlm = NULL, ipstr.mlm = NULL, ipdip.mlm = NULL,
         byrow.aid = FALSE, ishrinkage = 0.95, probs.y = 0.35)



See gaitdpoisson. Only = Inf is allowed because some equations are intractable.

a.mix, i.mix, d.mix
a.mlm, i.mlm, d.mlm
lshape.p, lshape.a, lshape.i, lshape.d

Link functions. See gaitdpoisson and Links for more choices and information.

eq.ap, eq.ip, eq.dp

Single logical each. See gaitdpoisson

parallel.a, parallel.i, parallel.d

Single logical each. See gaitdpoisson.

type.fitted, mux.init
imethod, ipobs.mix, ipstr.mix, ipdip.mix

See CommonVGAMffArguments and gaitdpoisson for information.

ipobs.mlm, ipstr.mlm, ipdip.mlm, byrow.aid

See CommonVGAMffArguments and gaitdpoisson for information.

gpstr.mix, gpstr.mlm

See CommonVGAMffArguments and gaitdpoisson for information.

gshape.p, ishape.p

See CommonVGAMffArguments and gaitdpoisson for information. The former is used only if the latter is not given. Practical experience has shown that good initial values are needed, so if convergence is not obtained then try a finer grid.

ishape.a, ishape.i, ishape.d

See CommonVGAMffArguments and gaitdpoisson for information.

probs.y, ishrinkage

See CommonVGAMffArguments for information.


See gaitdpoisson and CommonVGAMffArguments for information.


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


See gaitdpoisson.


Many details to this family function can be found in gaitdpoisson because it is also a 1-parameter discrete distribution. This function currently does not handle multiple responses. Further details are at Gaitdzeta.

Apart from the order of the linear/additive predictors, the following are (or should be) equivalent: gaitdzeta() and zetaff(), gaitdzeta(a.mix = 1) and oazeta(zero = "pobs1"), gaitdzeta(i.mix = 1) and oizeta(zero = "pstr1"), gaitdzeta(truncate = 1) and otzeta(). The functions oazeta, oizeta and otzeta have been placed in VGAMdata.

See Also

Gaitdzeta, zetaff, Gaitdpois, gaitdpoisson, gaitdlog, spikeplot, goffset, Trunc, oazeta, oizeta, otzeta, CommonVGAMffArguments, rootogram4, simulate.vlm.


Run this code
avec <- c(5, 10)  # Alter these values parametrically
ivec <- c(3, 15)  # Inflate these values
tvec <- c(6, 7)   # Truncate these values
set.seed(1); pobs.a <- pstr.i <- 0.1
gdata <- data.frame(x2 = runif(nn <- 1000))
gdata <- transform(gdata, shape.p = logitlink(2, inverse = TRUE))
gdata <- transform(gdata,
  y1 = rgaitdzeta(nn, shape.p, a.mix = avec, pobs.mix = pobs.a,
                  i.mix = ivec, pstr.mix = pstr.i, truncate = tvec))
gaitdzeta(a.mix = avec, i.mix = ivec)
with(gdata, table(y1))
spikeplot(with(gdata, y1), las = 1)
fit7 <- vglm(y1 ~ 1, trace = TRUE, data = gdata, crit = "coef",
             gaitdzeta(i.mix = ivec, truncate = tvec,
                       a.mix = avec, eq.ap = TRUE, eq.ip = TRUE))
head(fitted(fit7, type.fitted = "Pstr.mix"))
t(coef(fit7, matrix = TRUE))  # Easier to see with t()
spikeplot(with(gdata, y1), lwd = 2, ylim = c(0, 0.6), xlim = c(0, 20))
plotdgaitd(fit7, new.plot = FALSE, offset.x = 0.2, all.lwd = 2)
# }

Run the code above in your browser using DataLab