Skip to contents

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), with correlated = TRUE for the ZiOPC / MiOPC / TiOPC models and split = "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:

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