Giter Site home page Giter Site logo

Comments (1)

bettinardi avatar bettinardi commented on June 16, 2024

An improved capture of the issue from Binny Paul:

PopulationSim is designed to work with Logical or Boolean expressions (equality, inequality, and range) to specify marginal controls. Some examples of Boolean expressions are:

  • household.income <= 25000
  • person.age < 18

The user requesting the enhancement would like to specify a non-Boolean expression for a use-case described below. Currently, specification of a non-Boolean expression triggers the following assertion error:
assert (max_incidence_value[control_is_hh_based] <= 1).all()

The assertion check was placed by the developers as a sanity check on user’s expressions. The user is requesting to remove this check to allow specification of non-Boolean expressions.

Use-Case:
To control for average household income in the absence of a marginal income distribution.

If only target average income is available, the marginal control can be specified as total income for the zone computed as:
SumIncome = Total_households * target_average_income

The controls specification will look as follows:
controls.csv
target,geography,seed_table,importance,control_field,expression
SumIncome,MAZ,households,1000,SumIncome,households.income
control_totals_MAZ.csv
MAZ,SumIncome
1,5000000
The expression for this use case is – “household.income”, which is not a Boolean expression.

Potential implementation issue:
This change can possibly introduce large numbers in the incidence table. Currently, with Boolean expressions, the incidence table consists of only small integers. Mixing of large and small integers can throw off the list balancing and integerization (linaer programming) optimization. Further testing will be needed to evaluate the impact of this change.

Work-around with existing features:
In the absence of this feature, the users can test this workaround. The steps are as follows:

  1. Use the target average income to scale the household income in the seed population and save in temporary fields.

Scaling factor = (target_average_income * total_households)/sum(hh_incomes)

  1. Use the temporary scaled income to generate income distribution using some thresholds (e.g., $25K, $50K, $100K, $150K+). For a closer match with the target average, use more thresholds.

  2. Use the distribution generated from the scaled income fields as a regular household income control on the original income field.

from populationsim.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.