Ordered probit and logit regression for outcomes with an inflated category: a single ordered category (bottom, middle, top, or any other) that mixes observations generated by the ordered process with observations generated by a distinct split-population process that places them in that category regardless of the ordered mechanism. The package fits the zero-inflated ordered probit of Harris and Zhao (2007) and its middle- and top-inflated extensions (Bagozzi and Mukherjee 2012; Bagozzi, Hill, Moore and Mukherjee 2015; Bagozzi, Joo and Mukherjee 2024), generalized to any inflated category and to the logit link, with optional correlated errors for the probit form, alongside the standard ordered probit and logit on the same engine, so that the plain and inflated models share one formula interface, one set of methods, and one set of quantities of interest.
Estimators
All four share the formula interface y ~ x1 + x2 | z1 + z2 (outcome
equation before the |, inflation equation after it), survey weights,
offsets, partial proportional-odds effects (parallel =, with
parallel_test() and parallel = "auto"), unit random intercepts (re =),
unit fixed effects (fe =, with the split-panel jackknife
fe_correction = "jackknife"), and analytic, robust, or cluster-robust
standard errors (se =, cluster =).
oprobit(),ologit()The standard ordered probit and logit.
iop()The inflated ordered probit for any single inflated category (
inflate = "bottom","middle","top", or a category label), withcorrelated = TRUEfor the ZiOPC / MiOPC / TiOPC models andsplit = "category"for the category-specific split equations of the generalised GZiOP / GMiOP (Brown, Harris and Spencer 2020).iol()The inflated ordered logit counterpart.
Standard errors: analytic, robust, cluster-robust, or nonparametric
bootstrap (se = "bootstrap", with percentile intervals from
confint.iord()).
Methods (one set for every model)
summary.iord(), print(), coef(), vcov.iord() (natural or internal
scale), confint.iord() (rho on the \(\tanh^{-1}\) scale), logLik(),
nobs(), fitted(), residuals.iord(), predict.iord() (category
probabilities, modal class, ordered-stage probabilities, regime and
inflation probabilities, posterior probability of being an inflated case,
linear predictors, all with optional delta-method se.fit), ranef() for
random-intercept fits, simulate.iord() for simulated-residual
diagnostics, and broom (tidy.iord(), glance.iord(), augment.iord())
and texreg (extract()) integration so modelsummary::modelsummary() and
texreg::screenreg() work out of the box.
Quantities of interest
first_difference() (by category and regime, by stage, at a profile or
averaged over the data, delta-method or simulation intervals), ame()
(average marginal effects), both with decompose = TRUE for the two
components of the inflated-category probability (predict(type = "zeros"), Harris and Zhao's two types of zeros), and plot.iop_fd() /
plot.iop_ame() for both.
Model comparison
vuong() (raw, AIC-, BIC-corrected), lr_test() for nested pairs,
inflation_test() (inflated vs plain ordered, refit internally, with a
parametric-bootstrap likelihood-ratio test), split_test() (common vs
category-specific split equations, LM and LR), compare_models(),
parallel_test() for the parallel-regression assumption, and
classification() (confusion table, Brier and ranked probability scores,
precision/recall).
Panels
Random intercepts by adaptive Gauss–Hermite quadrature (re =,
re_inflation =, nAGQ =), unit fixed effects (fe =, fe_inflation =,
fe_correction = "jackknife", time =), the mundlak()
correlated-random-effects device, and cluster-robust standard errors.
Data and simulation
bp (political violence, zero-inflated), pta (escape-flexibility
provisions, top-inflated), repression (repression of nonviolent
campaigns, top-inflated); riop() draws data from the model's own
data-generating process; diord(), piord(), qiord(), riord() are
the probability mass, cumulative probability, quantile, and random-draw
functions of the (inflated) ordered response.
Vignettes
vignette("iop") (getting started), vignette("quantities") (predicted
probabilities, first differences, marginal effects, tables, diagnostics),
vignette("panels") (random intercepts, fixed effects, Mundlak, the
jackknife, and the package's Monte Carlo), and vignette("model") (the
likelihood, identification, multi-start estimation, boundary cases, and
validation).
References
Harris, M.N. and Zhao, X. (2007). A zero-inflated ordered probit model, with an application to modelling tobacco consumption. Journal of Econometrics, 141, 1073-1099.
Bagozzi, B.E. and Mukherjee, B. (2012). A mixture model for middle category inflation in ordered survey responses. Political Analysis, 20, 369-386.
Bagozzi, B.E., Hill, D.W., Moore, W.H. and Mukherjee, B. (2015). Modeling two types of peace: The zero-inflated ordered probit (ZiOP) model in conflict research. Journal of Conflict Resolution, 59, 728-752.
Bagozzi, B.E., Joo, M.M. and Mukherjee, B. (2024). Top-category inflation in ordered international relations outcomes. Foreign Policy Analysis, 20, orae006.
See also
Useful links: the source repository https://github.com/bagozzib/iop; report bugs at https://github.com/bagozzib/iop/issues.
Author
Maintainer: Benjamin E. Bagozzi bagozzib@udel.edu
Authors:
Benjamin E. Bagozzi bagozzib@udel.edu
Examples
data(bp)
m <- iop(violence ~ loggdppc + parliament + disaster | loggdppc + parliament + disaster,
data = bp, inflate = "bottom")
#> The inflation equation contains no covariate that is excluded from the outcome equation; the split is then identified by functional form alone. An exclusion restriction is advisable.
m
#> Inflated ordered probit (inflated category: none)
#> Response levels (in order): none < repression < civil war
#> Call: iop(formula = violence ~ loggdppc + parliament + disaster | loggdppc +
#> parliament + disaster, data = bp, inflate = "bottom")
#>
#> Outcome coefficients:
#> loggdppc parliament disaster
#> 0.0053 -0.0849 0.2691
#>
#> Cutpoints:
#> none|repression repression|civil war
#> 0.5189 1.4112
#>
#> Inflation coefficients (positive = higher P(ordered regime)):
#> (Intercept) loggdppc parliament disaster
#> 19.4107 -2.1231 -0.4271 -0.1204
#>
#> logLik: -1392.86 N: 1984