You take your health with you

You take your health with you preview image

1 collaborator

Default-person Jonathan Stokes (Author)

Tags

(This model has yet to be categorized with any tags)
Visible to everyone | Changeable by the author
Model was written in NetLogo 6.4.0 • Viewed 214 times • Downloaded 19 times • Run 0 times
Download the 'You take your health with you' modelDownload this modelEmbed this model

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


WHAT IS IT?

This is a toy model, illustrating the fact that 'people take their health with them'. This means, when measuring health inequalities between places the dynamics of who lives there at that time matters.

In this simple example, health inequalities between places can change over time, even when the total health of the whole population stays exactly the same. When we think about 'Levelling Up' areas, we need to be sure that any benefits we see aren't just caused by gentrification, poorer residents being forced out by rising prices.

HOW IT WORKS

  1. People: • Represented as “persons” with attributes such as income, health, home location, and last relocation tick. They aim to improve their living conditions by relocating closer to services if affordable.
  2. Services: • Represented as “houses,” providing amenities that attract people. Services aim to relocate to zones with higher desirability based on average income and competition.
  3. Patches: • Represent the urban environment where each patch has a housing cost, which varies based on proximity to services and local average incomes.

HOW TO USE IT

You can try varying the number of people and services, as an example of policy levers that could be pulled (e.g., location of houses and of shops selling items people need for daily living).

EXTENDING THE MODEL

This is an extremely basic 'toy model' to illustrate this single concept. There is lots that can be built upon.

CREDITS AND REFERENCES

Model created by Jonathan Stokes as a simple illustration of one of the key dynamic complexities inspiring the initial application for the OPTIMA project, Orienting Policy Towards Inequality Minimising Actions (OPTIMA): A systems science approach to 20-minute neighbourhood policy and evaluation.

In the OPTIMA project, we will use much more sophisticated agent-based models to explore potential health inequality impacts of '20-minute neighbourhood' policy options. See https://fundingawards.nihr.ac.uk/award/NIHR160301 for more details.

(This project is funded by the NIHR Public Health Research Programme (NIHR160301). The views expressed are those of the author(s) and not necessarily those of the NIHR or the Department of Health and Social Care.)

Comments and Questions

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

Click to Run Model

breed [people person]
breed [services service]
services-own [
  visits  ; Tracks the number of people visiting the service
]

people-own [
  income  ; Random for simplicity
  health  ; Held constant
  home-patch  ; Stores the patch that is the person's home
  last-relocation-tick  ; Tracks the last tick on which the person relocated their home
]

patches-own [
  housing-cost  ; Varies and may increase when services are nearby
]

to setup
  clear-all
  setup-people
  setup-services
  setup-housing-costs
  setup-zones
  reset-ticks
end 

to setup-people
  create-people num-people [
    setxy random-xcor random-ycor
    set home-patch patch-here  ; Sets the current patch as the person's home
    set income random-normal 1 0.5  ; Use a normal distribution for more variability
    ; Directly tie health to income
    ; This example assumes health should be in the range 0 to 1 and is linearly related to income
    set health min list 1 (max list 0 (income / 2))
    set shape "person"
    set color scale-color grey health 0 1  ; Visualize health levels through color intensity
    set last-relocation-tick 0  ; Initialize to 0 indicating they haven't relocated yet
  ]

  ; Calculate median income after all people are created
  let median-income median [income] of people
end 

to setup-services
  create-services num-services [
    setxy random-xcor random-ycor
    set shape "house"
      set color red
  ]
end 


; Define two zones

to setup-zones
  ask patches [
    ifelse pxcor < 0 [
      set pcolor blue  ; Zone 1
    ] [
      set pcolor black  ; Zone 2
    ]
  ]
end 

to setup-housing-costs
  ask patches [
    set housing-cost 0.5  ; Initial housing cost, for simplicity
  ]
end 

to go
  ask people [
    try-move-home-closer
  ]
  relocate-services  ; Check and potentially relocate services based on demand
  update-housing-costs  ; Adjust housing costs based on defined criteria

  update_my_plots
  update-health-inequality-plot
  update-service-count-plots
  tick
end 



; Relocate services based on some criteria, e.g., demand and competition

to relocate-services
  ask services [
    ; Calculate the average income for each zone
    let avg-income-zone1 mean [income] of people with [pxcor < 0]
    let avg-income-zone2 mean [income] of people with [pxcor >= 0]

    ; Count the number of services in each zone
    let services-count-zone1 count services with [pxcor < 0]
    let services-count-zone2 count services with [pxcor >= 0]

    ; Determine the desirability of each zone based on income and competition
    ; This example uses a simple metric: average income minus a penalty for the number of services
    let desirability-zone1 (avg-income-zone1 - 0.1 * services-count-zone1)
    let desirability-zone2 (avg-income-zone2 - 0.1 * services-count-zone2)

    ; Choose the zone with higher desirability
    let target-zone ifelse-value (desirability-zone1 > desirability-zone2)
      [one-of patches with [pxcor < 0]] [one-of patches with [pxcor >= 0]]

    ; Move to the selected zone and reset visits
    move-to target-zone
    set visits 0
  ]
end 



; People try to move closer to the service and consider affordability

to try-move-home-closer
  ask people [
    ; Check if it's time to try moving (e.g., every 10 ticks)
    if ticks mod 10 = 0 [
      let my-income income
      let nearest-service min-one-of services [distance myself]
      let potential-new-homes patches in-radius 10 with [housing-cost < my-income and not any? people-here]
      let new-home min-one-of potential-new-homes [distance nearest-service]

      ; Move if a new home is found and it's closer to the nearest service
   if new-home != nobody and [distance new-home] of nearest-service < [distance myself] of nearest-service [
      move-to new-home
      set home-patch new-home
        set last-relocation-tick ticks
      ]
    ]
  ]
end 

to update-housing-costs
  ask patches [
    ; Gather incomes of people within a certain radius
    let incomes [income] of turtles in-radius 10 with [breed = people]

    ; Calculate the mean income if there are any people within the radius
    if not empty? incomes [
      let local-avg-income mean incomes
      ; Calculate service proximity for each patch, e.g., average distance to nearest service
      let nearest-service min-one-of services [distance myself]
      let service-proximity ifelse-value (nearest-service != nobody) [distance nearest-service] [max-pxcor + max-pycor] ; Fallback to a large distance if no service is found

      ; Adjust housing cost based on local average income and service proximity
      set housing-cost 0.5 + (0.05 * local-avg-income) - (0.01 * service-proximity)

      ; Ensure housing cost stays within bounds
      set housing-cost max list 0.1 (min list housing-cost 3.0)
    ]
  ]
end 

to update_my_plots
  ; Update the Health Over Time plot
  set-current-plot "Population health over time"
  plot mean [health] of people
end 

to update-service-count-plots
  ; Calculate the total number of services in each of the two zones
  let services-zone1 count services with [pxcor < 0]
  let services-zone2 count services with [pxcor >= 0]

  ; Ensure the correct plot is selected for updating
  set-current-plot "Services in each Zone"

  ; Update the plot for services in each zone
  set-current-plot-pen "Zone1"
  plot services-zone1

  set-current-plot-pen "Zone2"
  plot services-zone2
end 

to update-health-inequality-plot
  ; Calculate average health for each zone
  let avg-health-zone1 mean [health] of people with [pxcor < 0]
  let avg-health-zone2 mean [health] of people with [pxcor >= 0]

  ; Update the plot
  set-current-plot "Health Inequality"

  set-current-plot-pen "Zone1"
  plot avg-health-zone1

  set-current-plot-pen "Zone2"
  plot avg-health-zone2
end 

There is only one version of this model, created 12 months ago by Jonathan Stokes.

Attached files

File Type Description Last updated
You take your health with you.png preview Preview for 'You take your health with you' 12 months ago, by Jonathan Stokes Download

This model does not have any ancestors.

This model does not have any descendants.