Model of Social Identity Theory (slight update)

No preview image

1 collaborator

Tags

(This model has yet to be categorized with any tags)
Visible to everyone | Changeable by everyone
Model was written in NetLogo 6.0-M6 • Viewed 588 times • Downloaded 35 times • Run 0 times
Download the 'Model of Social Identity Theory (slight update)' 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 is a conceptual extension of Social Identity Theory from social psychology, attributable primarily to Turner and Tajfel (1979, 1982, 1986). Social psychology research holds that individuals possess a wide variety of social identities, and that which identity is most "present" or "important" for an individual at any given time will guide their behavior in particular ways. For example, many people consider themselves to have a gender identity, a national identity, and a family identity. Each of those identities has particular behavioral and motivational patterns associated with it - which one is most important at a given time will affect individual behavior in predictable ways.

According to Tajfel and Turner, there are three main mechanistic contributors to determining one's current identification: normative fit, comparative fit, and perceiver readiness. (Note that this is not a decision-making process, and often happens automatically, without individuals paying attention. If paying attention, individuals can also influence the process). These definitions are key: - Normative fit: the extent to which people acting as a certain level of a certan social dimension fit the prototype (or stereotype) of that level of that dimension. - Comparative fit: the relationship between ingroup similarity and the degree of similarity between ingroup and outgroup members. - Perceiver readiness is the broadest of the three, encompassing a wide range of contextual and individual-level factors. Two specific parts of perceiver readiness are: Social Identification, the degree to which one has historically used a given identity, and Contextual Information, which is picked up from non-person information sources in the environment (for example, books, media, etc).

By breaking down perceiver readiness in this way, we have a set of four contributors to current identification to consider in this model.

This model is aimed specifically at exploring three gaps in the theory: - This theory as it has been executed so far in social psychology does not provide information about the relative importance of each of these four mechanisms in determining current identification. - These mechanisms as discussed in the psychological literature have historically assumed that a person can only have one identity active at a particular time. (I.e. one can either enact one's female identity within the social Dimension of gender, OR one's gay identity within the social Dimension of sexuality, etc). However, emerging work in psychology is pointing out the importance of intersectional identities. - This theory does not consider aggregate-level outcomes of these individual processes.

HOW IT WORKS

Two terms that appear a lot in this script and interface are "Dimension" and "level," which have specific meanings. A social Dimension is something like gender - a type of social identity, with subdimensions. These subdimensions (for instance, men, women, and genderqueer people) are called levels. In the social psychological literature, these levels are what would be considered the social identities of the people. For the purposes of this netlogo script, I've set up 3 total dimensions, and each Dimension has a flexible number of levels. Just as a person might have a female identity within the social Dimension of gender, a person has a level 2 identity within Social Dimension 1.

At the start of the model, each person is assigned a specific level of each of the three social dimensions, as well as their current identification for the first tick of the model. They open a levelspace model brain that represents their possible identities and the relative weights of each possible identification as those are calculated on each tick. Not directly represented in the levelspace brains, but relevant to calculation of Normative and Comparative fit, each person is also assigned a random quantity of each possible trait.

Each patch is assigned a random amount of salience for each level of each Dimension.

On each tick, each agent moves and calculates several things about each of their three discrete identities to determine their relative importance. If the most important one is not the one they're currently enacting, they switch current identification on the next tick.

  • Normative Fit. This value concerns how closely the individuals currently enacting a given identity adhere to it's prototype (i.e. how close the traits of individuals representing the identity are to the average traits of all individuals who possess that identity). In this model, each person calculates this by evaluating the difference between the set of traits possessed by people currently identifying with its level of each Dimension and the average of all people who possess that level of that Dimension, whether or not they are identifying with that level. In social psychology, higher normative fit makes a given identity more useful because it is better understood; therefore, the agent is more likely to identify in this way.

  • Comparative Fit. This value concerns the relationship between ingroup homogeneity and ingroup-outgroup differences. Each person calculates (a) its average distance from all other people expressing one of its identities and (b) its average distance from all people not expressing that identity. Comparative fit is the latter divided by the former. The higher comparative fit, the more useful the identity is in defining an ingroup, and therefore the person is more likely to enact it.

Items 3 and 4, conceptually, cluster under something called "perceiver readiness." To make the model more comprehensible, and because how they cluster and what else is included in perceiver readiness is unclear in the literature, I have kept them distinct.

  • Environmental Salience. They pick this up directly from the environment - each patch has a set amount of salience for each level of each Dimension. On each turn, the people move, and that exposes them to new levels of environmental salience. This is either entirely random, or clustered, according to a parameter. If environmental salience was the only thing that determined identity expression, people should change very frequently.

  • Social Identification. The more a person has enacted a given identity, they more likely they are to continue to enact that identity. This is calculated as percentage of total time that a given identity has been enacted. If social identification was the only thing that determined identity expression, people should never change.

These are conceptually calculated in the same way whether intersectionality is permitted or not. If it is permitted, each agent has six options for how to identify (Dimension 1 Level, Dimension 2 Level, Dimension 3 Level, Dimension 1 + 2 Level Intersection, Dimension 2 + 3 Level Intersection, Dimension 1 + 3 Level Intersection), and any of those could be most important. If it is not, each person has only 2 options (Dimension 1 Level, Dimension 2 Level, Dimension 3 Level).

HOW TO USE IT

The parameters it's possible to manipulate are listed below.

  • number-of-agents: How many people are in the model.

  • levels-social-dimension1: How many possible levels are within social dimension 1.

  • levels-social-dimension2: How many possible levels there are in social dimension 2.

  • levels-social-dimension3: How many possible levels there are in social dimension 3.

  • intersectionality?: Either intersectional identities are or are not permitted to be enacted within the program.

  • number-of-traits: This variable determines how many traits you decide are relevant for each person to have (real-life examples could be physical like hair color, psychological like extroversion, or preferential like taste in food). Each person is assigned an amount of each trait from 1 to 100. These is used in the calculation of Comparative Fit and Normative Fit.

  • environmental-salience-weight: The relative weight assigned to environmental salience in determining identity importance. This is not a percentage of total possible influence, but rather how it is weighted relative to the other three contributing mechanisms.

  • comparative-fit-weight: The relative weight assigned to comparative fit in determining identity importance. This is not a percentage of total possible influence, but rather how it is weighted relative to the other three contributing mechanisms.

  • normative-fit-weight: The relative weight assigned to normative fit in determining identity importance. This is not a percentage of total possible influence, but rather how it is weighted relative to the other three contributing mechanisms.

  • social-identification-weight: The relative weight assigned to social identification in determining identity importance. This is not a percentage of total possible influence, but rather how it is weighted relative to the other three contributing mechanisms.

  • PersonColors: There are three possible displays for the people. If you're running this in behaviorspace, or without visual update, these are not relevant. (1) Dominant Dimension. This assigns people to display whichever identity they're enacting. All Dimension1 identities are red, and different levels within that Dimension are different reds. In the same way, Dimension2 identities are yellow, and Dimension3 identities are blue. If intersectional identities are an option, identities that are Dim1-Dim2 are levels of orange; Dim2-Dim3 are green; and Dim3-Dim1 are violet. (2) In An Ingroup: People display whether they are or are not in the ingroup of any other person (i.e. whether any other person considers them an ingroup member). People in an ingroup are green, and not in an ingroup are gray. (3) Switched on Last Tick: People display whether they did or did not switch which identity they're enacting on the last tick. Green is switched, gray is not.

THINGS TO NOTICE

The primary outcomes of interest in this model are: - How often agents are switching the identity they're expressing. Is this something that happens a lot? Does it barely happen? How does the weighting of the four psychological mechanisms affec this? - How many agents are enacting an intersectional identity? How does this change based on the variable parameters? - What is the size of each agent's ingroup? Do they consider many or few of the other agents to be their ingroup? How many people of the whole group are excluded entirely (i.e. not in anybody's ingroup)?

These outputs are graphed over time in the right part of the interface, and are each designed to be an individual reporter, should a BehaviorSpace experiment be needed.

THINGS TO TRY

Inspect: Clicking on inspect and then a given agent in the model gives you view access to that agent's brain as it determines the importance of different possible identifications. The visualization is such that each agent has the same number of nodes and links, in the same organization. The nodes are set up such that all the nodes in the same vertical line are levels in the same social Dimension. Each agent has one node from each of the three columns activated - these are possible identities. The links between the three active nodes are also active. If intersectionality is enabled, then these are the intersectional identities. The active people and links in the brain models adjust their size at each tick to display their relative importance.

Looking at the unique effect of each mechanism is useful in validating this model - try each of the four ways you can have one contributing mechanism matter, but none of the others. What happens? Is it surprising?

NETLOGO FEATURES

This model uses Levelspace to create brains for each agent (The file is called "05302016_Brain1.nlogo").

CREDITS AND REFERENCES

Hjorth, A. Head, B. & Wilensky, U. (2015). LevelSpace NetLogo extension [computer software]. Evanston, IL: Center for Connected Learning and Computer Based Modeling, Northwestern University. http://ccl.northwestern.edu/rp/levelspace/index.shtml .

Tajfel, H., & Turner, J. C. (1979). "An integrative theory of intergroup conflict". In W. G. Austin & S. Worchel. The social psychology of intergroup relations. Monterey, CA: Brooks/Cole. pp. 33–47.

Tajfel, H. and Turner, J. C. (1986). The social identity theory of inter-group behavior. In S. Worchel and L. W. Austin (eds.), Psychology of Intergroup Relations. Chigago: Nelson-Hall

Turner, J. C. (1982). Towards a cognitive redefinition of the social group. In H. Tajfel (ed.), Social Identity and Intergroup Relations. Cambridge: Cambridge University Press.

Wilensky, U. (1999). NetLogo [computer software]. Evanston, IL: Center for Connected Learning and Computer-Based Modeling, Northwestern University. http://ccl.northwestern.edu/netlogo .

Comments and Questions

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

Click to Run Model

; Natalie Gallagher
; June 2016

extensions [ls]

globals [
  x                   ; useful for iteration stuff, basically empty variables
  z
  a
  b
  c
  all-ingroup-turtles
  prototypes-dim1
  prototypes-dim2
  prototypes-dim3
  dimension1-colors
  dimension2-colors
  dimension3-colors
  num-ticks
  intersectionality
  ]

turtles-own [
  brain               ; where you open the level-space brain
  dim1-level
  dim2-level
  dim3-level
  dimension-dominant    ; which category identity is dominant at any given time. This will always include the three basic dimensions. In some cases, it will also include intersections (i.e. 1-2, 1-3, 2-3, and 1-2-3) and individual (i.e. no collective identity activated)
  dimension-dominant-next ; which category identity will be dominant/expressed at the next tick
  switched-on-last-tick ; did this turtle change their identity on the last tick
  ingroup-agentset
  ingroup-size
  in-ingroup
  trait-values
  num-times-switched
]


patches-own [
  dim1-salience-from-context
  dim2-salience-from-context
  dim3-salience-from-context
]

to Setup
  clear-all
  ifelse intersectionality? [                     ; is intersectionality part of this model?
    set intersectionality 1][
    set intersectionality 0]
  create-turtles number-of-agents [
    setxy random-xcor random-ycor                    ; set each turtle to a random location
    set shape "circle"
    set size 1.5
    set dim1-level (random levels-social-dimension1) + 1
    set dim2-level (random levels-social-dimension2) + 1
    set dim3-level (random levels-social-dimension3) + 1
    set trait-values n-values number-of-traits [random 101]         ; set each turtle to a random set of traits
    set num-times-switched 0
    set switched-on-last-tick 0
    ifelse intersectionality = 1 [
      set dimension-dominant one-of (list 1 2 3 12 23 13)
    ][
      set dimension-dominant (random 3)
      set dimension-dominant dimension-dominant + 1]
    set ingroup-agentset nobody
    ]

  set all-ingroup-turtles nobody
  set dimension1-colors (list 13 13.5 14 14.5 15 15.5 16 16.5 17 17.5) ;these are useful for coloring-turtles (used lists to deal with intersectional cases efficiently)
  set dimension2-colors (list 43 43.5 44 44.5 45 45.5 46 46.5 47 47.5)
  set dimension3-colors (list 103 103.5 104 104.5 105 105.5 106 106.5 107 107.5)

  setup-brain
  ask turtles [
    define-ingroup]
  set all-ingroup-turtles (turtle-set [ingroup-agentset] of turtles)
  ask turtles [
    determine-if-in-ingroup]
  ask patches [generate-patch-salience]
  setup-prototypes
  recolor-turtles
  reset-ticks
  tick
end 

to Go
  ask turtles [
      move       ; move to another patch within their distance
      (ls:ask brain [gather-salience ?1 ?2 ?3 ?4] dim1-salience-from-context dim2-salience-from-context dim3-salience-from-context intersectionality)   ; tell the child model to pick up all the salience from that place
      (ls:ask brain [define-comparative-fit ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 ?10 ?11 ?12 ?13]
          sharedlevel-distance-dim1
          sharedlevel-distance-dim2
          sharedlevel-distance-dim3
          notsharedlevel-distance-dim1
          notsharedlevel-distance-dim2
          notsharedlevel-distance-dim3
          sharedlevel-distance-intersection12
          sharedlevel-distance-intersection23
          sharedlevel-distance-intersection13
          notsharedlevel-distance-intersection12
          notsharedlevel-distance-intersection23
          notsharedlevel-distance-intersection13
          intersectionality)
      (ls:ask brain [define-normative-fit ?1 ?2 ?3 ?4 ?5 ?6 ?7]
          normative-fit-dim1
          normative-fit-dim2
          normative-fit-dim3
          normative-fit-intersection12
          normative-fit-intersection23
          normative-fit-intersection13
          intersectionality)
      set num-ticks ticks
      (ls:ask brain [set-social-identification ?1 ?2 ?3] num-ticks dimension-dominant intersectionality)
      (ls:ask brain [determine-next-dimension ?1 ?2 ?3 ?4 ?5 ?6] normative-fit-weight comparative-fit-weight environmental-salience-weight social-identification-weight intersectionality dimension-dominant)
      set dimension-dominant-next (ls:report brain [dimension-dominant-next-child])
      define-ingroup]
  set all-ingroup-turtles (turtle-set [ingroup-agentset] of turtles)
  ask turtles [
      determine-if-in-ingroup
      dominant-identity-switch]
  recolor-turtles
  tick
end 

to setup-prototypes
  ; first, generate the list of lists that I'll populate with prototypes from the actual agents
  set prototypes-dim1 n-values levels-social-dimension1 [n-values number-of-traits [0]]
  set prototypes-dim2 n-values levels-social-dimension2 [n-values number-of-traits [0]]
  set prototypes-dim3 n-values levels-social-dimension3 [n-values number-of-traits [0]]
  set a 1
  set b 1
  set c 1

  while [a <= levels-social-dimension1] [                                           ; this will iterate for each level of Dimension1
    ; collate list of lists of all agents with each level of each category
    if any? turtles with [dim1-level = a] [
      set x (map [[trait-values] of ?] sort turtles with [dim1-level = a])
      set z 1                            ; this will iterate for each TRAIT
      while [z <= number-of-traits] [
        set prototypes-dim1 replace-item (a - 1) prototypes-dim1 (replace-item (z - 1) (item (a - 1) prototypes-dim1) mean (map [item (z - 1) ?] x))
        set z z + 1]]
    set a a + 1]

  while [b <= levels-social-dimension2] [                                           ; this will iterate for each level of Dimension2
    ; collate list of lists of all agents with each level of each category
    if any? turtles with [dim2-level = b] [
      set x (map [[trait-values] of ?] sort turtles with [dim2-level = b])
      set z 1                            ; this will iterate for each TRAIT
      while [z <= number-of-traits] [
        set prototypes-dim2 replace-item (b - 1) prototypes-dim2 (replace-item (z - 1) (item (b - 1) prototypes-dim2) mean (map [item (z - 1) ?] x))
        set z z + 1]]
    set b b + 1]

  while [c <= levels-social-dimension3] [                                           ; this will iterate for each level of Dimension3
    ; collate list of lists of all agents with each level of each category
    if any? turtles with [dim3-level = c] [
      set x (map [[trait-values] of ?] sort turtles with [dim3-level = c])
      set z 1                            ; this will iterate for each TRAIT
      while [z <= number-of-traits] [
        set prototypes-dim3 replace-item (c - 1) prototypes-dim3 (replace-item (z - 1) (item (c - 1) prototypes-dim3) mean (map [item (z - 1) ?] x))
        set z z + 1]]
    set c c + 1]
end 

to setup-brain
  while [length ls:models < count turtles] [
  (ls:load-headless-model "05302016_Brain1.nlogo")]
  let available-brains ls:models
  ask turtles [
    set brain first available-brains
    set available-brains but-first available-brains
    ls:set-name brain (word "Brain of " self)
    (ls:ask brain [setup ?1 ?2 ?3] levels-social-dimension1 levels-social-dimension2 levels-social-dimension3)
    (ls:ask brain [activate-levels ?1 ?2 ?3 ?4] dim1-level dim2-level dim3-level dimension-dominant)]
end 

to move                    ; turtles move some random amount in a random direction, so they're exposed to new "environmental" or "patch" influences
  lt random 360
  rt random 360
  fd random 5
end 

to dominant-identity-switch ; agent procedure
  ifelse dimension-dominant != dimension-dominant-next [         ; if the current category doesn't match the "next" category,
    set dimension-dominant dimension-dominant-next
    set switched-on-last-tick 1
    set num-times-switched num-times-switched + 1] [
    set switched-on-last-tick 0]
end 

to generate-patch-salience
      set dim1-salience-from-context n-values levels-social-dimension1 [(random 100) + 1]   ; for each level of each category, each patch has a random % salience
      set dim2-salience-from-context n-values levels-social-dimension2 [(random 100) + 1]
      set dim3-salience-from-context n-values levels-social-dimension3 [(random 100) + 1]
end 

to define-ingroup  ; turtle procedure
     if [dimension-dominant] of self = 1 [
        set ingroup-agentset agentset-enacting-my-dim1-level with [WHO != [WHO] of myself]]
      if [dimension-dominant] of self = 2 [
        set ingroup-agentset agentset-enacting-my-dim2-level with [WHO != [WHO] of myself]]
      if [dimension-dominant] of self = 3 [
        set ingroup-agentset agentset-enacting-my-dim3-level with [WHO != [WHO] of myself]]
      if [dimension-dominant] of self = 12 [
        set ingroup-agentset agentset-enacting-my-dim1-dim2-intersection with [WHO != [WHO] of myself]]
      if [dimension-dominant] of self = 23 [
        set ingroup-agentset agentset-enacting-my-dim2-dim3-intersection with [WHO != [WHO] of myself]]
      if [dimension-dominant] of self = 13 [
        set ingroup-agentset agentset-enacting-my-dim1-dim3-intersection with [WHO != [WHO] of myself]]
      set ingroup-size count ingroup-agentset
end 

to determine-if-in-ingroup        ; this is where each turtle determines whether it is, at all, in an ingroup
     ifelse member? self all-ingroup-turtles [                                ; ask each turtle to determine whether it is a member of the overall ingroup, and set its value accordingly
       set in-ingroup 1][
       set in-ingroup 0]
end 

to recolor-turtles
  if (TurtleColors = "Dominant Dimension") [       ; if the switch is set for turtles to display their dominant category, do this
    ask turtles [                                      ; set overall color based on categorydominant, and then each level within each category is a particular color
      if dimension-dominant = 1 [
        set color item (dim1-level - 1) dimension1-colors]
      if dimension-dominant = 2 [
        set color item (dim2-level - 1) dimension2-colors]
      if dimension-dominant = 3 [
        set color item (dim3-level - 1) dimension3-colors]
      if dimension-dominant = 12 [
        set color (20 + (((item (dim1-level - 1) dimension1-colors) + (item (dim2-level - 1) dimension2-colors) - 50) / 2))]
      if dimension-dominant = 23 [
        set color (50 + (((item (dim3-level - 1) dimension3-colors) + (item (dim2-level - 1) dimension2-colors) - 140) / 2))]
      if dimension-dominant = 13 [
        set color (110 + (((item (dim1-level - 1) dimension1-colors) + (item (dim3-level - 1) dimension3-colors) - 110) / 2))]]]

  if (TurtleColors = "In An Ingroup") [
    ask turtles [
      if in-ingroup = 1 [
        set color green]
      if in-ingroup = 0 [
        set color gray]]]

  if (TurtleColors = "Switched On Last Tick") [
    ask turtles [
      if switched-on-last-tick = 1 [
        set color green]
      if switched-on-last-tick = 0 [
        set color gray]]]
end 




;; Below here is all reporters.

to-report percent-excluded
  ifelse any? all-ingroup-turtles [
    report 100 - ((count all-ingroup-turtles / count turtles) * 100)]
    [report 100]
end 

to-report mean-ingroup-size
  ifelse any? all-ingroup-turtles [
    report mean([ingroup-size] of turtles)]
    [report 0]
end 

to-report percent-switched-on-last-tick
  report ( count turtles with [switched-on-last-tick = 1] / count turtles) * 100
end 

to-report percent-expressing-dim1
  report (count turtles with [dimension-dominant = 1]) * 100 / (count turtles)
end 

to-report percent-expressing-dim2
  report (count turtles with [dimension-dominant = 2]) * 100 / (count turtles)
end 

to-report percent-expressing-dim3
  report (count turtles with [dimension-dominant = 3]) * 100 / (count turtles)
end 

to-report percent-expressing-intersection12
  report (count turtles with [dimension-dominant = 12]) * 100 / (count turtles)
end 

to-report percent-expressing-intersection23
  report (count turtles with [dimension-dominant = 23]) * 100 / (count turtles)
end 

to-report percent-expressing-intersection13
  report (count turtles with [dimension-dominant = 13]) * 100 / (count turtles)
end 

to-report percent-intersectional
  report (count turtles with [dimension-dominant = 12 or dimension-dominant = 23 or dimension-dominant = 13])/(count turtles) * 100
end 

to-report mean-percent-switches-per-turtle
  ifelse ticks != 0 [
  report 100 * mean([num-times-switched] of turtles) / ticks][
  report 0]
end 

; Relevant for the calculation of Comparative Fit

to-report query-distance [ person ]
  let othertraitlist [trait-values] of person
  let traitdistance mean ( map [ abs(?1 - ?2)] othertraitlist trait-values)
  report traitdistance
end 

to-report agentset-enacting-my-dim1-level
  report turtles with [dimension-dominant = 1 and dim1-level = [dim1-level] of myself]
end 

to-report agentset-enacting-my-dim2-level
  report turtles with [dimension-dominant = 2 and dim2-level = [dim2-level] of myself]
end 

to-report agentset-enacting-my-dim3-level
  report turtles with [dimension-dominant = 3 and dim3-level = [dim3-level] of myself]
end 

to-report agentset-enacting-my-dim1-dim2-intersection
  report turtles with [dimension-dominant = 12 and dim1-level = [dim1-level] of myself and dim2-level = [dim2-level] of myself]
end 

to-report agentset-enacting-my-dim2-dim3-intersection
  report turtles with [dimension-dominant = 23 and dim2-level = [dim2-level] of myself and dim3-level = [dim3-level] of myself]
end 

to-report agentset-enacting-my-dim1-dim3-intersection
  report turtles with [dimension-dominant = 13 and dim1-level = [dim1-level] of myself and dim3-level = [dim3-level] of myself]
end 

to-report sharedlevel-distance-dim1
  ifelse any? agentset-enacting-my-dim1-level [
      ifelse (round( mean([query-distance myself] of agentset-enacting-my-dim1-level))) = 0 [
        report 1]
      [ report round( mean([query-distance myself] of agentset-enacting-my-dim1-level))]]
  [report 100] ; if there are no turtles enacting my level of category 1, then ingroup homogeneity is as high as possible (it's only me), which is the number of traits on which differing is possible, times the maximum possible difference on any single trait, which is 100
end 

to-report sharedlevel-distance-dim2
  ifelse any? agentset-enacting-my-dim2-level [
    ifelse (round( mean([query-distance myself] of agentset-enacting-my-dim2-level))) = 0 [
        report 1]
      [ report round( mean([query-distance myself] of agentset-enacting-my-dim2-level))]]
  [report 100]
end 

to-report sharedlevel-distance-dim3
  ifelse any? agentset-enacting-my-dim3-level [
      ifelse (round( mean([query-distance myself] of agentset-enacting-my-dim3-level))) = 0 [
        report 1]
      [ report round( mean([query-distance myself] of agentset-enacting-my-dim3-level))]]
  [report 100]
end 

to-report sharedlevel-distance-intersection12
  ifelse any? agentset-enacting-my-dim1-dim2-intersection [
      ifelse (round( mean([query-distance myself] of agentset-enacting-my-dim1-dim2-intersection))) = 0 [
        report 1]
      [ report round( mean([query-distance myself] of agentset-enacting-my-dim1-dim2-intersection))]]
  [report 100]
end 

to-report sharedlevel-distance-intersection23
  ifelse any? agentset-enacting-my-dim2-dim3-intersection [
      ifelse (round( mean([query-distance myself] of agentset-enacting-my-dim2-dim3-intersection))) = 0 [
        report 1]
      [ report round( mean([query-distance myself] of agentset-enacting-my-dim2-dim3-intersection))]]
  [report 100]
end 

to-report sharedlevel-distance-intersection13
  ifelse any? agentset-enacting-my-dim1-dim3-intersection [
      ifelse (round( mean([query-distance myself] of agentset-enacting-my-dim1-dim3-intersection))) = 0 [
        report 1]
      [ report round( mean([query-distance myself] of agentset-enacting-my-dim1-dim3-intersection))]]
  [report 100]
end 

to-report notsharedlevel-distance-dim1
  ifelse any? other turtles with [not member? self agentset-enacting-my-dim1-level] [
      ifelse (round (mean([query-distance myself] of other turtles with [not member? self agentset-enacting-my-dim1-level]))) = 0 [  ; if this rounds down to zero
         report 1][
         report ( round (mean([query-distance myself] of other turtles with [not member? self agentset-enacting-my-dim1-level])))]]
  [report 100]
end 

to-report notsharedlevel-distance-dim2
  ifelse any? other turtles with [not member? self agentset-enacting-my-dim2-level] [
      ifelse ( round (mean([query-distance myself] of other turtles with [not member? self agentset-enacting-my-dim2-level]))) = 0 [  ; if this rounds down to zero
         report 1][
         report ( round (mean([query-distance myself] of other turtles with [not member? self agentset-enacting-my-dim2-level])))]]
  [report 100] ; if there are no turtles outside of the identity I'm considering, intergroup is as high as possible
end 

to-report notsharedlevel-distance-dim3
  ifelse any? other turtles with [not member? self agentset-enacting-my-dim3-level] [
      ifelse ( round (mean([query-distance myself] of other turtles with [not member? self agentset-enacting-my-dim3-level]))) = 0 [  ; if this rounds down to zero
         report 1][
         report ( round (mean([query-distance myself] of other turtles with [not member? self agentset-enacting-my-dim3-level])))]]
  [report 100]
end 

to-report notsharedlevel-distance-intersection12
  ifelse any? other turtles with [not member? self agentset-enacting-my-dim1-dim2-intersection] [
      ifelse ( round (mean([query-distance myself] of other turtles with [not member? self agentset-enacting-my-dim1-dim2-intersection]))) = 0 [  ; if this rounds down to zero
         report 1][
         report ( round (mean([query-distance myself] of other turtles with [not member? self agentset-enacting-my-dim1-dim2-intersection])))]]
  [report 100]
end 

to-report notsharedlevel-distance-intersection23
  ifelse any? other turtles with [not member? self agentset-enacting-my-dim2-dim3-intersection] [
      ifelse ( round (mean([query-distance myself] of other turtles with [not member? self agentset-enacting-my-dim2-dim3-intersection]))) = 0 [  ; if this rounds down to zero
         report 1][
         report ( round (mean([query-distance myself] of other turtles with [not member? self agentset-enacting-my-dim2-dim3-intersection])))]]
  [report 100]
end 

to-report notsharedlevel-distance-intersection13
  ifelse any? other turtles with [not member? self agentset-enacting-my-dim1-dim3-intersection] [
      ifelse ( round (mean([query-distance myself] of other turtles with [not member? self agentset-enacting-my-dim1-dim3-intersection]))) = 0 [  ; if this rounds down to zero
         report 1][
         report ( round (mean([query-distance myself] of other turtles with [not member? self agentset-enacting-my-dim1-dim3-intersection])))]]
  [report 100]
end 


; Relevant for calculation of Normative Fit

to-report distance-from-prototype-dim1
  report mean(map [ abs( ?1 - ?2)] trait-values item (dim1-level - 1) prototypes-dim1)
end 

to-report distance-from-prototype-dim2
  report mean( map [ abs( ?1 - ?2)] trait-values item (dim2-level - 1) prototypes-dim2)
end 

to-report distance-from-prototype-dim3
  report mean( map [ abs( ?1 - ?2)] trait-values item (dim3-level - 1) prototypes-dim3)
end 

to-report distance-from-prototype-intersection12
  report mean( map [abs (?1 - ?2)] trait-values (map[(?1 + ?2) / 2] item (dim1-level - 1) prototypes-dim1 item (dim2-level - 1) prototypes-dim2))
end 

to-report distance-from-prototype-intersection23
    report mean( map [abs (?1 - ?2)] trait-values (map[(?1 + ?2) / 2] item (dim2-level - 1) prototypes-dim2 item (dim3-level - 1) prototypes-dim3))
end 

to-report distance-from-prototype-intersection13
    report mean( map [abs (?1 - ?2)] trait-values (map[(?1 + ?2) / 2] item (dim1-level - 1) prototypes-dim1 item (dim3-level - 1) prototypes-dim3))
end 

to-report normative-fit-dim1
  ifelse any? agentset-enacting-my-dim1-level [                  ; are there any turtles that have my level of category 1 and are expressing it, including myself?
    ifelse round( mean([distance-from-prototype-dim1] of agentset-enacting-my-dim1-level)) = 0 [    ; if so, how distant are those turtles expressing my level of category 1 from the prototype of my level of category 1
      report 1][
      report round( mean([distance-from-prototype-dim1] of agentset-enacting-my-dim1-level))]]
  [report 100]
end 

to-report normative-fit-dim2
  ifelse any? agentset-enacting-my-dim2-level [
    ifelse round( mean([distance-from-prototype-dim2] of agentset-enacting-my-dim2-level)) = 0 [    ; if so, how distant are those turtles expressing my level of category 1 from the prototype of my level of category 1
      report 1][
      report round( mean([distance-from-prototype-dim2] of agentset-enacting-my-dim2-level))]]
  [report 100]
end 

to-report normative-fit-dim3
  ifelse any? agentset-enacting-my-dim3-level [
    ifelse round( mean([distance-from-prototype-dim3] of agentset-enacting-my-dim3-level)) = 0 [    ; if so, how distant are those turtles expressing my level of category 1 from the prototype of my level of category 1
      report 1][
      report round( mean([distance-from-prototype-dim3] of agentset-enacting-my-dim3-level))]]
  [report 100]
end 

to-report normative-fit-intersection12
    ifelse any? agentset-enacting-my-dim1-dim3-intersection [
    ifelse round(mean([distance-from-prototype-intersection13] of agentset-enacting-my-dim1-dim3-intersection)) = 0 [
      report 1][
      report round(mean([distance-from-prototype-intersection13] of agentset-enacting-my-dim1-dim3-intersection))]]
  [report 100]
end 

to-report normative-fit-intersection23
    ifelse any? agentset-enacting-my-dim2-dim3-intersection [
    ifelse round(mean([distance-from-prototype-intersection23] of agentset-enacting-my-dim2-dim3-intersection)) = 0 [
      report 1][
      report round(mean([distance-from-prototype-intersection23] of agentset-enacting-my-dim2-dim3-intersection))]]
  [report 100]
end 

to-report normative-fit-intersection13
  ifelse any? agentset-enacting-my-dim1-dim3-intersection [
    ifelse round(mean([distance-from-prototype-intersection13] of agentset-enacting-my-dim1-dim3-intersection)) = 0 [
      report 1][
      report round(mean([distance-from-prototype-intersection13] of agentset-enacting-my-dim1-dim3-intersection))]]
  [report 100]
end 

There is only one version of this model, created over 9 years ago by Natalie Gallagher.

Attached files

No files

This model does not have any ancestors.

This model does not have any descendants.