voterid
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:
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.)
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
;;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.
Download this model