voterid

No preview image

1 collaborator

Txstgeo Russell Weaver (Author)

Tags

(This model has yet to be categorized with any tags)
Visible to everyone | Changeable by everyone
Model was written in NetLogo 5.1.0 • Viewed 286 times • Downloaded 34 times • Run 0 times
Download the 'voterid' 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?

Suppose that in a given voting market voters can be classified into two general types: (1) Veblen-types, whose probability of voting rises when the price of voting goes up; and (2) non-Veblen-types, who behave as economically rational electors. Suppose that the latter, non-Veblen class of voters can be further subdivided into those persons who possess requisite identification for voting under a voter ID law, and those who do not. Given these assumptions, the working model includes three classes of agents.

Assume that a total of N representatives from the three agent classes are randomly assorted in an isotropic space that houses k polling stations and l institutional locations where agents may, if necessary, obtain an identification document that has been approved for voting under a voter ID law (e.g., a county Department of Motor Vehicles office).

Next, let all agents in the hypothetical polity exhibit a null voting behavior consistent with economic rationality, such that: V=D-C. where V is the net benefit that an agent receives from the act of voting, D is the value placed on voting, and C is the cost of casting a ballot. If V is positive for a given agent during a given election, then that agent will (presumably) participate in that election.

In the hypothetical polity described above, suppose that all agents place some non-negative, intrinsic value on voting, such that D is a random variable that takes a floating point value between 0 and 1. Further assume that under the null condition of no voter ID regulations, the only cost associated with voting concerns a potential voter’s (in)accessibility to the polls. To keep things simple, define accessibility as a function of the spatial distance between an agent and the nearest polling station. More specifically, cost is calculated as an index of absolute distance to a polling station that falls between 0 (no cost, lives next to a polling station) and 1 (high cost, very far from a polling station).

With these details in place, the null model can be expanded to consider how a new voter ID law might affect each of the three aforementioned classes of voters. Stepping through the model once calculates these differences, and reports them in the monitors to the right of the world map. By using the controls at the bottom left of the interface, this exercise can be iterated to create distributions of turnout under null and voter ID rules. The details for how the changes take effect are described in Weaver (2015).

HOW IT WORKS

The model is used to simulate changes in voter turnout under different assumptions about the composition of the rectangular world’s voting market—i.e., different mixes of Veblen-types, non-Veblen-types with identification, and non-Veblen-types without identification. The model allows users to control the values of five important parameters: (1) the number of voters from each of the three agent classes; (2) the number of polling stations located in the isotropic space (num-polling-stations); (3) the number of ID-providing institutions in the polity (num-id-stations); (4) the weak cost increase that applies to all voters (id-cost-all) under a voter ID rule (Weaver 2015, Table 1); and (5) the veblen-multiplier that is multiplied by id-cost-all and added to the value placed on voting by Veblen-type voters

HOW TO USE IT

To the left of the world “map” are a number of user-controlled options. The sliders allow users to manipulate the parameters enumerated above. The button at the top-left configures the polity, which is to say that it randomly locates all agent types (both turtles and patches) in the given space. The top-right button then computes turnout in the null and voter ID models for the randomly located agents, based on the equations in Weaver (2015, Table 1).

At the bottom-left of the interface, there are options for iterating the setup and turnout calculation procedures discussed above. An input box allows a user to set the number of desired iterations (n) for Monte Carlo simulations of turnout given the user-specified parameter values. When clicked, the associated button runs the model n times for n random spatial assortments of agents. The null and voter ID turnout values are then printed to a dialogue box in NetLogo, wherefrom they can be exported to a text file for post-processing. Depending on the desired output, post-processing might include calculating the first differences in turnout between the null and voter ID scenarios [for each iteration], and graphing the resultant distribution to look for significant differences (see Weaver [2015]).

THINGS TO NOTICE

When the model is iterated n times, the output printed to the command center has the following format:

null.turnout.trial.1 voterid.turnout.trial.1 null.turnout.trial.2 voterid.turnout.trial.2 . . . null.turnout.trial.n voterid.turnout.trial.n

THINGS TO TRY

  • Adjust the sliders to change any of the parameters to desired settings.
  • Adjust num-id-stations while holding all other parameters constant to explore the extent to which offering more (accessible) ID-providing institutions affects turnout.
  • Adjust percent-veblen to make Veblen-type voters a supermajority in the overall voting market. Iterate the model and analyze the output to see whether the new voting rules increase turnout.

EXTENDING THE MODEL

The model uses simple cost and benefit functions to describe turtles' voting behavior. Costs of voting in the null scenario are captured by the distance between a turtle (voter) agent and the nearest patch (polling station) at which the turtle can cast a ballot. Under the "Voter ID" scenario, a weak cost (id-cost-all) is simply added to all turtles' cost functions, and an additional distance-based cost is added to turtles' of blue type (economic voter with no ID). Benefits of voting in the null scenario are given by a random floating point value between 0 and 1. For "Veblen" (green) turtles, the product of the weak cost (id-cost-all) and the veblen-multiplier is added to this value under the "Voter ID" scenario. Valuable extensions to this model include:

  1. Create alternative cost and benefit functions. In particular: A. Allow the benefits of Veblen (green) turtles to increase under the "voter id" scenario in more complex ways (i.e., rather than simply adding the product of a multiplier and the new cost to their benefit functions); and B. Allow costs and benefits to vary with turtle attributes (e.g., allow turtles to possess attributes such as education, wealth, etc.)

  2. Model more real world sorting processes. Namely: A. Turtles and patches are currently sorted in space at random.
    B. Allow turtles to "cluster" or "separate" based on, for example, socioeconomic attributes. Allow institutions to sort in ways that maximize their accessibility to the correlated patterns of turtle assortment.

NETLOGO FEATURES

Rather than modeling a dynamic system over time, this model leverages the NetLogo repeat function to perform Monte Carlo simulations.

RELATED MODELS

-

CREDITS AND REFERENCES

Weaver, R.C. (2015). Can voter identification laws increase electoral participation in the United States? Probably not—a simple model of the voting market. SAGE Open 5(2): DOI: 10.1177/2158244015580379.

Comments and Questions

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

Click to Run Model

;;Title: A Simple Model of the Voting Market with and without Voter ID
;;Author: R. Weaver, Department of Geography, Texas State University
;;Email: rcweaver@txstate.edu
;;Twitter: @russell_weaver
;;Date: 07 October 2014

globals [
  maxdistpoll      ;;max distance from a voter to the nearest polling station
  mindistpoll      ;;min distance from a voter to the nearest polling station
  maxdistid        ;;max distance from a voter to the nearest ID provider
  turnout-no-id    ;;aggregate voter turnout under null conditions (no id)
  turnout-voter-id ;;aggregate voter turnout under changed conditions (id)
]

turtles-own [
  distpoll       ;;distance between a given voter and the nearest polling station
  distid         ;;distance between a given voter and the nearest ID provider
  cost-noid      ;;cost of voting under null conditions (no id)
  cost-id        ;;cost of voting under new conditions (id)
  benefit-noid   ;;analogous to cost-noid
  benefit-id     ;;analogous to cost-id
  veblen?        ;;binary: is veblen type
  votenoid?      ;;binary: does vote under null conditions
  voteid?        ;;binary: does vote under changed conditions
]

patches-own [resource-type]

breed [ voterids voterid]
breed [ noids noid]

;;configure hypothetical polity

to setup
  clear-all
  set-default-shape turtles "default"
  if (voters-with-id + voters-without-id) > count patches
    [ user-message (word "This space only has room for " count patches " voters.")
      stop ]

  ;; create voter types on random patches
  create-voterids voters-with-id [
    set color red
  ]
  create-noids voters-without-id [
    set color blue
  ]
  ask turtles [
    setxy random-pxcor random-pycor
  ]
  ask n-of (voters-with-id * (percent-veblen / 100)) turtles with [color = red]
   [set veblen? 1]
  ask turtles [if veblen? = 1 [set color green]]
  ask n-of num-polling-stations patches
    [set resource-type "polling"]
  ask n-of num-id-stations patches
    [set resource-type "id"]
  ask patches [update-patches]
  reset-ticks
end 

to go
  update-variables
end 

to update-patches
  ifelse (resource-type = "polling")
    [ set pcolor yellow ]
  [ ifelse (resource-type = "id")
      [ set pcolor white ]
      [ set pcolor black ]
  ]
end 

to update-variables
  update-turtles
  update-globals
end 

;;refer to Table 1

to update-turtles
  ask turtles [
    set distpoll distance (min-one-of patches with [resource-type = "polling"] [distance myself]) 
    set distid distance (min-one-of patches with [resource-type = "id"] [distance myself])
  ]
  set maxdistpoll max [distpoll] of turtles
  set mindistpoll min [distpoll] of turtles
  set maxdistid max [distid] of turtles with [color = blue]
  ask turtles [  
    set cost-noid (distpoll - mindistpoll) / (maxdistpoll - mindistpoll)
    set benefit-noid random-float 1
    ifelse (color = blue)
    [set cost-id cost-noid + id-cost-all + (2 * (distid / maxdistid))]
    [set cost-id cost-noid + id-cost-all]
    ifelse veblen? = 1
    [set benefit-id benefit-noid + (veblen-multiplier * id-cost-all)]
    [set benefit-id benefit-noid]
    set voteid? benefit-id > cost-id
    set votenoid? benefit-noid > cost-noid
  ]
end 

to update-globals
  let votersnoid count turtles with [votenoid?]
  let votersid count turtles with [voteid?]
  set turnout-no-id (votersnoid / (voters-with-id + voters-without-id)) * 100
  set turnout-voter-id (votersid / (voters-with-id + voters-without-id)) * 100
end 

to iterate
  ca
  repeat n [
    setup
    go
    output-print turnout-no-id
    output-print turnout-voter-id
  ]
end 

There is only one version of this model, created over 10 years ago by Russell Weaver.

Attached files

No files

This model does not have any ancestors.

This model does not have any descendants.