# Basic Income - Households

Model was written in NetLogo 6.0.4
•
Viewed 32 times
•
Downloaded 1 time
•
Run 0 times

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)

Info tab cannot be displayed because of an encoding error

## Comments and Questions

Please start the discussion about this model!
(You'll first need to log in.)

Click to Run Model

globals [ gini-index-reserve lorenz-points max-wealth min-wealth ;; I included this so I could check to see if there were any negative values max-income min-income monthly-bi max-indiv-cost-of-living total-adults ] patches-own [ patch-income ;; the current amount of income on this patch monthly-income ;; patch income / 12 ] turtles-own [ wealth ;; the amount of money a turtle has after-tax ;; amount of income left after paying taxes min-indiv-cost-of-living ;; individual minimum cost of living based on minimum set on interface cost-of-living ;; cost of living calibrated for family composition num-adults ;; number of adults per household (set further down in code) num-children ;; number of children per household (set further down in code) ] ;; the different family types, for setting the number of adults and children - this model leaves out roommates and extended family breed [couples-no-children couple-no-children] breed [couples-1-child couple-1-child] breed [couples-2-children couple-2-children] breed [couples-3-children couple-3-children] breed [singles-no-children single-no-children] breed [singles-1-child single-1-child] breed [singles-2-children single-2-children] breed [singles-3-children single-3-children] ;;; ;;; SETUP AND HELPERS ;;; to setup clear-all ;; call other procedures to set up various parts of the world setup-patches setup-turtles update-lorenz-and-gini reset-ticks end ;; set up the initial amounts of income each patch has to setup-patches ask patches ;; set up patch income random amount depending on distribution chosen [ if income-distribution = "random" [ set patch-income random (mean-indiv-annual-income * 2) ] if income-distribution = "normal" [ set patch-income random-normal mean-indiv-annual-income (mean-indiv-annual-income / 2) ;; latter value is an estimate of the standard deviation based on what the curve looks like ] if income-distribution = "exponential" [ set patch-income random-exponential (mean-indiv-annual-income) ] ;; keep income ≥ 0 if patch-income < 0 [ set patch-income 0 ] ;; set colour so richer patches have darker colour (in quintiles) set max-income max [ patch-income ] of patches ;; find highest income if patch-income < max-income * 1 / 5 [ set pcolor 58 ] ;; colour patches based on income levels if patch-income >= max-income * 1 / 5 and patch-income < max-income * 2 / 5 [ set pcolor 57 ] if patch-income >= max-income * 2 / 5 and patch-income < max-income * 3 / 5 [ set pcolor 56 ] if patch-income >= max-income * 3 / 5 and patch-income < max-income * 4 / 5 [ set pcolor 55 ] if patch-income >= max-income * 4 / 5 [ set pcolor 54 ] ] end ;; set up the initial values for the turtle variables to setup-turtles set-default-shape turtles "house" ;; determine composition of the different households based on demographics ( * .25 etc) entered here create-couples-no-children num-households * .25 ask couples-no-children [ set num-adults 2 set num-children 0 ] create-couples-1-child num-households * .10 ask couples-1-child [ set num-adults 2 set num-children 1 ] create-couples-2-children num-households * .11 ask couples-2-children [ set num-adults 2 set num-children 2 ] create-couples-3-children num-households * .05 ask couples-3-children [ set num-adults 2 set num-children 3 ] create-singles-no-children num-households * .39 ask singles-no-children [ set num-adults 1 set num-children 0 ] create-singles-1-child num-households * .06 ask singles-1-child [ set num-adults 1 set num-children 1 ] create-singles-2-children num-households * .03 ask singles-2-children [ set num-adults 1 set num-children 2 ] create-singles-3-children num-households * .01 ask singles-3-children [ set num-adults 1 set num-children 3 ] ask turtles [ move-to one-of patches with [not any? turtles-here] ;; if cost of living is to vary randomly do that here, otherwise set it at the minimum cost of living ifelse allow-varied-indiv-min-cost-of-living [ set min-indiv-cost-of-living random-normal min-monthly-cost-of-living-per-adult (min-monthly-cost-of-living-per-adult / 6) set max-indiv-cost-of-living max [min-indiv-cost-of-living] of turtles ] [ set min-indiv-cost-of-living min-monthly-cost-of-living-per-adult ] ;; adjust cost of living for family composition if num-adults = 1 [ set cost-of-living min-indiv-cost-of-living * ( 1 + ( num-children * top-up-children / 100 )) ] if num-adults = 2 [ set cost-of-living min-indiv-cost-of-living * ( 1.67 + ( num-children * top-up-children / 100 )) ] ;; determine wealth of individuals if inheritance-distribution = "random" ;; wealth [ set wealth random (mean-indiv-inheritance * 2) ] if inheritance-distribution = "normal" [ set wealth random-normal mean-indiv-inheritance (mean-indiv-inheritance / 4) ;; latter value is an estimate of the standard deviation ] if inheritance-distribution = "exponential" [ set wealth random-exponential (mean-indiv-inheritance) ] if wealth <= 0 [ set wealth 1 ] ;; if there are two adults in a household, double the wealth if num-adults = 2 [ set wealth wealth * 2 ] ;; colour turtles according to their relative wealth (this is reset at every step) color-turtles ;; if there's an inheritance tax, tax wealth at the beginning during set up (if progressive, use quintiles to set tax rate) if inheritance-tax = "flat" [ set wealth wealth * ( 1 - max-tax-rate / 100 ) ] if inheritance-tax = "progressive" [ if color = 1 [ set wealth wealth * (1 - max-tax-rate / 100) ] if color = 2 [ set wealth wealth * (1 - 0.8 * max-tax-rate / 100) ] if color = 3 [ set wealth wealth * (1 - 0.6 * max-tax-rate / 100) ] if color = 4 [ set wealth wealth * (1 - 0.4 * max-tax-rate / 100) ] if color = 5 [ set wealth wealth * (1 - 0.2 * max-tax-rate / 100) ] ] ;; set the household monthly income at 1/12 of the patch income; double it for two-adult households set monthly-income patch-income / 12 if num-adults = 2 [ set monthly-income monthly-income * 2 ] face one-of neighbors4 ] end ;;; ;;; GO AND HELPERS ;;; to go ask turtles [ upgrade-income ;; move to neighbouring patch if it has more income update-wealth ;; add net income to wealth color-turtles ;; set colour according to wealth quintile ] update-lorenz-and-gini set min-income min [ patch-income ] of patches set min-wealth min [ wealth ] of turtles tick end to go-ten-years ask turtles [ upgrade-income ;; move to neighbouring patch if it has more income update-wealth ;; add net income to wealth color-turtles ;; set colour according to wealth quintile ] update-lorenz-and-gini tick if ticks = 120 [ reset-ticks stop ] end ;; determine the direction which is most profitable for each turtle in ;; the surrounding patches within one patch ;; the only way I could get this to work was to have them just check one direction per tick to upgrade-income ;; turtle procedure - move to a higher paying patch next door if you can let patch-income-ahead patch-income-at-angle 0 ;; if patch ahead has a higher income, go to it; and either way, rotate right 90° if (patch-income-ahead > patch-income) [ if not any? other turtles-on patch-ahead 1 [ forward 1 ]] rt 90 set monthly-income patch-income / 12 if num-adults = 2 [ set monthly-income monthly-income * 2 ] end ;; check out which neighbouring patch has the highest income (cribbed from ants) to-report patch-income-at-angle [angle] let p patch-right-and-ahead angle 1 report [patch-income] of p end ;; add monthly income to wealth and subtract cost of living; grade cost of living to income if high enough to update-wealth ;; set income tax rate: after-tax = proportion of income left after paying taxes if income-tax = "none" [ set after-tax 1 ] if income-tax = "flat" [ set after-tax 1 - max-tax-rate / 100 ] if income-tax = "progressive with loopholes for rich" [ set max-income max [ patch-income ] of patches * 2 / 12 if monthly-income >= max-income * 4 / 5 [ set after-tax 1 - 0.6 * (max-tax-rate / 100) ] if monthly-income >= max-income * 3 / 5 and monthly-income < max-income * 4 / 5 [ set after-tax 1 - 0.8 * (max-tax-rate / 100) ] if monthly-income >= max-income * 2 / 5 and monthly-income < max-income * 3 / 5 [ set after-tax 1 - 0.6 * (max-tax-rate / 100) ] if monthly-income >= max-income * 1 / 5 and monthly-income < max-income * 2 / 5 [ set after-tax 1 - 0.4 * (max-tax-rate / 100) ] if monthly-income < max-income * 1 / 5 [ set after-tax 1 - 0.2 * (max-tax-rate / 100) ] ] if income-tax = "progressive no loopholes for rich" [ set max-income max [ patch-income ] of patches * 2 / 12 if monthly-income >= max-income * 4 / 5 [ set after-tax 1 - 1.0 * (max-tax-rate / 100) ] if monthly-income >= max-income * 3 / 5 and monthly-income < max-income * 4 / 5 [ set after-tax 1 - 0.8 * (max-tax-rate / 100) ] if monthly-income >= max-income * 2 / 5 and monthly-income < max-income * 3 / 5 [ set after-tax 1 - 0.6 * (max-tax-rate / 100) ] if monthly-income >= max-income * 1 / 5 and monthly-income < max-income * 2 / 5 [ set after-tax 1 - 0.4 * (max-tax-rate / 100) ] if monthly-income < max-income * 1 / 5 [ set after-tax 1 - 0.2 * (max-tax-rate / 100) ] ] ;; set redistribution if income-redistribution = "none" [ set monthly-bi 0 ] if income-redistribution = "universal demogrant" ;; give everyone the same top-up [ if num-adults = 1 [ set monthly-bi max-bi-indiv / 12 ] if num-adults = 2 [ if BI-unit = "BI by individual" [ set monthly-bi 2 * max-bi-indiv / 12 ] if BI-unit = "BI by family" [ set monthly-bi max-bi-family / 12 ] ] ] if income-redistribution = "NIT with clawback" ;; calculate partial BI after clawback [ if num-adults = 1 [ set monthly-bi max-bi-indiv / 12 ] if num-adults = 2 [ if BI-unit = "BI by individual" [ set monthly-bi 2 * max-bi-indiv / 12 ] if BI-unit = "BI by family" [ set monthly-bi max-bi-family / 12 ] ] ifelse (monthly-income * after-tax * (clawback / 100)) < monthly-bi ;; is after tax income too high with clawback?, if not proceed [ set monthly-bi monthly-bi - (monthly-income * after-tax * (clawback / 100)) ] ;; for NIT, if after-tax income is too high, don't give a BI [ set monthly-bi 0 ] ] ;; update amount of BI with amount for children set monthly-bi monthly-bi + monthly-bi * num-children * top-up-children / 100 ;; calculate new wealth ifelse ((monthly-bi + (monthly-income * after-tax)) * 3 / 4) < cost-of-living ;; deduct cost of living [set wealth wealth + monthly-bi + (monthly-income * after-tax) - cost-of-living ] [set wealth wealth + monthly-bi + (monthly-income * after-tax / 4) ] end to color-turtles set max-wealth max [ wealth ] of turtles if wealth < max-wealth / 5 [ set color 5 ] if (wealth >= max-wealth / 5 and wealth < max-wealth * 2 / 5) [ set color 4 ] if (wealth >= max-wealth * 2 / 5 and wealth < max-wealth * 3 / 5) [ set color 3 ] if (wealth >= max-wealth * 3 / 5 and wealth < max-wealth * 4 / 5) [ set color 2 ] if (wealth >= max-wealth * 4 / 5) [ set color 1 ] if wealth <= 0 [ set wealth 1 set color red ] end ;; this procedure recomputes the value of gini-index-reserve ;; and the points in lorenz-points for the Lorenz and Gini-Index plots ;; it is taken directly from Uri Wilensky's Wealth Distribution ABM to update-lorenz-and-gini let sorted-wealths sort [wealth] of turtles let total-wealth sum sorted-wealths let wealth-sum-so-far 0 let index 0 set gini-index-reserve 0 set lorenz-points [] ;; now actually plot the Lorenz curve -- along the way, we also ;; calculate the Gini index. ;; (see the Info tab for a description of the curve and measure) repeat count turtles [ set wealth-sum-so-far (wealth-sum-so-far + item index sorted-wealths) set lorenz-points lput ((wealth-sum-so-far / total-wealth) * 100) lorenz-points set index (index + 1) set gini-index-reserve gini-index-reserve + (index / num-households) - (wealth-sum-so-far / total-wealth) ] end ; Copyright 1998 Uri Wilensky and 2018 Sarah Robertson ; See Info tab for full copyright and license.

There is only one version of this model, created about 1 month ago by Sarah Robertson.

## Attached files

File | Type | Description | Last updated | |
---|---|---|---|---|

Basic Income - Households.png | preview | Preview for 'Basic Income - Households' | about 1 month ago, by Sarah Robertson | Download |

This model does not have any ancestors.

This model does not have any descendants.