Libraries‎ > ‎Sugarscape Library‎ > ‎

Draw Lorenz curve

BehaviourComposer: ignore everything before this.

Begin micro-behaviour:

Begin description:

I draw a Lorenz curve and compute the Gini coefficient.

End description

Draw Lorenz curve

Begin NetLogo code:

do-after-setup
   [do-every 1
       [let population count all-individuals
        if population <= 2 [stop]
        set-current-plot "Wealth Distribution"
        auto-plot-off
        create-temporary-plot-pen "Lorenz pen"
        set-current-plot-pen "Lorenz pen"
        ; draw the perfectly equitable distribution first
        set-plot-pen-color 0
        set-plot-x-range 0 100
        set-plot-y-range 0 100
        plot-pen-up
        plotxy 0 0
        plot-pen-down
        plotxy 100 100
        plotxy 0 0
        set-plot-pen-color round time mod 145
        let individuals-by-wealth
            sort-on [my-sugar] all-individuals
        let total-wealth sum [my-sugar] of all-individuals
        let one-percent-of-the-population population / 100
        let percent-of-population 0
        let gini-coefficient 0
        while [percent-of-population < 100]
              [let agents-in-percent-of-population
                   sublist individuals-by-wealth
                           0 round (percent-of-population * one-percent-of-the-population)
               let wealth-of-percent-of-population 0
               forEach agents-in-percent-of-population
                  [set wealth-of-percent-of-population
                       wealth-of-percent-of-population + [my-sugar] of ?]
                   let percent-of-wealth wealth-of-percent-of-population * 100 / total-wealth
                   set gini-coefficient gini-coefficient +
                                        percent-of-population - percent-of-wealth
                   plotxy percent-of-population
                          percent-of-wealth
                   set percent-of-population percent-of-population + 1]
        set my-gini-coefficient gini-coefficient / 5050]]

End NetLogo code

Variants

How this works

After drawing the black diagonal line representing the equitable distribution it then picks a new pen colour and draws the Lorenz curve. It does this by sorting all the individuals by wealth (sugar) and computing what percentage of the total that each percentile of the poorer individuals posses. While doing this it also computes the Gini coefficient by approximating it by summing the 100 rectangles between the Lorenz curve and the equitable distribution and dividing that by the area under the diagonal line (which is the sum of 1, 2, 3, ..., 98, 99, 100 or 5050).

Related micro-behaviours

This expects CREATE-EMPTY-LORENZ-CURVE has been added to create the surface this draws upon.

History

This was implemented by Ken Kahn. Last updated on 27 June 2012.

BehaviourComposer: ignore everything after this.

Comments