Rapid Social and Socioeconomic Change

Richard's Subtitle Here

by Richard J. Gaylord

Introduction:

There has always been a great deal of interest in the cause of precipitous, often unanticipated, changes in social and economic behavior. A detailed qualitative model has recently been proposed [Gladwell, 2000] which suggests that such changes might be bought about in an intentional, planned manner. However, the failure of previous attempts at both social and economic engineering are well known [Krugman, 2000]. In this article, I will present an extremely simple model of sudden social and socioeconomic change based upon how individuals make decisions.

Fundamentally, decisions about what to think and/or how to behave are made by people either: (1) independently of others or, (2) based on their interactions with others. A model based on this basic insight was developed [Kirman, 1993] which used the following decision-making mechanism: On each time step, an individual is randomly selected from a population. This individual first makes a probabilistically-based decision about changing his opinion. If he chooses not to change, a second individual is randomly chosen from the population and the first person then makes a probabilistic decision about changing his opinion to match the opinion of the second person. The second individual does not change his opinion as a result of his interaction with the first individual and the probabilities of the two choices made by the first individual are not necessary the same. This process is repeated over many time steps.

We have simplified the Kirman decision-making model by designating two distinct personality types: the inner-directed (ID) individual whose opinions and behaviors are not affected by others and the outer-directed (OD) individual whose opinions and behaviors are influenced by others. We will present this model here and indicate how it might be extended or modified and used to understand a wide variety of socially-based behavior, including economic activity.

Defining The System:

The social system is represented by a nested list consisting of a number of triplets whose elements characterize a particular agent (person). The three values in each agent's list represent:

{opinion state, conversion probability, personality type}

where

- each agent can be in one of two opinion states. 
  (integer value 0 or 1)

Note: I will use the term opinion state throughout this article but the analysis applies equally well to behavior states (or behavior).

- each agent has a conversion probability of changing his opinion 
  state during a bilateral interaction with another agent.
  (real number value between 0 and 1)   

- each agent has a specific way of making a decision.
  (integer value 0 (an OD agent) and 1 (an ID agent))

Note: Some possible modifications and/or extensions that could be made to the basic model used here include:
- having additional and/or different personality types.
- giving agents additional characteristics which affect their 
  interactions (for example, social status is undoubtably a 
  determinant feature in interactions in a hierarchical or 
  stratified society).

Creating the Initial State of the Society:

I create a list of agent triplets using

societyGenerator[i_, p_, a_, b_, n_?EvenQ] :=
 Join[Table[{Floor[1 + p - Random[]], a,  1}, {i}],
      Table[{Floor[1 + p - Random[]], b,  0}, {n - i}] ] /; i < n

where

n       = total number of agents (this must be an even number)
i       = number of inner-directed (ID) agents
(n - i) = number of outer-directed (OD) agents
p       = probability of an agent being initially in opinion state 1 
(1 - p) = probability of an agent being initially in opinion state 0 
a       = probability of a ID agent changing his opinion state 
          during an interaction with another agent
b       = probability of an OD agent changing his opinion state 
          during an interaction with another agent
t       = number of time steps

Note: In the societyGenerator program, every agent of a given type is assigned the same conversion probability value.

Updating The System:

The Conversion Rules:

I assume that interactions between agents are dyadic (ie., pair-wise) so i'll use a pair of agent triplets as the argument to a conversion rule.

I note that in the following set of rules, only the first of the pair of interacting agents may undergo a change in his opinion state during the interaction. While both agents could be changed in a single rule application, I don't do this in order to keep the rules simple and since, as I'll note in the next section, agent pairings are chosen randomly on each time step, thereby giving every agent the opportunity to change, given sufficient time.

Rules are defined below in groupings for each type of agent:

inner-directed (ID) agents:

convert[{{1, a_, 1}, {w__}}] := {{0, a, 1}, {w}} /; Random[] < a
convert[{{1, a_, 1}, {w__}}] := {{1, a, 1}, {w}}
convert[{{0, a_, 1}, {w__}}] := {{1, a, 1}, {w}} /; Random[] < a
convert[{{0, a_, 1}, {w__}}] := {{0, a, 1}, {w}}

outer-directed (OD) agents:

convert[{{1, b_, 0}, {0, y__}}] := {{0, b, 0}, {0, y}} /; 
                                                  Random[] < b
convert[{{1, b_, 0}, {0, y__}}] := {{1, b, 0}, {0, y}}
convert[{{0, b_, 0}, {1, y__}}] := {{1, b, 0}, {1, y}} /; 
                                                  Random[] < b
convert[{{0, b_, 0}, {1, y__}}] := {{0, b, 0}, {1, y}}                                                 
convert[{{1, b_, 0}, {1, y__}}] := {{1, b, 0}, {1, y}}
convert[{{0, b_, 0}, {0, y__}}] := {{0, b, 0}, {0, y}}

In the rule set above, the rules in which change may occur come in pairs: a rule with an attached condition causes an agent to change his opinion state with some probability and the rule with the same left-hand side but without an attached condition on the right-hand side (which is defaulted to when the condition in the corresponding conditional rule is not satisfied) leaves the agent's opinion state unchanged. 

Note: In this simplest version of the model, an OD agent only changes his opinion state to agree with the opinion state of the agent he is interacting with, which corresponds to being a conformist. Additionally, the conversion probability of an agent is left unaltered by an interaction.

Applying The Conversion Rules:

Since a conversion rule takes a pair of agent triplets as its argument, I need to generate pairs of agents to feed to the conversion rules. 

A list consisting of (n/2) random pairings of the n agents is created using

randomPairings[lis_]:=
    Partition[Transpose[Sort[Map[{Random[], #}&, #] ] ][[2]],
                  2]&[lis]

The conversion rules are applied to all of the pairs of agents simultaneously and the resulting list of pairs of triplets is then flattened to create a linear list of n agent triplets, using the anonymous function

Flatten[Map[convert, randomPairings[#] ], 1]&

For repeated application of the conversion rules over t time steps, I use

NestList[Flatten[Map[convert, randomPairings[#] ], 1]&, society, t]

Note: If I want to update the agent pairs in the fashion of a monte carlo simulation (ie., by updating only one randomly chosen pair of agents per time step as is done in the Kirman model), I can replace the above NestList command with

NestList[
  Flatten[Join[convert[{First[#]]}, Rest[#]]&[randomPairings[#]], 1]& society, t]

Note: Other asynchronous agent updating schemes can be easily implemented by performing appropriate list manipulations, an ability that Mathematica excels at.

The Program:

The decisionMaking program is given by combining the code fragments above:

decisionMaking[society_, t_]:=
Module[{randomPairings, convert},

randomPairings[lis_]:=
 Partition[Transpose[Sort[Map[{Random[], #}&, #]]][[2]], 2]&[lis];

convert[{{1, a_, 1}, {w__}}] := {{0, a, 1}, {w}} /; Random[] < a;
convert[{{1, a_, 1}, {w__}}] := {{1, a, 1}, {w}};
convert[{{0, a_, 1}, {w__}}] := {{1, a, 1}, {w}} /; Random[] < a;
convert[{{0, a_, 1}, {w__}}] := {{0, a, 1}, {w}};
convert[{{1, b_, 0}, {0, y__}}] := {{0, b, 0}, {0, y}} /; 
                                                  Random[] < b;
convert[{{1, b_, 0}, {0, y__}}] := {{1, b, 0}, {0, y}};
convert[{{0, b_, 0}, {1, y__}}] := {{1, b, 0}, {1, y}} /; 
                                                  Random[] < b;
convert[{{0, b_, 0}, {1, y__}}] := {{0, b, 0}, {1, y}};                                                 
convert[{{1, b_, 0}, {1, y__}}] := {{1, b, 0}, {1, y}};
convert[{{0, b_, 0}, {0, y__}}] := {{0, b, 0}, {0, y}};

NestList[Flatten[Map[convert, randomPairings[#] ], 1]&, society, t]
       ]

Running The Program:

The decisionMaking program is executed out by entering in succession

SeedRandom[x]
society = societyGenerator[i, p, a, b, n]

SeedRandom[y]
decisionMaking[society, t]

where x, i, p, a, b, n, y, t are specific input values.

Note: The reason I create the society outside of the decisionMaking program and then feed it into the program, rather than incorporating society creation within the program, is that this allows me to study the behavior of the model in a more controlled fashion.

The Effect of a Lone Independent in a Society of Conformists

I'll look at the effect of having a single independent agent amongst a group of conformist agents.

100 agents - 1 ID agent and 99 OD agents 
probability of being in opinion state 1(0) = 0.50(0.50) initially
conversion probability for an independent = 0.1  [low]
conversion probability for a conformist = 0.90  [high]
5000 time steps

SeedRandom[32]
society = societyGenerator[1, 0.5, 0.1, 0.9, 100];

SeedRandom[2]
i1c99 = decisionMaking[society, 5000];

individualsInOpinionState1 = Map[Count[#, {1, _, _}]&, i1c99];

i1c99InitialOpinionsCount = 
{Count[i1c99[[1]], {0, _, _}], Count[i1c99[[1]], {1, _, _}]}

To see how the number of agents having opinion state 1 varies over time, I plot

ListPlot[individualsInOpinionState1, PlotJoined -> True, DefaultColor -> RGBColor[0.349538, 0.0460059, 0.459998]];

The behavior in the above graph is surprising (at least it was to me). It indicates that there are extended periods of time during which all, or nearly all, of the agents are in opinion state 1 and there are extended periods of time during which all, or nearly all, of the agents are in opinion state 0. Moreover, the transitions between these periods can occur relatively rapid.

Another way to see this behavior is to take slices from the above graph by drawing lines parallel to the time axis, and count how many times the line is crossed during the duration of the simulation run.

ListPlot[Map[{#/100., Count[individualsInOpinionState1, #]}&, 
  Range[0, 100]], PlotJoined -> True, AxesOrigin -> {0, 20},
  DefaultColor -> RGBColor[0.699992, 0.216541, 0.18201] ];

The x axis represents the fraction of agents in opinion state 1 (ie., the distribution of agents between opinion states 1 and 0) and the y axis represents how many times the society has that distribution during the entire course of the simulation run.

The graph indicates that a great deal of time is spent at the extremes of system composition (when most of the agents are in opinion state 0 (small values along the x axis) and when most of the agents are in opinion state 1 (large values along the x axis)) and that relatively little time is spent in intermediate opinion state compositions.

Modifications and Applications of the decisionMaking Model

Using Heterogenous Agent Conversion Probabilities:

Innovation Diffusion: It is well-established empirically, that the acquisition of a material good, the acceptance of an idea, and imitative behavior in general, spreads across a population following a sigmoidal-shaped curve of the total number of adopters vs. time.

The S-shaped adoption curve can be produced by the decisionMaking model simply by considering a population comprised of agents whose conversion probabilities vary.

The use of a spread of conversion probability values amongst the agents is quite realistic because clearly, many of the characteristics of the members of a society (including the propensity to adapt oneself to the opinions or behaviors of others) are inherently heterogeneous.

Note:the agent-based modeling approach (which we are using in this model) is especially, possibly uniquely, well-suited for dealing with a society of heterogeneous agents.

I first set up a society in which every agent is a conformist (i could also have independents in the system but it's not necessary) and all but one agent is in the same opinion state. That one agent acts as the seed for the conversion process and is given a conversion probability of zero while a range of conversion probabilities is given to the other agents.

One way to create agents with a spread of conversion probabilities (or a spread of any other characteristic, such as social status) is to use the many Mathematica distribution functions available in a loadable package. To do this, I first enter

<<Statistics`ContinuousDistributions`

To see what distribution functions are available to choose from in this package, I enter

?*Distribution*

To create a spread of values in a specific characteristic amongst the agents, I can use the following as the input value for that characteristic in societyGenerator (the normal distributon is used here as an example):

Unevaluated[Random[NormalDistribution[mu, sigma]]]

I can also create my own distribution function, if I wish to.

The choice of which distribution function to use to generate conversion probabilities for the agents should obviously be determined by some sound sociological or psychological criteria, rather than simply because a function produces a sigmoidal curve.

Making An Agent's Conversion Probability Dependent On His  Previous Interactions With Other Agents:

We can increase (decrease) the conversion probability of an agent (conversion probability + increment (decrement)) each time he interacts with another agent. We can also  just reset the conversion probability to a specific new value after an interaction.

The Bandwagon Effect: This effect describes the increasing likelihood of an agent adopting the opinion state of another agent as the number of agents in that state increases. 

Note: This effect is actually an inherent feature of the basic decisionMaking model because an agent is more likely to be paired with an agent in a particular opinion state during a given time step as the number of agents in that state increases.

The Yogi Berra (Anti-bandwagon) Effect: This effect (named after the baseball player who said "[that] restaurant is so busy [that] nobody goes there any more") describes the tendency of an agent to not convert to a different opinion state if too many other agents are already in that opinion state.

Using Several Opinion States:

The Microphase Separation Effect: What is the effect of having more than two (eg., three) opinion states on the distribution of agents between the states? It would be interesting to determine if it is possible to cause a separation of agents into two groups which persist over long periods of time, by using only two opinion states or whether it is necessary to have more states to choose between.

Acknowledgements:

I would like to thank Duane D. Johnson, my departmental colleague, for his energetic discussions with the 'crazy guy' in the office next to his. I would also like to thank Jon S. Davis for our intense conversations about many aspects of social science modeling over many early morning cafe lattes and lunchtime sushi and for patiently explaining the Kirman model to me several times. Tim Dellinger was also helpful in discussions and in suggestions concerning some of the coding.

REFERENCES

Kirman, A. 1993. Ants, rationality and recruitment. Quarterly
Journal of Economics (February): 137-156.

Gladwell, Malcolm. 2000. The Tipping Point. Little, Brown and 
Company.

Krugman, Paul. 2000. Reckonings: No Tipping, Please, New York Times. April 12.

ABOUT THE AUTHOR

Richard J. Gaylord is a Professor in the Department of Materials Science and Engineering at the University of Illinois at Urbana-Champaign. Originally a theoretical physicist, he is currently interested in the use of cellular automata to model socio-economic behavior. He is on the editorial boards of Mathematica in Education and Research, The Mathematica Journal, and Mathematica World. In addition to writing the Simulating Experiences: Excursions in Programming column in Mathematica in Education and Research, he is the co-author, with Paul Wellin, of Introduction to Programming with Mathematica and Computer Simulations with Mathematica: Explorations in Complex Physical and Biological Systems. He is also a co-author, with Kazume Nishidate, of Modeling Nature: Cellular Automata Simulations with Mathematica. His hobby is watching movies. 

Richard J. Gaylord
Department of Materials Science and Engineering
University of Illinois at Urbana-Champaign
Urbana, Illinois 61801
gaylord@ux1.cso.uiuc.edu

ELECTRONIC SUBSCRIPTIONS

Included in the distribution for each electronic subscription is the file change.nb, containing Mathematica code for the material described in this article.