The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
This release responds to feedback from Frank Cowell and Emmanuel Flachaire (personal communication, 1 May 2026) on the v0.1.0 release. Two gaps were flagged: confidence intervals were available only for the Gini, and the package rejected non-positive values for the Gini and the top shares. A follow-up internal audit produced several smaller fixes that ship together.
Bootstrap confidence intervals are now available on every inequality
function via ci = TRUE. Each function gains
ci, R, and level arguments
matching the existing Gini API. Results are returned in
ci_lower, ci_upper, and se fields
on the output object and shown by the print method.
Functions extended: iq_theil(),
iq_atkinson(), iq_sgini(),
iq_palma(), iq_hoover(),
iq_kolm(), iq_percentile_ratio(),
iq_polarisation(), iq_shares(),
iq_concentration(), iq_kakwani(), and
iq_poverty().
The bootstrap uses probability-proportional resampling, so survey weights flow through to the variance, not just the point estimate.
iq_compare()
runs one bootstrap loop, propagates CIs to every rowWhen ci = TRUE, iq_compare() now runs a
single resample loop and attaches ci_lower and
ci_upper columns to every row of the table. The old
gini_ci field is removed. The table now also covers S-Gini,
Kolm, and Wolfson (12 measures, up from 9).
negatives = "keep"Functions that are mathematically defined for distributions
containing negative values now accept
negatives = c("error", "keep"), with "error"
as the default for back-compatibility. With
negatives = "keep":
iq_gini() and iq_sgini() permit negatives;
the index is still computed by the standard formula but is no longer
bounded in [0, 1]. The print method emits a note when the input contains
negatives.iq_shares() permits negatives; segment shares may fall
outside [0, 1] and a warning is issued. If total income is non-positive,
the function returns NA shares with a warning.iq_palma(), iq_hoover(), and
iq_polarisation() similarly accept negatives.iq_kolm() already worked for negative values and is
unchanged.
iq_atkinson() and iq_theil() continue to
require strictly positive values: they involve log(x) or
x^(1 - epsilon) for which the formula is mathematically
undefined at zero or below. The error message now documents this
explicitly.
iq_kakwani() no longer takes the absolute value of
post-tax income before computing the post-tax Gini. Households whose
post-tax income is negative are now reflected honestly in the
Reynolds-Smolensky index.iq_palma() and iq_polarisation() now warn
rather than abort when the relevant denominator is non-positive
(returning NA).NA (with a warning) when
the population mean is non-positive. Previously the function returned
0 when mu == 0, which conflated “perfect
equality” with “undefined”. With negatives = "keep" set,
the user is pointed at normalised = TRUE for the Raffinetti
et al. (2017) bounded variant.x = 0
from the Watts sum (since log(line / 0) diverges) and emits
a one-time warning. FGT measures and the Sen index continue to include
all poor observations.iq_percentile_ratio() now warns when the lower
percentile is negative, since the resulting ratio sign-flips and has no
inequality interpretation.negatives = "keep", which those wrappers do not
expose. Instead the message points the user at measures that admit zero
or negative support.iq_gini() gains a normalised flag
implementing the Raffinetti, Siletti and Vernizzi (2017) Gini variant,
which is bounded in [-1, 1] for distributions containing negative
values.iq_compare() gains a negatives argument.
With negatives = "keep" it permits zero or negative input
and returns NA for the Theil and Atkinson rows (which are
mathematically undefined for non-positive values), while still computing
Gini, S-Gini, Kolm, Wolfson, Hoover, Palma and percentile-ratio
rows.iq_concentration() gains a
correction = "wagstaff" option for the Wagstaff (2005)
normalised concentration index, alongside the existing Erreygers (2009)
correction.?iq_theil now documents the convention difference vs
the legacy ineq package
(ineq::Theil(x, parameter = 0) corresponds to GE(1) / Theil
T here, not to GE(0) / Theil L).tests/testthat/test-axioms.R locks in scale
invariance, Kolm translation invariance, Pigou-Dalton transfer
principle, anonymity, parameter monotonicity, decomposition exactness,
the Erreygers and Wagstaff bounds, and bootstrap nominal coverage.tests/testthat/test-cross-package.R cross-checks
Gini, Theil, and Atkinson values against the legacy ineq
package on a fixed seed. Skipped when ineq is not installed
and on CRAN.Thanks to Frank Cowell and Emmanuel Flachaire for the careful read and the two-line list of gaps.
iq_gini(), following Davidson (2009).iq_sgini(), following Donaldson and Weymark
(1980).iq_theil(), following Theil (1967) and Shorrocks
(1980).iq_atkinson().iq_kolm().iq_palma().iq_hoover().iq_percentile_ratio().iq_lorenz().iq_decompose(), following Bourguignon
(1979).iq_shares().iq_concentration().iq_polarisation().iq_poverty().iq_growth_incidence(), following Ravallion and Chen
(2003).iq_kakwani().iq_compare().These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.