Skip to main content

humanleague

License Travis Build Status Appveyor Build status Codacy Badge codecov

DOI status

PyPI version Anaconda-Server Version Badge Anaconda-Server Downloads Badge

CRAN_Status_Badge CRAN Downloads

Latest news

The 2.1.3 release is a non-functional change that affects the python version only:

  • migrate to pybind11 from the native C python API, to reduce and simplify the code, and
  • provide improved python API documentation.

2.1 release

  • now available on conda.
  • adds new functionality for multidimensional integerisation.
  • removes previously deprecated functionality: synthPop and synthPopG functions.

Multidimensional integerisation

Building on the prob2IntFreq function - which takes a discrete probability distribution and a count, and returns the closest integer population to the distribution that sums to the count - a multidimensional equivalent integerise is introduced. In one dimension, for example:

>>> import numpy as np
>>> import humanleague
>>> p=np.array([0.1, 0.2, 0.3, 0.4])
>>> humanleague.prob2IntFreq(p, 11)
{'freq': array([1, 2, 3, 5]), 'rmse': 0.3535533905932736}

produces the optimal (i.e. closest possible) integer population to the discrete distribution.

The integerise function generalises this problem and applies it to higher dimensions: given an n-dimensional array of real numbers where the 1-d marginal sums in every dimension are integral (and thus the total population is too), it attempts to find an integral array that also satisfies these constraints.

The QISI algorithm is repurposed to this end. As it is a sampling algorithm it cannot guarantee that a solution is found, and if so, whether the solution is optimal. If it fails this does not prove that a solution does not exist for the given input.

>>> a = np.array([[ 0.3,  1.2,  2. ,  1.5],
                  [ 0.6,  2.4,  4. ,  3. ],
                  [ 1.5,  6. , 10. ,  7.5],
                  [ 0.6,  2.4,  4. ,  3. ]])
# marginal sums
>> sum(a)
array([ 3., 12., 20., 15.])
>>> sum(a.T)
array([ 5., 10., 25., 10.])
# perform integerisation
>>> r = humanleague.integerise(a)
>>> r["conv"]
True
>>> r["result"]
array([[ 0,  2,  2,  1],
       [ 0,  3,  4,  3],
       [ 2,  6, 10,  7],
       [ 1,  1,  4,  4]])
>>> r["rmse"]
0.5766281297335398
# check marginals are preserved
>>> sum(r["result"]) == sum(a)
array([ True,  True,  True,  True])
>>> sum(r["result"].T) == sum(a.T)
array([ True,  True,  True,  True])

Removed functions

The functions synthPop and synthPopG implement restricted versions of algorithms that are available in other functions. Use qis ins place of synthPop, and qisi in place of synthPopG.

Introduction

humanleague is a python and an R package for microsynthesising populations from marginal and (optionally) seed data. The package is implemented in C++ for performance.

The package contains algorithms that use a number of different microsynthesis techniques:

The latter provides a bridge between deterministic reweighting and combinatorial optimisation, offering advantages of both techniques:

  • generates high-entropy integral populations
  • can be used to generate multiple populations for sensitivity analysis
  • goes some way to address the 'empty cells' issues that can occur in straight IPF
  • relatively fast computation time

The algorithms:

  • support arbitrary dimensionality* for both the marginals and the seed.
  • produce statistical data to ascertain the likelihood/degeneracy of the population (where appropriate).

The package also contains the following utility functions:

  • a Sobol sequence generator
  • construct a closest integer population from a discrete univariate probability distribution.
  • an algorithm for sampling an integer population from a discrete multivariate probability distribution, constrained to the marginal sums in every dimension.
  • 'flatten' a multidimensional population into a table: this converts a multidimensional array containing the population count for each state into a table listing individuals and their characteristics.

Version 1.0.1 reflects the work described in the Quasirandom Integer Sampling (QIS) paper.

Installation

Requires Python 3.5 or newer.

PyPI

python3 -m pip install humanleague --user

Anaconda

conda install -c conda-forge humanleague

Build, install and test (from cloned repo)

python setup.py install --user
python setup.py test

R

Official release:

> install.packages("humanleague")

For a development version

> devtools::install_github("virgesmith/humanleague")

Or, for the legacy version

> devtools::install_github("virgesmith/humanleague@1.0.1")

Documentation and Examples

R

Consult the package documentation, e.g.

> library(humanleague)
> ?humanleague

Python

See here, or

>>> import humanleague as hl
>>> help(hl)

Release files for humanleague 2.1.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for humanleague 2.1.7
File Size Uploaded
humanleague-2.1.7.tar.gz 58.9 kB Details

Release files / humanleague-2.1.7.tar.gz

Download URL humanleague-2.1.7.tar.gz
Size 58.9 kB
Tags Source
SHA-256 checksum
How to use checksums
1c2107980c8099652ee4cf0b78f35fdb54e73a2e306acb341f1f1fb3ba472f51
BLAKE2b-256 checksum
How to use checksums
502e5b6d7693c197dad436253a6394fc78c4d734432d2ff112e52d4fc14c575d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.6.1 requests/2.22.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.8.5

Release history Release notifications | RSS feed

2.4.5

4 release files

2.4.4

1 release file

2.4.3

1 release file

2.4.2

1 release file

2.4.1

1 release file

2.4.0

1 release file

2.3.2

1 release file

2.3.1

1 release file

2.3.0

1 release file

2.2.0

1 release file

2.1.11

1 release file

2.1.10

1 release file

2.1.9

1 release file

2.1.8

1 release file

This release

2.1.7 This release

1 release file

2.1.5

1 release file

2.1.1

1 release file

2.1.0

1 release file

2.0.5

1 release file

2.0.3

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page