Spatial Dynamics of Attitude Formation

Spatial Dynamics of Attitude Formation preview image

1 collaborator

Tags

(This model has yet to be categorized with any tags)
Visible to everyone | Changeable by the author
Model was written in NetLogo 5.3 • Viewed 477 times • Downloaded 55 times • Run 0 times
Download the 'Spatial Dynamics of Attitude Formation' 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 model shows the spatial dynamics of attitude formation.

HOW IT WORKS

Agents select a neighbor to interact with according to an influence function. If that neighbor has the same opinion (i.e., both attitudes are positive or both are negative) then there is some probability that the focal agent "amplifies" their opinion by changing their attitude to become more extreme. This creates clusters that increase in size and have boundaries with different types of behaviors (see section on THINGS TO NOTICE).

HOW TO USE IT

There are two main parameters that determine how attitudes will change over time. The "Influence" button controls how focal agents select a neighbor. If "uniform" is selected, then each neighbor has the same chance of being picked for an interaction, regardless of their attitude. The options "linear" and "quadratic" bias those neighbors with more extreme opinions (higher absolute-valued attitudes), while options "co-linear" and "co-quadratic" bias more moderate opinions (attitudes closer to zero). Note that there are no zero attitudes.

The second main parameter is "opinion-amplification". If a focal agent shares the same opinion type of the neighbor that's been selected for interaction, then with probability p the focal individual adopts a more extreme attitude, where p is specified by the value of opinion-amplification.

The model can be initialized with respect to both the distribution of attitudes on a spectrum and their spatial location. The size of the attitude spectrum is set by "max-entrench" - it specifies what the most extreme attitudes can be. E.g., if "max-entrench" is set to 3, then the possible attitudes are {-3,-2,-1,1,2,3}. "init-attitude" specifies the range of attitudes that the simulation will start with, and "positive-to-negative-ratio" determines the frequency of positive attitudes relative to negative attitudes.

If "rnd-initial" is ON, then attitudes will be randomly assigned in space. If it is OFF, then all the positive attitudes will form a circle in the middle. The size of the circle is controlled by "radius-size".

THINGS TO NOTICE

When there is enough opinion amplification, boundaries between clusters exhibit surface tension and straighten out with what appears to be motion by mean curvature. If one type of opinion is surrounded by the second type, the first type will tend to decrease in number and the cluster is "swallowed up". If bands form with straight boundaries, then both types of opinion will coexist for a very long time.

THINGS TO TRY

If you select "linear" or "quadratic" influence, then the surface tension effect is increased. If you select "co-linear" influence, then you need to increase the amplification level to produce the surface tension effect, and even more so if you pick "co-quadratic" influence.

Turn off "rnd-initial" so that the simulation starts with a well defined boundary in the form of a circle. Notice that for uniform influence, you only need a little bit of amplification (e.g., 0.05) to keep the form of the circle. Also notice that the circle slowly decreases in size.

EXTENDING THE MODEL

Interactions are local in this model. Add code for "global" interactions, that is, create a new slider such that with some probability a focal agent will select a person from the population at random. As this probability is increased, the system becomes noisier and consensus is reached more quickly (i.e., one opinion type wins).

NETLOGO FEATURES

This model makes use of the "rnd" extension. The influence function is a weighted probability. When it is "linear" then the weights of more extreme opinions grow linearly with the absolute value of the attitude. When it is "quadratic" then the weights grow by the square.

CREDITS AND REFERENCES

Copyright 2015 Bert Baumgaertner.

Thanks to collaborators Steve Krone and Rebecca Tyson.

This project was funded by CLASS Excellence in Teaching the Humanities Endowment and NIH Grant P20GM104420.

Comments and Questions

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

Click to Run Model

extensions [rnd];This extension can be dowloaded at https://github.com/NetLogo/Rnd-Extension

globals [
  fizz ; measures the frequency of attitudes that change at each step
  left-freq ;frequency of negative attitudes
  right-freq ; frequency of positive attitudes
  ]

turtles-own [
  old-attitude
  new-attitude
  id-neighbors
  ]

to setup
  clear-all
  ask patches [set pcolor gray]
  set-default-shape turtles "square"
  make-turtle-distribution
  ask turtles [
    set size 1.2
    set old-attitude new-attitude
    set color 5 - ((old-attitude / max-entrench) * 4.9)
  ] ;; in order to do synchronous updating, we need to delay when agents update their attitudes, so we separate attitudes into new and old
  set fizz 0
  measure-frequency-over-time

  reset-ticks
end 

to go
  ask turtles [ local-interactions ]
  set fizz (count turtles with [old-attitude != new-attitude]) / count turtles
  ask turtles [
   set old-attitude new-attitude
   set color 5 - ((old-attitude / max-entrench) * 4.9)
  ]
  measure-frequency-over-time
  tick
end 

to local-interactions
  let j nobody ; j will be the other agent, which we initially set as nobody
  ifelse influence = "max-inf" or influence = "min-inf" [
    if influence = "max-inf" [
      set j max-one-of turtles-on neighbors [abs old-attitude] ]
    if influence = "min-inf" [
      set j min-one-of turtles-on neighbors [abs old-attitude] ]
  ]
  [
    let localsum 0 ; This will be sum of the neighbour attitudes, weighted by the influence function.
    let pairlist [] ; this is going to be the list of pairs with a turtle first and a probability second
    ask turtles-on neighbors [
      set localsum localsum + abs influence-function [old-attitude] of self ]
    ask turtles-on neighbors [
      let prob 0
      if localsum != 0 [set prob (abs influence-function [old-attitude] of self) / localsum]
      let pair []
      set pair lput self pair
      set pair lput prob pair
      set pairlist lput pair pairlist
    ]
    set j first rnd:weighted-one-of pairlist [last ?]
  ]
  if is-turtle? j [ ;it is possible that no agent ends up getting picked in the line above, so this checks that someone has
    ifelse random-float 1 < opinion-amplification [
      if [old-attitude] of j > 0 [
        if abs old-attitude < max-entrench [
          ifelse old-attitude = -1 [set new-attitude 1] [ set new-attitude old-attitude + 1 ]]
      ]
      if [old-attitude] of j < 0 [
        if abs old-attitude < max-entrench [
          ifelse old-attitude = 1 [set new-attitude -1] [set new-attitude old-attitude - 1 ]]
      ]]
    [
      if [old-attitude] of j > old-attitude [
        ifelse old-attitude = -1 [set new-attitude 1] [ set new-attitude old-attitude + 1]]
      if [old-attitude] of j < old-attitude [
        ifelse old-attitude = 1 [ set new-attitude -1][set new-attitude old-attitude - 1 ]]
    ]
  ]
end 

to-report influence-function [item1]
  if influence = "linear" [
    ifelse item1 = 0 [report 1] [report item1] ]  ; this is the linear update function
  if influence = "square" [
    ifelse item1 = 0 [report 1] [report (item1 ^ 2)]] ; this weighs extreme attitudes more than moderate ones
  if influence = "uniform" [
    if item1 < 0 [report -1]
    if item1 > 0 [report 1] ]
  if influence = "co-linear" [
    ifelse item1 = 0 [report 1] [report (max-entrench + 1 - abs item1) ] ]
  if influence = "co-square" [
    ifelse item1 = 0 [report 1] [report (max-entrench + 1 - abs item1) ^ 2 ] ]
end 

to make-turtle-distribution
ifelse rnd-initial [
    ask patches [;; every patch will either have a positive or negative attitude placed on them. The probability of one over the other is set by polluter-to-nonpolluter-ratio
    ifelse random-float 1 < positive-to-negative-ratio [
      sprout 1 [
        set new-attitude (random init-attitude) + 1
      ]
    ]
    [
      sprout 1 [
        set new-attitude 0 - (random init-attitude) - 1
      ]
    ]
  ]
][;;otherwise, the positive attitudes are arranged to form a circle, with a radius set by radius-size
ask patches [
    ifelse (abs pxcor) ^ 2 + (abs pycor) ^ 2 <= radius-size ^ 2 [
      sprout 1 [
        set new-attitude max-entrench
      ]
    ]
    [
      sprout 1 [
        set new-attitude (0 - max-entrench)
      ]
    ]
  ]
]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; STATISTICS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to measure-frequency-over-time
  set left-freq count turtles with [old-attitude <= -1] / count turtles
  set right-freq count turtles with [old-attitude >= 1] / count turtles
end 

;; Copyright Bert Baumgaertner
;; See info tab for credits

There are 2 versions of this model.

Uploaded by When Description Download
Bert Baumgaertner over 9 years ago Added url for downloading rnd extension under info tab Download this version
Bert Baumgaertner almost 10 years ago Initial upload Download this version

Attached files

File Type Description Last updated
rnd.jar extension Version of rnd extension required to run model. over 8 years ago, by Bert Baumgaertner Download
Spatial Dynamics of Attitude Formation.png preview Preview for 'Spatial Dynamics of Attitude Formation' almost 10 years ago, by Bert Baumgaertner Download

This model does not have any ancestors.

This model does not have any descendants.