structuration, knowledge coordination, and ...wk088dm9350...structuration, knowledge coordination,...
TRANSCRIPT
STRUCTURATION, KNOWLEDGE COORDINATION, AND PROFIT:
MODELING A MICROSOCIOLOGICAL THEORY OF DISEQUILIBRIUM
MARKET DYNAMICS
A DISSERTATION
SUBMITTED TO THE DEPARTMENT OF SOCIOLOGY
AND THE COMMITTEE ON GRADUATE STUDIES
OF STANFORD UNIVERSITY
IN PARTIAL FULFILLMENT OF THE REQUIREMENTS
FOR THE DEGREE OF
DOCTOR OF PHILOSOPHY
John Chandler Johnson
June 2013
http://creativecommons.org/licenses/by-nc/3.0/us/
This dissertation is online at: http://purl.stanford.edu/wk088dm9350
© 2013 by John Chandler Johnson. All Rights Reserved.
Re-distributed by Stanford University under license with the author.
This work is licensed under a Creative Commons Attribution-Noncommercial 3.0 United States License.
ii
I certify that I have read this dissertation and that, in my opinion, it is fully adequatein scope and quality as a dissertation for the degree of Doctor of Philosophy.
Mark Granovetter, Primary Adviser
I certify that I have read this dissertation and that, in my opinion, it is fully adequatein scope and quality as a dissertation for the degree of Doctor of Philosophy.
Daniel McFarland
I certify that I have read this dissertation and that, in my opinion, it is fully adequatein scope and quality as a dissertation for the degree of Doctor of Philosophy.
Andrew Walder
Approved for the Stanford University Committee on Graduate Studies.
Patricia J. Gumport, Vice Provost Graduate Education
This signature page was generated electronically upon submission of this dissertation in electronic format. An original signed hard copy of the signature page is on file inUniversity Archives.
iii
v
Abstract
To develop a microsociological theory of market dynamics, this dissertation
formalizes a theory of the co-evolution of social structure, interaction, individual
knowledge, system-level coordination, and system-level behavior. The dissertation
parameterizes the formal theory using transaction-level data from and structural
characteristics of the global steel market. Through a computational implementation of
the parameterized theory, the dissertation explores microsociological origins of
system-level dynamics. In markets with imperfect information, mechanisms of social
structural reproduction govern a telephone game in which sequences of actions
communicate path dependent and noisy signals about the universe of actors’
preferences and constraints. Variance in the mechanisms of structural reproduction
yield differently coordinated systems. Using archetypal comparisons, the dissertation
reveals that this socially contextualized coordination influences system-level
outcomes. The dissertation approaches markets as inherently social objects, but
consciously mimics most aspects of economics’ perfect competition, thereby
illuminating markets’ irreducibly social nature. The dissertation’s computational
implementation of formal theory extends economic sociology as a microsociological
theory of market dynamics, and creates a bridge to economics by offering a
sociological model of dynamic imperfect information.
vii
To Gus, Libba, Lyle, and Verna
ix
Acknowledgements
Trying to reconcile industry experience in the U.S. and China with my
undergraduate background in economics, I originally planned to explore variations in
economic growth attributable to cultural variation in dyadic interaction. Years later,
my dissertation computationally instantiates a formal theory of the co-evolution of
social structure, individual knowledge, and system dynamics during interaction. This
transition from cross-cultural comparison to simulating formal theory hints at the
magnitude of my learning catalyzed by colleagues and mentors at Stanford.
Stanford is rich in fantastic colleagues, but I am particularly indebted to Joon
Nak Choi, Jonathon Haynes, Will Nelson, and Jack Thomas. Our conversations
opened my eyes to many ideas, and helped me clarify some existing ones.
Misiek Piskorski helped with early formulations of the dissertation’s
interdependent theoretical mechanisms, and questions from Buzz Zelditch and Karen
Cook ultimately helped synthesize these mechanisms into Chapter 3’s organizing
theoretical frame. Beyond their valuable contributions as members of my reading
committee, Dan McFarland and Andy Walder repeatedly provided important
professional counsel during the Ph.D. program.
My primary advisor, Mark Granovetter, played a singular role throughout this
process. He provided intellectual and professional guidance, and personal support on
multiple occasions. Early in my graduate career, he advised me to pursue the
questions I believed to be important, and he consistently supported me in that. Mark
gave me the luxury of intellectual freedom measured by sage advice.
x
Collaboration with industry significantly influenced this work. Will Benton
and Jeff Gosz informed the dissertation’s discussion of bilateral commodity markets.
Work with several manufacturers introduced me to complexity and sequencing
algorithms, which influenced the dissertation’s approach to network change and
communication processes.
Personally and intellectually, a lot happened while I was at Stanford. I am
fortunate for the family, friends, colleagues, and mentors with whom I shared that
time.
xi
Table of Contents
Introduction: Objectives and Implications ..................................................................... 3
Aren’t Prices the Purview of Economics? .................................................................. 4
But Why Should Sociologists Care about Prices? ...................................................... 6
Organization of the Dissertation ................................................................................. 7
Chapter 1: Appealing to Economics’ Visual Intuition ................................................... 9
Chapter 2: Leveraging the Strength of Weak Ties to Formalize Structuration ............ 17
SWT’s Layered Theory ............................................................................................ 18
Reconstructing SWT’s Triad-Based Theory of Structural Form .............................. 18
SWT’s Interactionist Theory of Triadic Closure ...................................................... 20
Generalizing SWT as a Theory of Structuration ...................................................... 27
Chapter 3: Coordination During Emergent Structuration ............................................ 31
Interaction, Communication, and Coordination ....................................................... 31
An Integrated Coordination Theory .......................................................................... 33
Formalizing Coordination Emergent in Structuration .............................................. 42
Chapter 4: Illustrating Individual Knowledge and System Coordination .................... 49
Example Coordination Cases .................................................................................... 49
Summary ................................................................................................................... 53
Chapter 5: Contextualizing the Theory in a Bilateral Steel Market ............................. 54
Steel – Bilateral Commodity Markets in Series ........................................................ 54
Bilateral Market Interaction ...................................................................................... 58
Volume, Variance, and Market Structure Example .................................................. 62
Summary ................................................................................................................... 66
Chapter 6: Parameterizing the Steel Market Case ........................................................ 67
Parameter Summary .................................................................................................. 67
Parameter Specification ............................................................................................ 69
Summary ................................................................................................................... 77
Chapter 7: Modeling Learning ..................................................................................... 79
Knowledge as Threshold Probabilities ..................................................................... 79
xii
Initial Knowledge ..................................................................................................... 80
Learning from Alters’ Actions .................................................................................. 82
Summary ................................................................................................................... 89
Chapter 8: Baseline Coordination Implications ........................................................... 91
Two Extremes ........................................................................................................... 91
Coordination Implications ........................................................................................ 93
Assessing Archetypal Knowledge ............................................................................ 99
A Micro Theory of Structure and Coordination ..................................................... 100
Chapter 9: Sometimes, Ignorance is Bliss .................................................................. 101
Assessing Archetypal Profits .................................................................................. 101
Auditing the Information Origins of Foregone Profits ........................................... 103
A Micro Theory of System-Level Behavior ........................................................... 104
Chapter 10: Satisficing and the Profit Maximization Irony ....................................... 107
Satisficing Profit ..................................................................................................... 108
Knowledge under Satisficing .................................................................................. 109
Isolating Knowledge Coordination as a Latent Mechanism ................................... 112
Chapter 11: Exploring the Middle Ground ................................................................. 113
Outcomes from Moderate Structuration ................................................................. 113
Knowledge Coordination in Moderately Social Systems ....................................... 115
Summarizing Coordination’s Role ......................................................................... 116
Reflections and Extensions ......................................................................................... 119
Appendix 1: Simulation Data Structure ..................................................................... 122
Simulation Initialization ......................................................................................... 122
Simulation Processing Loop ................................................................................... 131
Output Logging ....................................................................................................... 132
Appendix 2: Simulation Code .................................................................................... 133
Program Overview .................................................................................................. 133
Program Code ......................................................................................................... 134
References .................................................................................................................. 169
1
The main claims for a private-enterprise price system rest upon the workings of
competition....”
George Stigler (1957, 4)
“Perhaps the single best warning to the student with regard to the use of competition
is this: economic relationships are never perfectly competitive if they involve any
personal relationships between economic units.”
George Stigler (1946, 24)
“[I]ndividual behavior is always mediated by social relations. These are as much a
part of the description of reality as is individual behavior.”
Kenneth Arrow (1994, 5)
3
Introduction: Objectives and Implications
This dissertation formalizes a theory of dynamic system-level knowledge
coordination emergent in the co-evolution of social structure and individual
knowledge during dyadic interaction, and instantiates the formal theory in a computer
simulation of a bilateral commodity market. This computational model reveals
structural reproduction’s influence on dynamic, system-level price behavior via
knowledge coordination.
Conceiving of prices as socially coordinated disequilibrium information, in the
spirit of Boettke’s (1998) call for work at the intersection of economic sociology and
Austrian economics, the dissertation’s coordination theory offers a micro-to-macro
bridge between sociology and economics via information theory, and an existence
proof of a generalized, dynamic form of Granovetter’s (2005) hypothesis that network
structure can affect price behavior.
Parameterizing the computational model based on characteristics of bilateral
markets for industrial commodities, the dissertation focuses on completely asocial
products. This contextualization nearly mimics economics’ concept of perfect
competition, while retaining one critical, ubiquitous feature of actual markets –
information is imperfect, and knowledge is acquired during interaction. This research
strategy addresses introspective concerns that “economic sociologists…take the
market itself for granted” (Krippner, 2001) and “most sociological studies of markets
and prices [implicitly assume] that social relations have no effect on…commodity-like
4
products and services.” (Uzzi and Lancaster, 2004)1
Modeling a nearly perfectly competitive market focuses on the extent to which
markets, independent of the products exchanged, are irreducibly social.
Identifying prices as
consequences of social process, this dissertation reveals markets as fundamentally
social objects.
2
Social
interaction builds networks that socially contextualize information propagation,
thereby influencing system-wide coordination. This extends economic sociology from
examining the structural origins of individual outcomes to examining the
microsociological origins of system-level, market dynamics. Even for totally asocial
products, social relations influence system-level price behavior by conditioning the
evolution of the network through which imperfect information propagates. Social
relations condition the disequilibrium search/coordination path, thereby influencing
system-level and individual outcomes.
Aren’t Prices the Purview of Economics?
Economics treats prices as social facts. In the assumption of perfect
information underlying the concept of perfect competition, economic theory relies on
exogenous prices, and therefore requires a macro-level predicate.3
1 White’s (1981(a), 1981(b)) status-based theory of markets, part of Podolny’s approach (2003) is an example. In White’s theory of markets, products are uniquely identifiable by manufacturer. Defining markets based on the absence of fungibility, an attribute central to economics’ traditional concept of markets, precludes any middle ground. In White’s theory, prices and social structure are also static, exogenously given, and universally known. Baker (1984) and Carlton (1983) are interesting exceptions, in that their work demonstrates social relations’ influence in markets closer to economics’ perfect competition.
Sociology is
2 Fanselow (1992) discusses the importance of this in his critique of Geertz’s anthropology. 3 Coleman (1986) claimed that General Equilibrium Theory offered a micro-to-macro explanation for prices. For revealing discussions of the “homunculus fallacy” that perhaps escaped Coleman, see
5
uniquely equipped to relax economics’ information assumption, thereby solving this
fundamental explanatory problem.4
“The basic requirements for perfect competition … are three: (1) all economic
units…are so small as to exert no perceptible influence on prices; (2) there are no
social restrictions on the mobility of resources or on prices; and (3) all individuals
possess complete knowledge.” (Stigler, 1946, 197)
To illustrate economics’ dependence on
exogenous prices and the significance of that dependence, consider a juxtaposition of
writings by Nobel laureates George Stigler, Kenneth Arrow, and Friedrich Hayek.
5
Focusing on bilateral markets for industrial commodities roughly satisfies
conditions (1) and (2), thus highlighting Stigler’s third condition, the relative
perfection of knowledge. In contrast to Stigler’s perfect knowledge, “the unavoidable
imperfection of man’s knowledge and the consequent need for a process by which
knowledge is constantly communicated and acquired [is an essential part of the
phenomena with which we have to deal]. Any approach…which in effect starts from
the assumption that people’s knowledge corresponds to the objective facts of the
situation, systematically leaves out what is our main objective to explain.” (Hayek,
1945, 530)
And Arrow specifies exactly what Stigler and Hayek mean when referencing
knowledge. “Each individual in the economy is supposed to take prices as given and
determine his choices as to purchase and sales accordingly….” (1959, 43) Perfect, or
General Equilibrium Theory critiques by Arrow (1994), O’Driscoll and Rizzo (1996), and Schinkel (2006). 4 I use the terms “theory” and “explanation” as discussed by Homans (1967). 5 In its early iterations, Stigler made interesting changes to Price Theory’s initial sections. For example, the second quote on the dissertation’s first page does not appear after 1947.
6
complete, knowledge means that a system’s actors are provided with the set of
equilibrium prices.6
Economics’ most fundamental assumption involves the distribution of
knowledge throughout a social system – all individuals know equilibrium prices.
Because sociological theories of structural emergence and social interaction offer a
rich account of system-wide knowledge production and propagation, sociology is
uniquely equipped to relax this unrealistic system-level predicate.
In the neoclassical canon since Walras (1874), prices do not
emerge and prices are not discovered. Knowledge is exogenously coordinated such
that equilibrium prices are presumed given.
But Why Should Sociologists Care about Prices?
As integrated in Chapter 3, sociological literatures suggest a theory of
information production, propagation, and coordination, thereby bridging sociology and
economics. This sociological relaxation of economics’ most fundamental assumption
enriches our understanding of disequilibrium system dynamics, and extends economic
sociology as a foundational sociology of markets.
Beyond the implications for richer understanding of markets, prices are one
element in the large class of spontaneously socially ordered phenomena. As Coleman
(1986) recognized, prices are instances of the micro-to-macro problem. Among
microsociologically emergent macro-level phenomena, prices are relatively accessible,
6 These references’ vintage underscores the extent to which the assumption of perfect information has become embedded in economic discourse, or subtly buried within approaches such as information economics (Grossman and Stiglitz, 1976 and 1980) and market microstructure (O’Hara, 1995). For a recently updated assessment, see O’Driscoll and Rizio (1996).
7
well-documented, and transparent. Long term, successfully explaining price behavior
could constitute a template for social order research generally.
Organization of the Dissertation
Through the visual intuition of economics’ equilibrium, Chapter 1 illustrates
implications of variations in disequilibrium dynamics, motivating the dissertation’s
emphasis on knowledge coordination. Chapters 2 and 3 develop the dissertation’s
coordination theory in two sections. Chapter 2 uses Granovetter’s (1973) “Strength of
Weak Ties” to formalize a general micro theory of endogenous social structural
reproduction. Chapter 3 uses this theory of endogenous structural reproduction—
structuration (Giddens, 1979)—in a formal theory of dynamic individual information
acquisition and system-level coordination. Chapter 4 illustrates Chapter 3’ proposed
coordination formalization.
Drawing on the author’s operations research experience, Chapter 5 summarizes
one small component in one of the world’s largest commodity markets – the ferrous
metals market. Using actual steel market data, Chapter 6 parameterizes the formal
structuration and coordination theories as an empirically informed computational
model of socially contextualized market dynamics.
Of the simulation’s elements, agent learning proved the most difficult to
implement. Chapter 7 details the simulation’s implementation of dynamic learning
and illustrates its relative efficacy.
8
Chapters 8, 9, 10, and 11 present simulation results for several archetypes of
social structural reproduction. Comparing these cases reveals social structural
reproduction’s role in coordination, and coordination’s role in system-level outcomes.
9
Chapter 1: Appealing to Economics’ Visual Intuition
Neoclassical economic theory relies on perfect information to explain
equilibrium.7 But the perfect information required to explain equilibrium is, in fact,
equilibrium itself (Arrow, 1994; Schinkel, 2006). If notional equilibrium (Domberger,
1979) exists, actors must know equilibrium prices in order to execute the exact set of
actions through which those prices might arise. Equilibrium constitutes both the
explanans and explanandum in the canonical approach. Equilibrium could only
emerge through a time-consuming disequilibrium search process, and that process
remains unexplained.8
The dissertation’s introduction outlined the rationale for examining social
relations’ impact on market behavior in markets that very nearly approximate
economics’ perfect competition. This chapter appeals to economics’ visual intuition,
in the form of supply and demand curves, to illustrate the dissertation’s emphasis on
disequilibrium search. Figure 1.1 begins this exercise with a representation of
notional equilibrium.
7 Extant disequilibrium or imperfect information paradigms subtly rely on perfect information (Arrow, 1994; Boettke, 2002; Schinkel, 2006). In market microstructure theory (O’Hara, 1995), perfect information is presumed to exist somewhere. This changes the coordination problem to a diffusion problem, reducing a path dependent and computationally intractable problem to a Markov process with convenient limiting properties. In information economics (Grossman and Stiglitz, 1976 and 1980), perfect information exists with known costs and benefits. This changes the NP-Sharp coordination problem to a maximization problem with known parameters. 8 Following seminal General Equilibrium Theory work in the late 1950s (Arrow and Debreu, 1954; Arrow and Hurwicz, 1958; Arrow, et al, 1959), Scarf (1960) demonstrated that equilibrium could not emerge, even in a static system, unless equilibrium was the initial state. In a static system where initial prices are in disequilibrium, rational agents’ competitive searching will never yield equilibrium (Day, 1987). Instead, the system will oscillate from one disequilibrium state to another, forever careening between different states of inefficiency. In dynamic systems, of course, equilibrium emergence would be even harder to explain.
10
For illustrative purposes, consider market equilibrium – point ‘e’ in Figure
1.1A – for an industrial commodity such as hydrogen gas or hot-rolled steel sheet.
The area below the Demand curve, D, and above the Supply curve, S, represents total
surplus. Of the total surplus, the area above the equilibrium price corresponds to
consumer surplus while the area below the equilibrium price corresponds to producer
surplus. In a mid-level market, these areas correspond to total profit accrued by
buyers and sellers, respectively. But markets have to search for equilibrium over time,
disequilibrium will be the norm. Figure 1.2 represents a market in disequilibrium.
11
Total surplus in Figure 1.2 is strictly less than total surplus in Figure 1.1.9
To illustrate surplus’ dependence on the search path, consider the demand shift
in Figure 1.3, which initiates a new equilibrium value, e’. Through what mechanism
might the market arrive at this notional equilibrium? How could the market “find” e’
from the disequilibrium state e?
This
distance from equilibrium’s utopia is a consequence of the disequilibrium search path,
which emerges during social interaction.
In Walras’ (1874) tatonnement, an auctioneer sits outside the market and
timelessly proposes prices until supply and demand are in balance. Actors are then
informed of this market clearing equilibrium price. The introduction identified
critiques recognizing that Walras’ tatonnement cannot explain search, and really
provides no explanation for the potential emergence of equilibrium. In contrast,
Smith’s (1776) early treatment alludes to an iterative search through which actors
stumble ever closer to equilibrium. 9 Figure 1.2’s disequilibrium representation still suggests a single market price, even if the price is at disequilibrium. Outside of public exchanges, this is extremely unlikely. But the visual intuition is helpful.
12
Smith’s account requires long-term equilibrium stability and it may be overly
optimistic, but it has useful illustrative properties. If equilibrium exists and if
equilibrium’s gravity inevitably draws market behavior, the market in Figure 1.3 will
eventually transition from e to e’. Figure 1.4 explores one potential disequilibrium
dynamic during that transition.
In Figure 1.4, each dot represents a time-specific market outcome in which
search slowly leads to equilibrium. The market incrementally moves up the supply
curve, arriving at e’ after a 5-step iterative search. Figure 1.5 represents an alternative
disequilibrium search in which price first increases, then falls, then settles at e’. Both
search paths lead from e to e’, but the search paths correspond to different system-
level behavior and outcomes.
13
The search path in Figure 1.4 is relatively stable, loosely corresponding to
economics’ price stickiness, while the search path in Figure 1.5 is more volatile. The
search path in Figure 1.5 is 1 step shorter than the search path in Figure 1.4, so the
system in Figure 1.5 arrives at equilibrium more quickly.
Reflecting back to Figure 1.2, the disequilibrium processes in Figures 1.4 and
1.5 yield different cumulative consumer and producer surpluses. In Figure 1.4, slow
and sticky convergence to e’ hurts producers more than buyers. In Figure 1.5, volatile
convergence to e’ distributes disequilibrium costs somewhat more evenly.
There is no reason to expect instantaneous market adjustment to e’; search
must occur over time. During search, the disequilibrium search path influences total
profit, the distribution of profit, price volatility, and price stickiness. This is
particularly true given that additional supply and demand changes likely will occur
before the market ever settles into equilibrium at e’. For example, Figure 1.6 presents
a technological innovation’s potential effect on the hypothetical market’s supply
curve.
14
Figure 1.6 contains Figure 1.3’s demand shift, but it also contains a supply
shift from S to S’, which results in an equilibrium shift from e’ to e’’. If equilibrium
does pull the market, then this supply change alters the disequilibrium path. Figure
1.7 reflects the search paths from Figures 1.4 and 1.5.
In Figure 1.7, neither search path ever arrives at e’. Instead, a new notional
equilibrium emerges while the market remains searching. The Sticky Search path
yields greater cumulative consumer surplus, so buyers might prefer that. And the
Sticky Search path is closer to the price associated with e’’, which might be important
15
for long-term planning. But some sellers probably prefer the Volatile Search path.
And, during the brief reign of e’, the average price paid during Volatile Search was
close to the equilibrium price.
Different disequilibrium search paths will yield different system-level
performance, and aggregated performance differences may become important over
time. So a critical determinant of a system’s past, present, and future material reality
may be the way that the system dynamically navigates continual disequilibrium.
This dissertation shows that processes of social structural reproduction
condition system-wide communication, thereby influencing disequilibrium dynamics,
and influencing long-run surplus achievement. The disequilibrium path, the manner in
which a market navigates fundamental uncertainty, is not the only determinant of
system-level behavior. But even in a nearly perfectly competitive market, the
disequilibrium path does have some effect on fundamental market outcomes.
Sociology can make a profound contribution to economic understanding
because the disequilibrium path is a consequence of accumulated individual learning
that occurs during interaction. Buyers and sellers choose their alters, and market
communication occurs through those channels. Out of equilibrium, the aggregation of
market knowledge occurs through socially contextualized interactions. Social
networks that reproduce in different ways will dynamically coordinate information
differently, and this will yield different disequilibrium paths.
The remainder of this dissertation explores the possibility that social structural
reproduction can influence market behavior through this micro-to-macro coordination
mechanism. This relationship will hold so long as interaction is social, and so long as
16
social structure emerges through interaction. If those two conditions are met, then
system-level price behavior, and consequently many other important economic
phenomena, are influenced by processes of social structural reproduction.
17
Chapter 2: Leveraging the Strength of Weak Ties to Formalize
Structuration
This dissertation explores price behavior as consequence of actor-level search
during social structural reproduction, which obviously demands a theory of structural
reproduction. This chapter uses Granovetter’s (1973) Strength of Weak Ties (SWT)
as the foundation for such a theory.
SWT offered a famous proposition about information diffusion within an
evolutionarily stable social structural form. The proposed structural form emerges as a
limiting state from patterns of triadic closure, where triadic closure is a consequence
of patterns of overlapping dyadic interaction – triadic interaction. This innermost
theoretical layer, the theory supporting patterns of triadic interaction, relies on
Homans’ behavioral propositions and subtle contextual conditions. Formally
reconstructing SWT’s structural proposition, this chapter illuminates the empirically
testable assumptions determining SWT’s applicability as a structural limit theorem.
For those contexts beyond SWT’s scope, the chapter’s formalization reveals that
SWT’s explanatory mechanisms constitute the foundation for a generalizeable micro
theory of endogenous social structural reproduction. The chapter thereby advances
Granovetter’s pursuit of a general theory of structural emergence from individual
action, and identifies the specific microsociological mechanisms underlying the
dissertation’s socially contextualized coordination theory.
18
SWT’s Layered Theory
SWT contains several nested theories, ultimately culminating in the social
structural proposition that weaker ties are relatively more likely to bridge large social
distances, and therefore more likely to carry novel information.10
Taken together, SWT’s nested theories suggest a general and methodologically
individualistic theory of structural emergence – a link from “micro-level interactions
to macro-level patterns….” (1973, 1362) This chapter formally unpacks SWT’s
verbal theory, illuminating the theory’s contextual conditions and SWT’s utility as a
broadly applicable micro theory of endogenous structural reproduction.
Underlying this
structural theory of information diffusion, SWT develops a theory of structural form
based on patterns of triadic closure. SWT’s innermost theoretical layer explains
triadic closure based on triadic interaction attributable to behavioral mechanisms.
Reconstructing SWT’s Triad-Based Theory of Structural Form
SWT's critical micro-to-macro bridge links dyadic tie strength to stable
structural patterns via triadic closure probabilities. Granovetter summarizes the dyad-
structure connection as follows: “[t]he hypothesis which enables us to relate dyadic
ties to larger structures is: the stronger the tie between A and B, the larger the
proportion of individuals [with ties to either or both of them] to whom they will both
be tied, that is, connected by a strong or weak tie. This overlap in their friendship
circles is predicted to be least when their tie is absent, most when it is strong, and
intermediate when it is weak.” (1973, 1362) 10 Referencing information theory, the probability that weak ties convey high entropy information is greater than the probability that strong ties carry high entropy information.
19
Using Granovetter’s notation, consider the set, S, of all alters to whom either A
or B is tied. Also consider the subset of S, T, of all alters to whom both A and B are
tied. According to Granovetter’s dyad-structure proposition, the stronger the AB tie,
the larger the ratio of T’s cardinality to S’s, or the larger the ratio of completed triads
to potential triads. Cavalierly treating the ratio of cardinalities as a continuous
function, Equation 2.1 formalizes SWT’s structural proposition as the partial
derivative of the ratio of cardinalities relative to the strength of the AB tie, tsAB.11
𝜕𝜕 �|𝑇||𝑆|�
𝜕𝜕𝑖𝑖𝑡𝑡𝐴𝐵
> 0 (2.1)
If the population of potential mutual alters, S, is constant, Equation 2.1 reduces
to a statement about changes in the cardinality of T relative to changes tsAB.
Expressing the cardinality of T as an expectation allows further simplification. As
specified in Equation 2.2, the expectation of T’s cardinality equals the sum of the
probabilities that each of S’s N potential alters is tied to both A and B.
𝐸(|𝑇|) = �𝑃𝑃(𝑖𝑖𝑡𝑡𝐴𝑋 > 0, 𝑖𝑖𝑡𝑡𝐵𝑋 > 0 )𝑁
𝑋=1
(2.2)
Equation 2.2, the expectation of the cardinality of T, will grow if either actor A
or actor B becomes more likely to maintain a tie with any other member of S.
Suppose that actors A and C have an existing tie, but that actor B is not yet connected
to C. C is thus a member of the set S, but not a member of the set T. If a tie from B to
actor C becomes more likely as the AB tie gets stronger, the expectation in Equation
2.2 will grow, and Equation 2.1 will be true. This is SWT’s theoretical bridge
11 Consistent with Granovetter’s approach, I presently presume that all ties are symmetric: tsAB = tsBA.
20
between patterns of triadic closure and structural form. Equation 2.3 formalizes the
triadic closure argument.
𝜕𝜕𝑃𝑃(𝑖𝑖𝑡𝑡𝐵𝐶 > 0|𝑖𝑖𝑡𝑡𝐴𝐶 > 0)𝜕𝜕𝑖𝑖𝑡𝑡𝐴𝐵
> 0
𝜕𝜕 �𝑃𝑃(𝑖𝑖𝑡𝑡𝐵𝐶 > 0) ∗ 𝑃𝑃(𝑖𝑖𝑡𝑡𝐴𝐶 > 0|𝑖𝑖𝑡𝑡𝐵𝐶 > 0)𝑃𝑃(𝑖𝑖𝑡𝑡𝐴𝐶 > 0) �
𝜕𝜕𝑖𝑖𝑡𝑡𝐴𝐵 > 0
𝜕𝜕 �𝑃𝑃(𝑖𝑖𝑡𝑡𝐵𝐶 > 0) ∗ 11 �
𝜕𝜕𝑖𝑖𝑡𝑡𝐴𝐵 > 0
𝜕𝜕𝑃𝑃(𝑖𝑖𝑡𝑡𝐵𝐶 > 0)𝜕𝜕𝑖𝑖𝑡𝑡𝐴𝐵
> 0 (2.3)
Equation 2.3 says that, given the AC tie, triadic closure grows increasingly
likely as the AB tie gets stronger. SWT’s structural proposition, captured in Equation
2.1, will hold when Equation 2.3 is true.
SWT’s Interactionist Theory of Triadic Closure
To develop a generalalizeable microsociological theory of structural
emergence, this chapter expands on Granovetter’s interactionist explanation for the
triadic closure proposed in Equation 2.3. “The proposed relationship [triadic closure
from stronger ties] results, first, from the tendency (by definition) of stronger ties to
involve larger time commitments. If A-B and A-C ties exist, then the amount of time
C spends with B depends (in part) on the amount of time A spends with B and C,
respectively." “If C and B have no relationship, common strong ties to A will
probably bring them into interaction and generate one.” (1973, 1362)
21
Probabilistic Theory of Triadic Closure
Formalizing Granovetter’s verbal theory of triadic closure requires integrating
several microsociological propositions with a general representation of interaction
likelihoods. Equation 2.4 specifies the total probability for BC interaction, P(cBC•), as
the sum of the probabilities that B and C interact either independently, cBC, or together
with A, cABC.
𝑃𝑃(𝑐𝑐𝐵𝐶∙) = 𝑃𝑃(𝑐𝑐𝐵𝐶) + 𝑃𝑃(𝑐𝑐𝐴𝐵𝐶)
= 𝑃𝑃(𝑐𝑐𝐵𝐶) + 𝑃𝑃(𝑐𝑐𝐴𝐵∙) ∗ 𝑃𝑃(𝑐𝑐𝐴𝐶∙|𝑐𝑐𝐴𝐵∙) (2.4)
Consistent with the verbal theory’s focus on interdependent changes in dyadic
interaction probabilities, Equation 2.5 differentiates Equation 2.4 with respect to the
probability of any AB interaction, P(cAB•).
𝜕𝜕𝑃𝑃(𝑐𝑐𝐵𝐶∙)𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)
=𝜕𝜕𝑃𝑃(𝑐𝑐𝐵𝐶)𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)
+ 𝑃𝑃(𝑐𝑐𝐴𝐶∙|𝑐𝑐𝐴𝐵∙) ∗𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)
+ 𝑃𝑃(𝑐𝑐𝐴𝐵∙) ∗𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐶∙|𝑐𝑐𝐴𝐵∙)𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)
=𝜕𝜕𝑃𝑃(𝑐𝑐𝐵𝐶)𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)
+ 𝑃𝑃(𝑐𝑐𝐴𝐶∙|𝑐𝑐𝐴𝐵∙) + 𝑃𝑃(𝑐𝑐𝐴𝐵∙) ∗𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐶∙|𝑐𝑐𝐴𝐵∙)𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)
(2.5)
Further formalization reveals that Equation 2.5’s terms are subtly significant in
SWT’s theoretical apparatus. In particular, the conditional probability of A interacting
with C given A’s interaction with B is tied to social context.
SWT’s verbal theory does not pursue Equation 2.4’s first term and instead
focuses exclusively on the joint probability of AB and AC interaction, “the amount of
time A spends with B and C,” or the probability of triadic interaction. Focusing on
triadic interaction simplifies Equation 2.5, as in Equation 2.6:
22
𝜕𝜕𝑃𝑃(𝑐𝑐𝐵𝐶∙)𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)
~𝑃𝑃(𝑐𝑐𝐴𝐶∙|𝑐𝑐𝐴𝐵∙) + 𝑃𝑃(𝑐𝑐𝐴𝐵∙) ∗𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐶∙|𝑐𝑐𝐴𝐵∙)𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)
(2.6)
Triadic Closure from Homans’ Behavioral Postulates
Equation 2.6 approximates changes in BC interaction probability attributable
to changes in AB interaction probability, and Granovetter’s verbal theory details how
to formally incorporate this into SWT’s structural proposition. "Implicit [in SWT’s
theory of triadic closure] is Homans’s idea that 'the more frequently persons interact
with one another, the stronger their sentiments of friendship for one another are apt to
be' (1950, p. 133)." (1973, 1362)12
𝜕𝜕𝑖𝑖𝑡𝑡𝐵𝐶𝜕𝜕𝑃𝑃(𝑐𝑐𝐵𝐶∙)
Equation 2.7 formalizes this microsociological
mechanism.
> 0 (2.7)
Complementing Equation 2.7’s mechanism linking tie strength to interaction,
“persons who feel sentiments of liking for one another will express those sentiments in
activities….” (Homans, 1951, 134) Inversely, “the less the liking the less the
interaction.” (Homans, 1961, 182) These statements support a second
microsociological mechanism, formalized in Equation 2.8.
𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)𝜕𝜕𝑖𝑖𝑡𝑡𝐴𝐵
> 0 (2.8)
These mechanisms’ role in Granovetter’s theory grows clearer after
differentiating BC tie strength relative to AB tie strength, as in Equation 2.9.
𝜕𝜕𝑖𝑖𝑡𝑡𝐵𝐶𝜕𝜕𝑖𝑖𝑡𝑡𝐴𝐵
=𝜕𝜕𝑖𝑖𝑡𝑡𝐵𝐶𝜕𝜕𝑃𝑃(𝑐𝑐𝐵𝐶∙)
∗𝜕𝜕𝑃𝑃(𝑐𝑐𝐵𝐶∙)𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)
∗𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)𝜕𝜕𝑖𝑖𝑡𝑡𝐴𝐵
(2.9)
12 I follow Granovetter’s adaptation of Homans, and use interaction probabilities rather than interaction volume, which is justified because we are treating interaction as a stochastic process.
23
Equations 2.7, 2.6, and 2.8, respectively, correspond to Equation 2.9’s terms.
Because Equation 2.9’s sign would support or contradict Equation 2.3, the
mechanisms summarized in Equations 2.6, 2.7, and 2.8 govern SWT’s application.
Incorporating Equations 2.7 and 2.8 into Equation 2.9, as in Equation 2.10, reveals
that SWT’s structural proposition depends completely on changes in the probability of
BC interaction relative to the probability of AB interaction, which was formalized in
Equation 2.6.
𝜕𝜕𝑖𝑖𝑡𝑡𝐵𝐶𝜕𝜕𝑖𝑖𝑡𝑡𝐴𝐵
= (> 0) ∗𝜕𝜕𝑃𝑃(𝑐𝑐𝐵𝐶∙)𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)
∗ (> 0) (2.10)
Context’s Subtle Significance
If Equation 2.6 is greater than zero – if BC interaction grows in AB interaction
– Equation 2.10 supports SWT’s structural proposition. But if Equation 2.6 is zero or
negative, Equation 2.10 will contradict SWT’s structural proposition as summarized in
Equations 2.1-2.3. Equation 2.6’s sign depends on the conditional probability of AC
interaction, which can vary significantly by social context.
Explicitly suggesting formalization, Granovetter’s thorough verbal theory
highlights a particular case. "If the events 'A is with B' and 'A is with C' were
independent, then the event 'C is with A and B' would have probability equal to the
product of their probabilities. For example, if A and B are together 60% of the time,
and A and C 40%, then C, A, and B would be together 24% of the time." (1973, 1362)
Following this logic, suppose that the events AB and AC are independent.
Then Equation 2.6 simplifies as in Equation 2.11.
24
𝜕𝜕𝑃𝑃(𝑐𝑐𝐵𝐶∙)𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)
~𝑃𝑃(𝑐𝑐𝐴𝐶∙|𝑐𝑐𝐴𝐵∙) + 𝑃𝑃(𝑐𝑐𝐴𝐵∙) ∗𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐶∙|𝑐𝑐𝐴𝐵∙)𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)
~𝑃𝑃(𝑐𝑐𝐴𝐶∙) + 𝑃𝑃(𝑐𝑐𝐴𝐵∙) ∗𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐶∙)𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)
~𝑃𝑃(𝑐𝑐𝐴𝐶∙) + 𝑃𝑃(𝑐𝑐𝐴𝐵∙) ∗ 0
~𝑃𝑃(𝑐𝑐𝐴𝐶∙)
> 0 (2.11)
If AB and AC interactions are independent, as in Equation 2.11, then Equation
2.6 is greater than zero, which means that Equation 2.10 is greater than zero, which
satisfies Equation 2.3, thereby supporting SWT’s structural proposition as expressed
in Equation 2.1. But what about contexts in which Equation 2.6’s conditional
probabilities cannot be reasonably approximated as if the interactions were
independent?
Extending SWT to additional contexts requires evaluating two important
classes of cases. In one class, P(cAC•) is substantially less than the conditional
probability of AC interaction, P(cAC•|cAB•). In such cases, SWT may understate triadic
closure probabilities. In the other class, P(cAC•) is substantially greater than the
conditional probability of AC interaction, P(cAC•|cAB•), and SWT may overstate triadic
closure probabilities.
Independence may understate the conditional probability of AC interaction,
P(cAC•|cAB•), thereby understating the probability of triadic closure, and consequently
understating SWT’s structural argument. Imagine, for example, a working, single
parent with two young children. If the parent spends 20% of his time with child 1 and
25
20% with child 2, he likely spends more than 4% of his time with both children
simultaneously.
Social contexts such as work teams, classrooms, and families frequently
involve group interaction. In these settings, triadic interaction is even more likely than
when interactions are independent, meaning that Equation 2.11 would understate
Equation 2.9’s middle term. Equation 2.9 might then understate the propensity for
triadic closure, understating the likelihood of dense subgroups, and understating weak
ties’ significance.13
In contrast to interactions institutionalized as group activities, some contexts
discourage or totally preclude overlapping dyadic interaction – triadic interaction.
Based on the privacy and security rules in the Health Insurance Portability and
Accountability Act (HIPAA), for example, a surgeon would rarely bring two of her
patients into contact. Under the duty of confidentiality, ethics rules can similarly
require attorneys to consciously avoid triadic closure with their clients.
Bilateral markets constitute a ubiquitous example of social contexts in which
dyadic interactions are not independent. Consider markets related to the production
and distribution of steel. Recyclers buy scrap from junk yards, which they then sell to
individual steel mills. These mills produce sheet, bar, wire, and beam products, which
they sell to metals processors. Processors cut bulk, hold inventory, and customize
13 An important caveat required Homans to publish a second book (1961) to clarify his behavioral postulates (1951). Equation 2.7 holds when interaction is freely entered into and yields positive outcomes. In the examples discussed, interactions are not independent because interactions are not freely chosen. This may change the magnitude or even sign of Equation 2.7. While the likelihood of triadic interaction may grow from institutionalized interaction, this interaction may create animosity between the actors. Independence may understate Equation 2.9’s middle term, but the absence of independence may cause Equation 2.9’s first term to become negative, in which case SWT’s structural predictions may not hold.
26
these commodity products for sale to other manufacturers. With extremely rare
exception, every interaction involves exactly one seller and exactly one buyer; the
probability of triadic interaction is essentially zero. Equation 2.12 integrates the social
context condition into Equation 2.6, revealing that the formal frame is robust across a
range of interaction contexts.
𝜕𝜕𝑃𝑃(𝑐𝑐𝐵𝐶∙)𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)
~𝑃𝑃(𝑐𝑐𝐴𝐶∙|𝑐𝑐𝐴𝐵∙) + 𝑃𝑃(𝑐𝑐𝐴𝐵∙) ∗𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐶∙|𝑐𝑐𝐴𝐵∙)𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)
~0 + 𝑃𝑃(𝑐𝑐𝐴𝐵∙) ∗𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐶∙|𝑐𝑐𝐴𝐵∙)𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)
~0 + 𝑃𝑃(𝑐𝑐𝐴𝐵∙) ∗ 0
~0 (2.12)
Equation 2.12 starkly contrasts with Equation 2.11. In contexts such as
bilateral markets, because the probability of triadic interaction is constant at zero,
changes in the probability of the event AB have no effect on the probability of triadic
interaction. Equation 9 is always equal to zero, and SWT’s predicted structural form
will never emerge from triadic interaction.14
Bipartite graphs obviously are exceptions to a theory in which triadic
interaction is the latent explanatory mechanism. But bilateral markets are interesting
because they simultaneously illuminate the contextual dependencies of SWT’s theory
of structural form and reveal the generalizeability in SWT’s mechanisms of structural
reproduction. While the social structural limiting state highlighted by Granovetter
14 Triadic closure may occur, weak ties may still bridge social space, and weak ties may remain more likely to carry high entropy information. But for cases characterized by exclusively bilateral interaction, these results cannot arise from the triadic closure that serves as SWT’s principal explanatory mechanism.
27
may not occur in a bilateral market, the mechanisms underlying Granovetter’s
argument still constitute an applicable theory of structural emergence.
Generalizing SWT as a Theory of Structuration
My intentions here echo the sentiments with which Granovetter (1973) began
and ended his pioneering article. “A fundamental weakness of current sociological
theory is that it does not relate micro-level interactions to macro-level patterns in any
convincing way.” (1360) “My contribution here is mainly…exploratory and
programmatic; its primary purpose being to generate interest in the proposed program
of theory and research.” (1378)
Formalizing SWT revealed contexts in which SWT’s structural proposition
holds, and contexts in which triadic closure cannot generate the proposed structural
form. In the first class of cases, SWT offers extremely efficient insight about
evolutionarily stable social structure. If interactions are approximately independent,
the set S is static, and Equation 2.6 is a close approximation for Equation 2.5, SWT
identifies social structure’s limiting state – a social structural equilibrium in which
weak ties are relatively more likely to locally bridge social space.
When triadic closure cannot guarantee SWT’s proposed structural form, social
structural limiting states may not exist or may exhibit significant variability,
precluding a general micro theory of social structural form. However, through
Equations 2.5, 2.7, 2.8, and 2.9, SWT introduced the components of a general micro
theory of endogenous structural reproduction. For any social setting, dynamic social
structural change can be modeled as a combination of microsociological mechanisms
28
and social context. 15 Formally, Equation 2.9 can always be modeled as a combination
of Equation 2.5’s terms, Equation 2.7, and Equation 2.8. The following five terms
parameterize a general microsociological model of endogenous structural change:16
A)
𝜕𝜕𝑖𝑖𝑡𝑡𝐵𝐶𝜕𝜕𝑃𝑃(𝑐𝑐𝐵𝐶∙)
B) 𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)𝜕𝜕𝑖𝑖𝑡𝑡𝐴𝐵
C) 𝜕𝜕𝑃𝑃(𝑐𝑐𝐵𝐶)𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)
D) 𝑃𝑃(𝑐𝑐𝐴𝐶∙|𝑐𝑐𝐴𝐵∙)
E) 𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐶∙|𝑐𝑐𝐴𝐵∙)𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)
The formalization exercise accomplishes several important objectives. In the
five parameters listed above, this chapter identifies empirically testable assumptions
embedded in SWT’s theory of structural form. In cases that violate the scope
conditions required for SWT’s proposed structural form, formalization illustrates how
SWT’s mechanisms can be used as an empirically parameterized model of endogenous
structural emergence. Parameters (A) and (B) clearly reveal that social structural
reproduction is not a Markov process; at any time t, the probability of A and B
interacting will depend on past AB interaction.
15 Social context, which might initially seem like a system-level predicate precluding the promise of a micro theory, is often overwhelmingly determined by physical, temporal, technological, and financial constraints. Consequently, the general theory’s reliance on specification of context does not violate a fundamentally micro theory (Kontopolous, 1993). 16 If a system has a limiting state, these five parameters plus S0, initial social structure, also specify a theory of structural form. If a system does not exhibit sensitive dependence on initial conditions (SDIC), then S0 will be unnecessary.
29
This theoretical system accommodates structural duality, thereby integrating
Granovetter’s mechanisms with Giddens’ (1979) structuration. This theory of
structural emergence retains the embeddedness program's (Granovetter, 1985)
emphasis on structural conditioning of action, eliminates the unidirectional structural
determinism for which some scholars critique sociological network research
(Emirbayer and Goodwin, 1994; Boettke, 1998), parallels social psychology’s
commitment literature (Lawler and Yoon, 1993; Kollock, 1994), and approaches
social processes as dynamic rather than static phenomena (Emirbayer, 1997).
31
Chapter 3: Coordination During Emergent Structuration
Through comparative assessment of diverse social theory, this chapter
identifies a theoretical frame in which knowledge coordination constitutes a micro-to-
macro bridge capable of explaining dynamic system-level behavior. Formalizing
coordination using information theory yields a methodologically individualistic theory
of dynamic coordination emergent in microsociological processes of structural
reproduction. Applying coordination theory to markets offers a theory of
disequilibrium price dynamics, which simultaneously locates economic sociology vis-
à-vis economics and extends economic sociology from structural explanations of
individual outcomes to microsociological explanations of market dynamics.
Interaction, Communication, and Coordination
Markets are self-organizing, socially embedded communication systems in
which prices convey information. Because actors learn from the alters with whom
they interact, knowledge, prices, and social structure co-evolve during irreducibly
social communication.17 This communication system resembles a very complex
telephone game, where social structure evolves in and influences the paths through
which knowledge propagates.18
17 I am referring to the large class of markets in which buyers and sellers know one another, rather than less prevalent anonymous markets such as stock exchanges.
Variation in processes of social structural
18 I use “propagate” rather than “diffuse” to emphasize that knowledge is dynamic during transmission. Consequently, the transmission path is critically important. A signal that follows the path A-B-C-D can appear differently at D than the same signal that follows the path A-C-B-D. This path dependence makes communication and coordination NP Sharp. Unrecognized computational complexity, I expect, lies at the heart of social science’s ongoing micro-to-macro struggle.
32
reproduction can influence this metaphorical telephone game, and therefore influence
dynamic, system-wide knowledge distribution. This socially contextualized
knowledge coordination is a principal source of disequilibrium price dynamics.
Echoing Austrian economics (Hayek, 1945; Boettke, 1998) and new
institutional economics (Langlois, 1986), recent work (Beckert, 2003; Schinkel, et al,
2002; Schinkel, 2006) recognizes the enduring need for coordination theory in
explanations of system-level economic behavior. At the Austrian intersection of
economics and sociology (Lachmann, 1971), this chapter formalizes a theory in which
system-level knowledge coordination is a latent mechanism explained by processes of
social structural reproduction and explaining disequilibrium price dynamics. For
economic sociology, this extends the field to the study of system-level market
dynamics. For economics, the dissertation’s coordination theory relaxes traditional
information assumptions, which allows a disequilibrium price theory. For Austrian
economics, the chapter formally instantiates an empirically parameterizeable,
methodologically individualistic coordination theory.
This chapter develops the dissertation’s coordination theory in two sections.
The first section surveys coordination’s role in diverse social theory, revealing the
elusiveness of methodologically individualistic explanation (Homans, 1967; Coleman,
1986; Kontopolous, 1993) and identifying knowledge coordination’s potential utility
as a micro-to-macro bridge. The second section proposes an information theoretic
measure of system-level knowledge coordination, and unpacks this formal
operationalization into underlying microsociological mechanisms.
33
An Integrated Coordination Theory
In social theory, coordination is an enduring and central issue. Hobbes (1651)
suggested a form of political organization that eliminates the coordination problem by
subordinating all actors’ preferences and choices to those of an absolute sovereign.
Relying on the invisible hand as a coordination mechanism, the Scottish
Enlightenment (Ferguson, 1767; Smith, 1776) rejected Hobbes’ totalitarianism as
inefficient relative to inexplicable spontaneous coordination. Descended from Smith’s
invisible hand but dependent on Walras’ (1874) auctioneer, contemporary
microeconomics assumes exogenous coordination (Hayek, 1945; Arrow, 1994;
Schinkel, 2006). Critiques of neoclassical economics such as embeddedness
(Granovetter, 1985; Uzzi, 1996; Uzzi, 1997) and behavioral theories (Simon, 1955;
Simon, 1959; Khaneman and Tversky, 1979; Cyert and March, 1992) offer fruitful
models of action, but the absence of a coordination theory precludes alternative
understandings of system-level phenomena (Langlois, 1986; Beckert, 2006). Theory
emphasizing coordination (Hayek, 1945; Hayek, 1973; Esteban, 1992; Beckert, 2003;
Schinkel, 2006) remains abstract, and lacks an operationalizeable measure of
coordination.
This chapter unifies microsociological mechanisms from existing social theory
with an information theoretic measure of coordination, yielding a methodologically
individualistic theory of system-level knowledge coordination emergent in processes
of structural reproduction. This coordination theory can bridge the micro-to-macro
divide, and thereby yield a theory of dynamic system-level behavior.
The Scottish Enlightenment and Smith’s Invisible Hand
34
Rejecting Hobbes (1651), the Scottish Enlightenment (Ferguson, 1767; Smith,
1776) pursued Mandeville’s (1714) interest in spontaneous coordination (Hayek,
1973). Expanding on Ferguson, Smith proposed pursuit of self-interest as a
mechanism connecting individual preferences and knowledge to individual action,
while the invisible hand magically guided an adjustment process through which
individuals coordinated their actions.19
Figure 3.1 reflects Smith’s theory in a simple
two-actor system.
19 Relying on rational pursuit of self-interest was important in the logic through which the Scots’ rejected Hobbes. Starting from the same micro predicate, Hobbes concluded that individual pursuit of self-interest would result in the famous “war of all against all.” The Scottish and Hobbesian positions, though ultimately advocating radically different social organization, are reconcilable. Hobbes sought a form of social organization that would preclude war, minimizing misery. In contrast, the Scots sought social organization that would maximize welfare. The distinction between maximizing welfare and minimizing suffering probably persists in our social science.
Figure 3.1: Smith’s Invisible Hand
a1t
u1t u2t
k1t
At
a2t
k2t
35
In Figure 3.1, actor i’s time t action – ait – represents strategic pursuit of self-
interest. Individual preferences – uit – can vary, and individuals pursue these based on
their unique knowledge – kit.20
Through the invisible hand, the Scottish Enlightenment illuminated the central
source of complexity in system-level analysis and may have demonstrated Leviathan’s
(Hobbes, 1651) shortcomings, but core questions remained. In particular, the invisible
hand was a theoretical placeholder for micro-to-macro explanation.
The invisible hand reflects an adjustment process by
which At, system-level behavior, inexplicably emerges from individuals’ subjective
pursuit of their self-interests.
What mechanisms constitute the invisible hand? Through what process could
individuals coordinate their actions, and what system-level behavior might result?
Addressing the last question, Walras (1874) proposed a theory of general equilibrium
that became canonical neoclassical economic theory (Friedman, 1949; Arrow, 1994;
Schinkel, 2006).
Economics’ Coordination Debt to the Walrasian Auctioneer21
Walras’ tatonnement described hypothetical emergence of coordination’s end
state, general competitive equilibrium. In practice, Walras’ general equilibrium
requires that actors know equilibrium prices in order to execute the actions by which
those same equilibrium prices might arise; the theory’s explanandum is also its
20 The dissertation uses lower case notation to reference individual or dyadic theoretical elements, and upper case notation to reference system-level elements. This allows easy identification of theoretical levels, and illustrates the progressive unpacking of system-level concepts into micro-level mechanisms. 21 Schinkel (2006) used this phrase to describe economic theory’s absence of an explanation for coordination.
36
explanans. “By relying on an auctioneer, … neoclassical economics [postulates] what
it endeavors to explain.” (Schinkel, 2006, 191)
Contemporary neoclassical economic theory remains predicated on
inexplicable knowledge coordination manifest in equilibrium prices. Even
disequilibrium theory “presupposes a level of coordination, whereas economics’
original research question is whether and how order arises in an unorchestrated society
of people making their own individual plans.” (Schinkel, 2006, 189)22
Behavioral Learning
The theory
only works if the micro-to-macro problem is solved by the exogenous provision of
equilibrium prices, and “[this] failure to give an individualistic explanation for price
formation has proved to be surprisingly hard to cure….” (Arrow, 1994, 4)
Simon called perfect competition, the evolutionarily stable state that could
yield equilibrium prices as perfect information, the “permanent and ineradicable
scandal of economic theory.” (1976b, 140) Actors actually operate under fundamental
uncertainty, only slowly discovering the true state of the world by observing the
results of their own actions. Figure 3.2 incorporates experiential learning into Figure
3.1’s summary of Smith’s theory.
22 Information economics and market microstructure are sometimes heralded as viable disequilibrium theories. See Boettke (1998) for a critique of those theories’ reliance on exogenous coordination.
37
In Figure 3.2, actors incrementally learn from environmental responses to their
actions’ outcomes. But what are the system-level implications of individually
bounded knowledge and experiential learning? Behavioral theory offers a better
action model, but it does not offer an alterative to the invisible hand.23
Embeddedness
Embeddedness emphasizes structural determinants of individual actions and
outcomes (Granovetter and Swedberg, 2001). Because structure influences the alters
with whom actors will most probably interact, embeddedness yields theories of
socially conditioned individual knowledge. Figure 3.3 presents embeddedness’ central
knowledge implication. 23 This is consistent with Langlois’ (1986, 236) observation that Simon saw the explanandum of economic theory as individual, rather than system-level, behavior.
Figure 3.2: Behavioral Learning
a1t
u1t u2t
k1t
At
a2t
k2t
38
In Figure 3.3, action undertaken jointly by actors 1 and 2 constitutes
interaction, c12t. Social structure, St, influences interaction because it conditions
actors’ selection of alters.24
For example, suppose that steel mill i wishes to purchase a piece of industrial
equipment, and must choose between soliciting a price quote from equipment
manufacturer j or h. Unbeknownst to mill i, j will quote $100,000 and h will quote
$110,000. Mill i has a stronger relationship to manufacturer j, tsi→jt, and chooses to
solicit a quote from j. Observing manufacturer j’s $100,000 quote rather than
Social structure indirectly affects knowledge through its
influence on interaction likelihoods and, thereby, the communication path.
24 In the simple illustration of Figure 3.3, only one interaction is possible. In larger systems, there are obviously more interaction possibilities.
Figure 3.3: Embeddedness
a1t
u1t u2t
St
c12t
k1t
At
a2t
k2t
39
manufacturer h’s $110,000 quote influences i’s post-interaction knowledge of
equipment prices. Structure thus influences individual actors’ imperfect knowledge.
The embeddedness frame is a highly successful lens through which to advance
research of the causes and consequences of individual actions and outcomes, but it has
not yielded a theory of system-level behavior (Beckert, 1996; Krippner, 2001; Uzzi
and Lancaster, 2004). As with Figures 3.1 and 3.2, Figure 3.3 does not offer a causal
mechanism linking the individual-level to the system-level. If we wish to discuss
system-level behavior, we still require an exogenous micro-to-macro explanation
analogous to Smith’s invisible hand. Furthermore, embeddedness introduces social
structure as an additional system-level predicate (Emirbayer and Goodwin, 1994;
Boettke, 1998). Using embeddedness in a micro theory of coordination requires a
micro theory of structural reproduction such as that formalized in Chapter 2.
Stucturation: Escaping Structural Determinism
Grounded in Homans’ (1961) theories of interaction and liking, social
psychology’s commitment literature (Lawler and Yoon, 1993; Kollock, 1994) is
consistent with Chapter 2’s endogenous theory of structural reproduction. Adapting
Granovetter’s (1973) probabilistic interpretation of Homans’ (1961) theories
operationalizes Giddens’ (1979) structuration, and thereby yields a theory of
endogenous structural reproduction. In Figure 3.4, the causal mechanism from
interaction, c12t, back to social structure, St, integrates structuration into the
dissertation’s theoretical frame via commitment. Exploring the probability of
interaction, P(cijt), incorporates Chapter 2’s emphasis on social context.
40
Figure 3.4 interweaves classical economics, behavioral theory, and
structuration as a purely micro implementation of the embeddedness paradigm.
Given parameterizations for individual preferences and strategy, Figure 3.4’s theory
can explain social structural reproduction, individual knowledge, individual action,
and patterns of interaction. But Figure 3.4 still lacks any link between individual and
system levels; exploring system-level behavior still relies on an exogenous micro-to-
macro coordination mechanism. Austrian economics’ focus on markets as forums in
which individuals coordinate their imperfect knowledge suggests a path forward.
Austrian Coordination
In the Austrian perspective, system-level behavior emerges depending on the
manner in which actors’ imperfect knowledge is dynamically organized vis-à-vis one
Figure 3.4: Structuration
a1t
u1t u2t
St
c12t
k1t
At
a2t
k2t
41
another (Hayek, 1945). Because market actions require partners, the Austrian
treatment of knowledge is necessarily social (Hayek, 1946). As illustrated in Figure
3.5, the Austrian concept of knowledge coordination, Kt, under uncertainty is a micro-
to-macro bridge complementing sociological theory (Lachmann,1951; Boettke, 1998;
Boettke and Storr, 2002).
Classical and Austrian economists conceived of coordination as a knowledge,
rather than action, problem (O’Driscoll and Rizzo, 1996). But testable theory requires
specifying Kt as a measure of similarity across the kits, and we lack an
operationalizeable theoretical bridge between individual knowledge and system-level
Figure 3.5: Austrian Coordination
a1t a2t
u1t u2t
St
c12t
k1t k2t
At
Kt
42
knowledge coordination. A recent advance in information theory suggests such a
bridge.
Formalizing Coordination Emergent in Structuration
The next section of this paper formalizes knowledge coordination in Figure
3.5’s theoretical frame, and incrementally unpacks the formal representation according
to the theories already outlined. This yields a theory of system-level coordination
emergent in microsociological processes of structural reproduction, later summarized
in Figure 3.6.
Jensen-Shannon Divergence and System-Level Knowledge Coordination
Given probabilistic representation of actors’ knowledge, the generalized
Jensen-Shannon Divergence (JSD) (Lin, 1991) can measure the dissimilarity between
a system’s actors’ knowledge, and Shannon entropy can measure the dispersion of
system-level knowledge. Represent actor i’s time t knowledge, kit, as a distribution of
probabilities subjectively assigned to discrete states of the world. In a system with n
actors, the JSD of k measures system-level dissimilarity in actors’ knowledge.
Equation 3.1 specifies the JSD of knowledge.
𝐽𝑆𝐷(𝑘𝑘1𝑡,𝑘𝑘2𝑡 , … ,𝑘𝑘𝑛𝑡) = 𝐻 ��𝜋𝑖𝑡
𝑛
𝑖=1
𝑘𝑘𝑖𝑡� −�𝜋𝑖𝑡
𝑛
𝑖=1
𝐻(𝑘𝑘𝑖𝑡) (3.1)
πit is a weight associated with actor i’s knowledge, kit, and the sum of the πit
values equals 1. The sum in the first term of Equation 3.1 is thus a weighted average
of knowledge in the system at time t, a formal operationalization of system-level
knowledge.
43
H(x) is the Shannon entropy of probability distribution x. When x is a discrete
distribution with m possible values, H(x) is:
𝐻(𝑥) = −�𝑥𝑗
𝑚
𝑗=1
𝑙𝑛𝑛�𝑥𝑗� (3.2)
The Shannon entropy of a system’s time t weighted knowledge, Equation 3.1’s
first term, operationalizes system-level knowledge dispersion.
JSD and Shannon entropy together measure knowledge coordination, Kt, from
individual actors’ knowledge, kit, thereby operationalizing a micro-to-macro
coordination bridge. To operationalize the irreducibly social nature of the
dissertation’s coordination theory, this chapter incrementally unpacks coordination
starting with individual knowledge.
Individual Knowledge and Learning
Individual knowledge is a time-varying, subjective function of prior
knowledge and newly observed data, as in Equation 3.3:
𝑘𝑘𝑖𝑡 = 𝑙𝑖𝑡(𝑘𝑘𝑖𝑡−1,𝑑𝑑𝑖𝑡) (3.3)
Equation 3.3 specifies individual knowledge as a time-varying function of
observation and subjective learning. Script-l represents actor i’s subjective learning
function at time t, or the translation through which she incorporates new observations
into her existing knowledge. dit is the time t probability distribution of i’s next
observed datum.25
Of the elements in Equation 3.3, critiques of the rational actor model often
focus on cognitive limitations influencing learning, script-lit. In contrast to this
25 At present, I assume observation is objective, though the dissertation’s coordination can accommodate subjective interpretation of observations.
44
atomistic approach, this dissertation explores the fundamentally social nature of
observed data – dit.
Observation and the Socially Conditioned Propagation of Knowledge
Data are observed during interaction, cijt. At any time t, the expectation of
actor i’s next observed price datum is the sum of each potential alter’s action, ajt,
weighted by the corresponding dyadic interaction likelihood, P(cijt), conditioned on i
interacting with someone, P(ci·t). If action and interaction are independent, Equation
3.4 is the time t distribution of actor i’s next price observation:26
𝑑𝑑𝑖𝑡
= �𝑎𝑎𝑗𝑡 ∗ 𝑃𝑃�𝑐𝑐𝑖𝑗𝑡|𝑐𝑐𝑖∙𝑡�𝑛−1
𝑗=1
(3.4)
Specifying the expectation of actors’ observations as a function of dyadic
interaction probabilities, as in Equation 3.4, hints at this coordination theory’s
underlying social dimension. Actors disproportionately solicit and receive data from
alters to whom they are closely tied. But the subtly of socially contextualized data is
much deeper than might be obvious merely from the first order interaction
probabilities.
Suppose that actors are boundedly rational, and seek to maximize their
preferences given their subjective knowledge. Then Equation 3.5 formalizes actor i’s
rational strategic action:
𝑎𝑎𝑖𝑡 = argmax(𝑢𝑢𝑖𝑡|𝑘𝑘𝑖𝑡) (3.5)
26 The case where these are not independent, where action is alter-dependent, is quite interesting. I exclude it here as a first approach to the problem, but the model could easily incorporate this merely by saying something about the derivative of ui relative to tie strength, tsi→jt. Because interdependence presumably strengthens the effects of social relations, the current formalization is minimally socially conditioned.
45
Equations 3.3, 3.4, and 3.5 combine as a theory of knowledge propagation in
which observations are socially conditioned and actions reveal socially emergent
knowledge. These three equations highlight the idea that market communication
behaves like a recurring telephone game in which social structure conditions system
dynamics merely by influencing alter selection.
Imagine that actor A interacts with actor B at time 0. Through A’s action – aA0
– actor B observes a noisy signal that combines actor A’s preferences and knowledge
– uA0 and kA0, respectively. B uses this observation to update her knowledge – kB1. At
time 1, actor B interacts with actor C. C observes B’s action, a noisy signal combining
actor B’s preferences and knowledge – uB1 and kB1, respectively. Through B’s action
– aB1 – and without ever communicating with A, C’s new observation includes a signal
about A’s preferences and knowledge – argmax(uB1|l(kB0, argmax(uAo|kA0))).
Sequences of such communication constitute the basis of market coordination.
But note the social conditioning of this coordination. C’s noisy signal might have
been different if D, rather than B, served as the intermediary. In that case, C’s noisy
signal of A’s preferences and knowledge would have been filtered through D’s
learning and reconciled with D’s prior knowledge. If A and B interacted exclusively,
C would not have received any information about A. Absent any social or cognitive
constraints, every actor’s time t knowledge is path dependent in a telephone game
influenced by and influencing social structure. If market behavior depends on the
46
system-wide distribution of information, then nearly every market is irreducibly
social.27
Equation 3.6 refines this with a formal insight from Chapter 2—an actor will
increasingly interact with an alter as the actor develops a stronger directed relationship
to that alter (Homans, 1961, 182).
𝜕𝜕𝑃𝑃�𝑐𝑐𝑖𝑗𝑡�𝜕𝜕𝑖𝑖𝑡𝑡𝑖→𝑗𝑡
≥ 0 (3.6)
Equation 3.6 represents a microsociological mechanism explaining structure’s
influence on interaction. As a directed tie, tsi→jt, gets stronger, actor i is increasingly
likely to solicit actor j’s interaction. From Equation 3.4, this means that i and j are
more likely to observe one another’s actions. From Equation 3.3, this means that actor
i’s knowledge will increasingly depend on what she learns from j, and vice versa.
System-level knowledge coordination is thus conditioned on the system’s social
relationships and the micro mechanisms conditioning their instantiation.
Lingering Structural Determinism
Equations 3.1-3.6 constitute a system of equations specifying structure’s
influence on coordination via interaction, observation, and learning. But because
social structure remains unexplained, Equations 3.1-3.6 constitute a structurally
deterministic theory, rather than a methodologically individualistic account of
27 Auctions, markets with infrequent transactions, and anonymous electronic exchanges may be exceptions.
47
coordination. Fortunately, as discussed in Chapter 2, Homans’ argument is two-sided.
Interaction is influenced by relationships, and relationships are influenced by
interaction. Equation 3.7 formalizes the proposition that subjective relationships will
grow stronger as actors freely undertake interaction with positive outcomes (Homans,
1961, 182).28
𝜕𝜕𝑖𝑖𝑡𝑡𝑖→𝑗𝑡𝜕𝜕𝑃𝑃�𝑐𝑐𝑖𝑗𝑡�
≥ 0 (3.7)
As developed in Chapter 2, Equations 3.6 and 3.7 formally represent
structuration as a set of mutually emergent microsociological mechanisms.29
28 I write “subjective” because it is possible, for example, for one actor’s outcome to be positive and the other’s negative. I want to leave room for subsequent enhancement of the model to allow for asymmetric interaction outcomes.
Integrating Equations 3.1-3.7 into the theoretical frame summarized in Figure 3.5,
Figure 3.6 illustrates the dissertation’s theory of coordination emergent in micro
processes of structural reproduction.
29 The dissertation’s definition of social structure is different from, but consistent with, Carley’s (1991). Carley defines social structure as the probabilities associated with tie instantiation, but these probabilities are exogenous to the theory. How do such probabilities come about? In this dissertation’s model, interaction probabilities – P(cijt) – are the consequence of tie strength, and tie strength varies in historical interaction. Interaction probabilities are not structure; they are the consequence of structure.
48
Figure 3.6 offers a methodologically individualistic, multi-level theory of
system-level behavior emergent in endogenous structural reproduction.30
The remainder of the dissertation outlines an empirical case, develops
parameters consistent with the empirical case, and computationally instantiates the
empirical case as a market simulation. Pattern comparisons use this computational
instantiation to test the theory’s capacity to explain variation in system-level behavior.
The co-
evolution of structure and action during interaction influences each actor’s
observations, which influences individual knowledge, which influences system-level
knowledge, which influences system-level behavior. The theory’s macro-level
elements can all be represented as functions of micro-level predicates.
30 π could be calculated in various ways using network measures of action volume or structural position. n could be empirically observed, or it could be a component of the model, a consequence of actors’ choices to participate in or leave a market.
Figure 3.6: Coordination During Structuration
ajt
ujt ujt
St
cijt
,
kjt
At
𝑑𝑑𝑖𝑖𝑖𝑖 = �𝑎𝑎𝑗𝑗𝑖𝑖 ∗ 𝑃𝑃�𝑐𝑐𝑖𝑖𝑗𝑗𝑖𝑖 |𝑐𝑐𝑖𝑖∙𝑖𝑖�𝑛𝑛−1
𝑗𝑗=1
𝜕𝜕𝑃𝑃�𝑐𝑐𝑖𝑖𝑗𝑗𝑖𝑖 �𝜕𝜕𝑖𝑖𝑡𝑡𝑖𝑖→𝑗𝑗𝑖𝑖
≥ 0
𝜕𝜕𝑖𝑖𝑡𝑡𝑖𝑖→𝑗𝑗𝑖𝑖𝜕𝜕𝑃𝑃�𝑐𝑐𝑖𝑖𝑗𝑗𝑖𝑖 �
≥ 0
argmax(𝑢𝑢𝑖𝑖𝑖𝑖 |𝑘𝑘𝑖𝑖𝑖𝑖)
49
Chapter 4: Illustrating Individual Knowledge and System Coordination
Chapter 3 proposed Shannon entropy and Jensen Shannon Divergence as two
dimensions of system-wide knowledge coordination. This chapter illustrates the
proposed measures through several examples.
Example Coordination Cases
As an illustrative base case, consider the concept of perfect information
underlying economics’ perfect competition. In this case, all actors know equilibrium
prices. Figure 4.1 represents a case in which all actors in a system believe they know
a hypothetical good’s equilibrium price.31
31 In perfect information, all actors have perfect knowledge. There are at least two dimensions to that concept: actors believe the same thing, and everyone is correct. This chapter’s overview of coordination focuses exclusively on shared beliefs, and is agnostic with respect to knowledge accuracy. This measure of coordination does not necessarily correspond to accuracy. All actors could similarly believe an error. Universal coordination on an error is an interesting case, and corresponds to the concept of an extraordinary popular delusion (Mackay, 1841).
50
In this system, actors A, B, and C all believe that equilibrium price is $7—all
actors assign probability 1 to the event (Price = $7). Jensen-Shannon Divergence is
0.0 because all actors have identical knowledge. Because all actors agree that price is
$7 with probability 1, Shannon entropy is also 0.0. The remainder of this chapter
incrementally relaxes this conceptual baseline to more realistic representations of
system-wide knowledge, revealing the proposed measure’s sensitivity to different
knowledge coordination typologies.
Figure 4.2 presents a case in which individual actors have identical knowledge
with Knightian risk. (Knight, 1921)
In Figure 4.2, all actors believe that the average price is $7, but all actors also
believe that price is equally likely to be $6 or $8. Actors in Figure 4.2 have identical
knowledge, so Jensen-Shannon Divergence remains 0. Unlike the system from Figure
4.1, Figure 4.2’s actors believe that price could be one of several values; the actors
perceive risk. Using equal weights for all actors, the system’s Shannon entropy is
approximately 1.58, measuring the magnitude of the system’s knowledge dispersion.
51
Figure 4.3 presents a hybrid of Figures 4.1 and 4.2 in which each actor believes
there is no price risk, but all actors have different knowledge.
At the actor-level, uncertainty (Knight, 1921) is implicit here; at least two
actors are wrong without knowing that they are fallible. Unlike the prior cases, Figure
4.3 suggests absolutely no overlap in actors’ knowledge, so Jensen-Shannon
Divergence achieves its maximum value, approximately 1.58.32 Shannon entropy is
1.58, as in Figure 4.2, because the system’s weighted knowledge dispersion is
unchanged.33
Suppose that a system’s actors have different knowledge, based on their unique
observations and subjective interpretations of those observations. Figure 4.4
illustrates one such possibility.
32 The JSD maximum value varies based on the number of distributions compared, and the underlying logarithmic scale. 1.58 is the maximum value (in nats) for three distributions and a base-e measure of entropy. 33 The convergence from a system such as Figure 4.3 to a system such as Figure 4.1 reflects the core of most so-called disequilibrium theories, which presume that one actor knows equilibrium, and then study convergence to equilibrium. Such “disequilibrium” theories still require that someone knows equilibrium (Boettke, 2002; Schinkel, 2006). Uncertainty does not really exist at the system level, because at least one actor is omniscient.
52
In Figure 4.4, actors are unsure about price, and their individual beliefs about
price vary. In this system, Jensen-Shannon Divergence is approximately 1.19. This is
lower than Figure 4.3’s 1.58 because there is some overlap in actors’ knowledge. At
3.50, the Shannon entropy associated with Figure 4.4 is higher than in Figures 4.2 and
4.3. This increase in entropy reflects decreased precision in beliefs about price – to
the extent that a system’s actors collectively recognize risk, the actors in Figure 4.4
anticipate greater risk than in Figures 4.2 and 4.3.
Figure 4.5 represents a similar system, but one in which actors have slightly
more similar knowledge than in Figure 4.4.
53
Casual observation suggests that knowledge coordination in Figure 4.4 is
lower than in Figure 4.5. Each actor perceives the same level of risk as in Figure 4.4
(i.e., entropy remains constant for each actor), but actors’ knowledge distributions are
now more closely clustered. Consistent with this, Jensen-Shannon Divergence in
Figure 4.5 is only 0.36, and Shannon Entropy is approximately 2.67.
Summary
This chapter illustrated several knowledge coordination cases. Variation in
this coordination will emerge during processes of structural reproduction as discussed
in Chapter 3. Perceptions of risk may propagate during interaction, or structure may
inhibit coordination, fragmenting the market and potentially introducing uncertainty.
54
Chapter 5: Contextualizing the Theory in a Bilateral Steel Market
This dissertation develops a theory of markets’ irreducibly social nature that
should hold broadly, even in empirical cases that most closely approximate
economics’ perfect competition. Consistent with this objective, imagine a bilateral
commodity market in which all actors engage in boundedly rational profit
maximization, know their own costs, face no transaction costs, and have unlimited
capital mobility. As a thought experiment, grant all of the conditions of perfect
competition save perfect information. In that case, knowledge of price emerges during
buyers’ and sellers’ repeated interactions. If equilibrium exists, then the aggregation
of those dyadic interactions constitutes simultaneous system-level search for
equilibrium and endogenous social structural reproduction. This co-evolution of
market search and social structure during dyadic interactions suggests a nearly
universal foundation for a sociology of markets.
Steel – Bilateral Commodity Markets in Series
This chapter introduces an empirical instance of a widespread class of markets
to which Chapter 3’s formal theory can be computationally applied – bilateral markets
for industrial commodities. Examples of industrial commodities exclusively traded in
bilateral markets include nearly all industrial gases, and all ferrous metals. Such cases
have properties that make them uniquely suited to demonstrating markets’ ubiquitous
social underpinnings.
55
Many industrial gases and ferrous metals are nearly infinitely divisible, fully
fungible, and widely traded by large numbers of buyers and sellers. These products
are also fundamental to most of modern life. If any products are traded in markets that
approach economics’ concept of perfect competition, then hydrogen and steel must be
such products. Studying a bilateral market for an industrial commodity defers
complexities about the social origins of preferences, the subjective interpretation of
observations, and collective agreement about status, and isolates the unique system-
level effects of knowledge propagation during social interaction. Introducing one
instance of such a market, Figure 5.1 illustrates a small segment of the global steel
market – the market for steel wire used to produce staples.
In Figure 5.1, wire mills produce spools of wire, which they sell to
manufacturers that make staples, screws, braided cables, springs, etc. Manufacturers
make staples by cutting steel wire into short lengths, arranging the short pieces side-
Wire Spools StaplesWireMill
Staple Manufacturer
Consumer
Figure 5.1: Staple Supply Chain
RecyclerBundles Scrap
56
by-side, gluing the pieces together, and bending the glued strip into the familiar final
form. After consumers use and discard staples, some are ultimately recycled. Those
separated staples, together with vast amounts of other scrap metal, are collected by
recyclers.
Metals recyclers crush scrap into automobile-sized bricks, and ultimately sell
these “bundles” to steel mills. Mills run bundles through shredders, which rip scrap
into chunks of shredded metal. In North America, this shredded material is used to
produce two thirds of all “new” steel.34 Shredded metal and virgin iron are melted in a
blast furnace, and impurities (other metals, plastics, oil, etc.) are separated from the
“float” that sits on the molten steel.35
This entire process occurs on an extraordinary scale, and exclusively through
bilateral markets. In 2012, global steel production was nearly 1,550 million metric
tons, making the steel market approximately 30 times larger than the aluminum
market.
Molten steel is then cast as ingot, bar, beam,
tube, wire, etc., and sold back into various markets.
36
But unlike aluminum, which is traded on the London Metals Exchange, the
New York Mercantile Exchange, the Tokyo Commodity Exchange, and the Shanghai
Futures Exchange, no ferrous metal is traded on any major commodity exchange.
Steel wire is a commodity; steel staples are a commodity; bundles are a commodity.
The global steel supply chain consists of a series of conversions from one commodity
34 http://www.steel.org/Sustainability/Steel%20Recycling.aspx 35 In the mid-2000s, I visited a mill with an interesting pre-smelting stage. After shredding, the mill ran all material through an automated coin sorter. Offering some perspective on the volume of U.S. vehicle recycling, that mill’s coin sorter annually harvested hundreds of thousands of dollars in loose change. 36 http://www.worldsteel.org/dms/internetDocumentList/press-release-downloads/2012/2012-statistics-table/document/2012%20statistics%20table.pdf Global 2012 aluminum production was approximately 45.2 million metric tones (http://www.world-aluminium.org/statistics/#data).
57
to another in which no commodity is ever publicly traded. One of the world’s largest
and most important commodity markets is heavily insulated from social factors,
except that price knowledge is primarily acquired and propagated during socially
conditioned interaction.37
Remaining close to Stigler’s definition of perfect competition, suppose that
Figure 5.1’s wire mills and staple manufacturers hold no inventory, settle sales
instantly, and have zero lead time. Wire mills and staple manufacturers in such a
world would be specialized arbitrageurs, timelessly manufacturing for instant resale.
This is inconsistent with the inventory reality dictated by steel mills’ blast furnaces,
and inconsistent with mills’ notoriously long roll schedules.
38
• Bundle price, pibt
In reality, long lead
times and a high degree of capital immobility create numerous opportunities for social
relations to impact pricing and availability. But these assumptions render an already
relatively asocial market even more asocial. In this simple market, when evaluating a
potential sale, mill i only needs to know:
• Manufacturing cost, pimt
• Wire price, piwt
37 Though no spot market exists, price information does exist from American Metals Markets (www.amm.com). This organization publishes city-specific prices based on intermittent surveys as follows: “Prices are based on representative volumes delivered to consumers in each market area unless otherwise stated. Prices are the opinions of editors based on contacts with originators, scrap dealers, brokers and consumers. Prices generally represent truckload quantities of baled, high-quality, well separated materials meeting the specifications of local market buyers.” (http://www.amm.com/recman/recprmnu.htm) 38 Starting and stopping a mill’s blast furnace is extremely expensive, so mills typically operate continuously, storing inventory for months at a time. Mills frequently have a single production line, so any change in metal type or size requires a changeover. These can be time-consuming and expensive, so mills use roll schedules to plan production. Quarterly roll schedules are common, and dictate that a unique metal type/size be produced only once every 13 weeks. Because demand occurs stochastically, mills typically hold large inventories.
58
While staple manufacturer j need only consider:
• Staple price, pjst
• Manufacturing cost, pjmt
• Wire price, pjwt
Every interaction between a mill and a staple manufacturer provides a noisy
signal of the individual alter’s costs and the alter’s knowledge of the universe of costs.
Ongoing interaction creates a perpetual knowledge averaging emergent in social
structural reproduction, a telephone game of price signals in which actors’ choices of
alters governs coordination dynamics.
Bilateral Market Interaction
In the steel market, as in most commodity markets where physical delivery
occurs (i.e., the market for aluminum billet rather than the London Metals Exchange
market for aluminum futures), firms employ salespeople and buyers. Mill i, for
example, might employ Anthony as a salesman, and staple manufacturer j might
employ Betty as a wire buyer. Anthony and Betty may get to know one another over
time. They will likely communicate by phone and email, and perhaps through instant
messaging utilities. More likely than not, they will never actually meet.
In their interactions, Anthony and Betty will have some price discretion.
Anthony is probably given a price minimum for each grade and gauge wire; above this
minimum, he will have pricing authority. Anthony’s minimum price will be tied to
59
line size, sales order size, and/or blanket order size.39
Buyers like Betty are usually responsible for maintaining a target finished good
service level, which drives a target stocking level for wire. As manufacturing depletes
Betty’s wire inventory, she will eventually replenish from a steel mill. Buyers usually
have dollar or tonnage purchasing limits beyond which they must get a purchasing
manager’s approval. Several such thresholds may exist, but Betty will have complete
purchasing discretion for almost all transactions.
To ensure that salespeople’s
interests are consistent with firms’ desire to maximize profit, employees like Anthony
are usually paid on commission.
As highlighted in Chapter 3, interactions propagate information and thereby
condition dynamic system-level knowledge coordination. From the above discussion
of Anthony’s and Betty’s roles in their respective firms, let an interaction consist of
the following sequence of steps:
1. Initiation – Either Anthony contacts Betty, or Betty contacts Anthony
2. Offer – The initiating actor specifies a price
3. Offer Response – The actor receiving the offer either accepts or rejects
4. Learning – Actors learn based on alter’s action (offer, accept, reject)
39 A line is a transaction for a specific quantity of a specific product, usually deliverable on a specific date and to a specific location (when a single line is delivered on multiple days or to multiple locations, the line is said to have multiple “splits”). A sales order might include multiple lines for multiple products. A blanket order is an open commitment to purchase, without specific delivery dates. For example, a buyer might commit to purchase 100,000 pounds of a particular product within the next 12 months. Blanket orders are particularly convenient for batch manufacturing of products such as steel, glass, and carbon black. These products involve very high setup costs and long production schedules.
60
Initiation
Initiation is the probability that an actor picks up the phone, sends an email, or
otherwise reaches out to an alter. Chapter 2 revealed these initiation probabilities as a
core microsociological mechanism in a theory of endogenous structural emergence.
For this dissertation, and to mimic economics’ generally asocial approach, actors are
blind to social influences after initiation – everyone is a boundedly rational profit-
maximizer. But consistent with Equation 3.5 based on Equation 2.8, buyers and
sellers initiate interactions based on their relationships with alters.
Offer
Suppose that interaction initiation always includes a price offer. So when
Anthony offers Betty wire, he provides Betty with an ask price. As a boundedly
rational profit-maximizer, Anthony always offers the price he believes will maximize
firm profit, which requires that Anthony hold subjective beliefs about Betty’s
probabilities for accepting different prices. Represent Anthony’s knowledge of
Betty’s threshold acceptance price – pwt* – as a time-specific probability distribution –
kt. Consistent with Equation 3.5, Equation 5.1 formalizes Anthony’s knowledge-
conditioned, profit-maximizing offer price – ait in Figure 3.6:
argmax𝑝𝑤𝑡
�(𝑝𝑤𝑡 − 𝑝𝑏𝑡 − 𝑝𝑚𝑡) ∗ � 𝑘𝑘𝑡∞
𝑝𝑤𝑡� (5.1)
Buyers like Betty will choose an offer price according to Equation 5.2:
argmax𝑝𝑤𝑡
�(𝑝𝑠𝑡 − 𝑝𝑤𝑡 − 𝑝𝑚𝑡) ∗ � 𝑘𝑘𝑡𝑝𝑤𝑡
0� (5.2)
61
Offer Response
In this hypothetical instance of the steel market, Betty can only accept or reject
an offer from Anthony. More realistically, Anthony and Betty might negotiate
quantity, price, and delivery terms. But suppose that no negotiation occurs. Then
Betty will accept Anthony’s offer so long as the wire price allows her to at least break
even. Formally, Betty will accept Anthony’s offer so long as it meets the threshold
price:
𝑝𝑤𝑡 ≤ (𝑝𝑠𝑡 − 𝑝𝑚𝑡) (5.3)
And sellers in this market will accept a buyer’s offer when offer price satisfies
Equation 5.4:
𝑝𝑤𝑡 ≥ (𝑝𝑏𝑡 + 𝑝𝑚𝑡) (5.4)
Learning
Based on the above structure of interactions, actors can learn different things.
If Betty offers Anthony $0.35 for a pound of wire, he knows that Betty would have
accepted any price less than or equal to $0.35. If Anthony offers Betty wire at $0.40
per pound and she rejects, he knows that she would not have accepted any price
greater than or equal to $0.40. But he does not know which prices under $0.40 would
have been acceptable.
If prices were stable, Betty and Anthony could each use their offers in a binary
search designed to identify one another’s threshold prices. Anthony, for example,
could offer Betty $0.35. If she refused, he could offer $0.20. If she accepted, he could
offer $0.28. He could proceed until he found Betty’s threshold acceptance price, and
62
then he would be done. But if pbt, pst, and pmt change, actor learning needs to
dynamically accommodate that change.
In this market, learning integrates an actor’s observations of alters’ offers,
alters’ rejections, and alters’ acceptances into a unified set of beliefs about price. This
learning is sensitive to time, and recognizes that the underlying phenomenon over
which actors hold beliefs – alters’ price thresholds – constantly changes.
Volume, Variance, and Market Structure Example
The previous section discusses buyer/seller interaction in mid-level steel
markets. This section uses actual data for a Midwestern metals processor to illustrate
the competitive nature of such markets, and the level of price ambiguity confronting
both mills and processors. This illustration through actual data informs the
computational model’s parameterizations, and offers further insight into the structure
of a bilateral market for an industrial commodity.
A mid-sized U.S. metals processor – MouMou Steel Processor (MMSP) –
manages dozens of stores across the United States. Each store receives cold-rolled
steel coil directly from mills, cuts the coil, and re-sells cut metal to other firms for
subsequent manufacturing. MMSP employs buyers like Betty to purchase steel coil,
and salespeople like Anthony to sell cut metal. Reviewing one of the processor’s
highest volume coils offers extensive empirical insight into the North American steel
market.
CRC/16/CB/48 is a 16-gauge, 48” wide, cold-rolled coil that looks a bit like a
very large, metal fruit rollup. Between July 8, 2009 and July 7, 2012, nine steel mills
63
supplied six MMSP stores with 217 CRC/16/CB/48 supply orders totaling almost 11.5
million pounds. MMSP’s smallest CRC/16/CB/48 supply order was on October 7,
2011 for 12,630 pounds at $0.39 per pound. MMSP’s largest CRC/16/CB/48 supply
order was May 26, 2011 for 184,550 pounds at $0.41 per pound.
During the same three years, MMSP received 10,475 customer orders for 196
unique parts cut from the CRC/16/CB/48. CRS/16/CB/48X120 – 16 gauge, 48x120”
plates of cold-rolled steel sheet – was particularly important to MMSP’s sales. This
part number was ordered 3,808 times from the six stores stocking CRC/16/CB/48. Of
the six stores, location BRP accounted for 1,757 of the customer sales and 104 of the
supply transactions. Of BRP’s 1,757 sales transactions, 1,172 were filled complete
with no more than two days between order receipt and order shipment.40
40 Following the Means/Mills price stickiness debate (cite), Industrial Organization explanations for dyad-level price variance (cite Carlton) and price stickiness (various cites) appeal to either advance notice or delayed delivery. Focusing on transactions with a two day window between order placement and order shipment, those transactions with nearly instantaneous fulfillment, targets a large subset of transactions for which neither of these explanations applies.
These sales
orders were shipped to 153 unique customers, and totaled more than 6.7 million
pounds of steel. Figure 5.2 presents 3 years of sales history for the
CRS/16/CB/48X120.
64
Over a three year period with approximately two hundred business days each
year, BRP nearly instantly satisfied about two CRS/16/CB/48X120 sales transactions
each day. This part is made from a common steel coil, and it is sold to many end-
users. MMSP’s regional distribution and nearly instantaneous order fulfillment mean
that neither transportation costs nor order delays can explain price discrepancies – all
transactions should have had negligible transaction costs.
If any market for a physical product is going to behave according to
economics’ perfect competition, then the market for CRS/16/CB/48X120 should be
such a case. And yet the magnitude of daily price variance suggests very large
departures from perfect competition. We might expect this price variance if MMSP
engages in quantity-based pricing. But as Figure 5.3 shows, order size is insufficient
to explain price variance.
65
Of the 1,172 transactions for CRS/16/CB/48X120 at BRP, 176 were for 200
pounds and 138 were for 1,000 pounds. While larger transactions typically had very
slightly lower sales prices, substantial and consistent price variation existed even for
transactions of the same size. For 200 pound transactions, price changed by an
average of almost 6.7% between each set of sequential transactions. For 1,000 pound
transactions, price also changed by an average of 6.7% between each set of sequential
transactions. In this commodity market with limited transaction costs, sales prices
exhibited substantial volatility. This volatility is inconsistent with the law of one
price, but it is consistent with disequilibrium search.41
Also, MMSP’s actual sales
data help illustrate the level of uncertainty faced by actual buyers and sellers.
41 I have presented these data to several audiences, and the observed price volatility always raises questions. Among the management scholars, conversations invariably develop into “why hasn’t someone created a secondary market to arbitrage out this risk?!” But Slade (1991) showed that the North American aluminum market’s transition from a system of producer prices to a public exchange actually increased volatility. Alternately, economists typically reference research demonstrating that price stickiness and volatility are artifacts of differences in order size, delivery lead time, product quality, and transaction costs. This example was carefully chosen such that none of those factors is applicable.
66
Summary
This chapter described a major industrial commodity market, characteristics of
interactions typical in such markets, and the general theoretical utility associated with
studying commodity markets. Mimicking aspects of the assumption of perfect
competition renders these already asocial markets even more asocial, thereby focusing
exclusively on social relations’ influence on markets via information propagation.
The chapter identified a handful of parameters that govern steel mill and staple
manufacturer behavior, and formalized several decision rules associated with actors’
market interactions. The next chapter incorporates these with the parameters
identified in Chapters 2 and 3, which fully parameterizes the theoretical system
outlined in Figure 3.6.
67
Chapter 6: Parameterizing the Steel Market Case
Previous chapters proposed a formal theory of social structural emergence, a
formal theory of coordination during social structural emergence, and an empirical
application that closely approximates economics’ perfect competition. This chapter
summarizes the parameters identified in Chapter 2’s theory of structural emergence,
Chapter 3’s theory of endogenous coordination, and Chapter 5’s summary of the steel
wire market. The chapter then specifies codable functions for each parameter
consistent with Chapter 5’s empirical context.
Parameter Summary
Conditioned on the existence of a tie between actors A and C, Chapter 2
identified five parameters governing social structural reproduction:
A) 𝜕𝜕𝑖𝑖𝑡𝑡𝐵𝐶𝜕𝜕𝑃𝑃(𝑐𝑐𝐵𝐶∙)
B) 𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)𝜕𝜕𝑖𝑖𝑡𝑡𝐴𝐵
C) 𝜕𝜕𝑃𝑃(𝑐𝑐𝐵𝐶)𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)
D) 𝑃𝑃(𝑐𝑐𝐴𝐶∙|𝑐𝑐𝐴𝐵∙)
E) 𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐶∙|𝑐𝑐𝐴𝐵∙)𝜕𝜕𝑃𝑃(𝑐𝑐𝐴𝐵∙)
In a bilateral market, these parameters simplify substantially. Because the AC tie
exists, and because a bilateral market is a bipartite graph, A and C cannot both interact
68
with B; so parameter (C) is zero. For the same reason, parameter (D) equals zero.
Since parameter (D) is constant at zero, parameter (E) must equal zero. Parameters (A)
and (B), the microsociological mechanisms in Granovetter’s (1973) probabilistic
adaptation of Homans’ (1961) mechanisms, thus fully govern social structural
reproduction in the motivating empirical case.
Leveraging insight from Chapter 2, Figure 3.6 summarized eleven parameters
governing coordination emergent during structural reproduction:
1) 𝑆0
2) 𝑘𝑘𝑖0
3) 𝑙𝑖𝑡
4) 𝑢𝑢𝑖𝑡
5) 𝑎𝑎𝑖𝑡
6) 𝜋𝑖𝑡
7) 𝑛𝑛
8) 𝑃𝑃(𝑐𝑐𝑖∙𝑡)
9) 𝑃𝑃�𝑐𝑐𝑖𝑗𝑡�
10) 𝜕𝜕𝑖𝑖𝑡𝑡𝑖→𝑗𝜕𝜕𝑃𝑃�𝑐𝑐𝑖𝑗∙�
11) 𝜕𝜕𝑃𝑃�𝑐𝑐𝑖𝑗∙�𝜕𝜕𝑖𝑖𝑡𝑡𝑖→𝑗
Chapter 5’s discussion of the market for steel wire sold to staple manufacturers
identified three price parameters:
12) 𝑝𝑖𝑏𝑡
69
13) 𝑝𝑖𝑠𝑡
14) 𝑝𝑖𝑚𝑡
Parameter Specification
Initial Social Structure, S0
This dissertation treats social structure at time t, St, as the time-specific
strength of dyadic relationships. The social context of a bilateral commodity market
minimizes modeling complexity because interactions are always dyadic. So St is the
set of all time-t, directed dyadic relationships. I implement this via a Boolean matrix
of type-possible interactions – G. For example, in a system with 2 mills and 3
processors, G would be:42
M1 M2 P1 P2 P3 M1 0 0 1 1 1 M2 0 0 1 1 1 P1 1 1 0 0 0 P2 1 1 0 0 0 P3 1 1 0 0 0
Each gij cell in G indicates whether interaction is contextually possible. In
conjunction with the subsequent specifications for parameters 9 and 10, G specifies S0
and preserves the bipartite graph during simulated structural reproduction.
Bundle Price, pibt
Figure 5.1 summarized staples’ circular supply chain. From the mills’
perspectives, the basic raw material is the bundle – a stack of crushed metal sold by
weight. Like wire, bundles are sold in bilateral markets; so each mill may face a
42 I use the terms “processor” and “staple manufacturer” interchangeably.
70
unique bundle cost. For simulation purposes, and to stay as close as possible to
Stigler’s definition of perfect competition quoted in the introduction, suppose that all
mills face a single bundle cost. Set the initial bundle price – pb0 – to $0.20. During
each simulation round, update bundle price according to a system-level volatility
parameter – bundle_price_range. Set bundle_price_range to 10%, and update bundle
price as follows:
pbt = pbt-1*(1 + Unif(-bundle_price_range, bundle_price_range))
This will create average absolute change of approximately 5% every
simulation round, slightly less than MMSP’s empirically observed coil and sheet price
volatility discussed in Chapter 5. In conjunction with the additional volatility
parameters discussed later, the simulation should loosely approximate MMSP’s actual
price volatility.
Manufacturing Cost, pimt
For each mill and staple manufacturer, specify a unique manufacturing cost.
For mills, this is the cost of converting bundles into wire. For staple manufacturers,
this is the cost of converting wire into staples. Initialize the simulation by specifying
each firm’s manufacturing costs, pim0, as $0.10. In the same manner as mills’ bundle
prices, initialize the simulation with a proc_mfg_cost_range and a
mill_mfg_cost_range. Iteratively update each pimt in the same manner as pbt.
Staple Price, pist
As with bundles, unrealistically suppose that all manufacturers face the same
staple price – pst. In this simple market, each staple manufacturer sells her production
at a known but unique staple price, pist. Consistent with MMSP’s actual sales data
71
from Figure 5.3, set the initial staple price – ps0 – to $0.50. In the same manner as
bundle_price_range, initialize a system-level staple_price_range at 10%. In each
simulation round, update pst based on the staple_price_range parameter.
Initial Knowledge, ki0
The coordination concept proposed in Chapter 3 relies on a probabilistic
representation of knowledge. Mills begin the simulation in a high entropy state where
they assign equal probability to all prices between $0.00 and 150% of their total
cost:43
ki0 ~ Unif(0, 1.5*(pib0 + pim0))
Each staple manufacturer’s initial knowledge is a uniform distribution between
$0.00 and 150% of the manufacturer’s net revenue:
ki0 ~ Unif(0, 1.5*(pis0 - pim0))
Learning, lit
As discussed in Chapter 5, learning requires dynamic response to multiple
types of observation. Achieve this by breaking learning into two high-level functions:
range specification and posterior computation. First, each agent reviews the range of
prices to which he assigns non-zero probability. This range is bounded at $0.00, but
the maximum may change during the simulation.
43 I settled on these parameters in conjunction with the learning function. These seemed to yield relatively well-informed agents, which is consistent with the dissertation’s attempt to mimic perfect competition as much as possible. Actors need initial beliefs that support search, but are also narrow enough to preclude searching in infeasible regions. Assigning non-zero probability to exceptional values can induce unrealistic agent behavior.
72
For initial knowledge, ki0, this range maximum was strictly a function of each
agent’s prices and costs. After initialization, each mill’s knowledge is a probability
distribution with minimum equal to $0.00 and maximum equal to:
max(1.5*(pb0 + pim0), 2*max_observed_transaction)
Max_observed_transaction is the maximum price that an alter has accepted or
that an alter has offered. For each staple manufacturer, knowledge is a probability
distribution with maximum value equal to:
max(1.5*(ps0 - pim0), max_observed_transaction)
Over these ranges, actor learning incorporates new observations into existing
knowledge. Actors execute their learning using two randomly assigned weighting
parameters:
time_weight ~ unif(0.2, 0.8)
integration_weight ~ unif(1.0, 2.0)
time_weight governs an actor’s sensitivity to new information such that new
observations disproportionately affect knowledge for an agent with a high
time_weight parameter. integration_weight affects an agent’s treatment of low
probability prices. Agents with higher integration_weight parameters relatively under-
weight low probability events.
Agents in this simple market receive three types of signals: offer, accept, and
reject. Agents integrate their observations of alters’ accepts and rejects as knowledge
of response to agent’s action, which they then combine with knowledge gained from
observing alters’ offers. For each knowledge type, actors use recent observations to
73
construct likelihood functions. In a pseudo-Bayesian fashion, they use these
likelihoods to update their prior distributions.
At each time t, the generic likelihood is a uniform distribution across the range
[0, max_value], where max_value is the highest price to which the actor assigns non-
zero probability. Using observations from the prior simulation round, the simulation
constructs one likelihood function for alters’ responses to actor’s offers and a second
likelihood function for alters’ offers. The simulation computes action and offer
posterior distributions by weighting the likelihoods with the associated prior
distributions using the time_weight. The simulation then calculates an unscaled,
aggregate posterior as the product of the action and offers posteriors raised to the
integration_weight power. The simulation scales these values to ensure that they
constitute a probability distribution summing to 1, and the scaled values constitute the
aggregate knowledge posterior. Chapter 7 illustrates this learning process, and its
efficacy, through a series of actual simulation examples.
Preferences, uit
Unrealistically suppose that firms and their agents are strict profit-maximizers.
More realistically, firms will sometimes have competing objectives, and principal-
agent problems may exist. Assuming profit-maximization supports the dissertation’s
emphasis on the significance of socially contextualized information even when actors
are otherwise asocial.
Action, ait
74
In this theoretical frame, action is strategy applied to knowledge and
preferences. In the simulation, action occurs as offers and responses, and was
formalized in Equations 5.1-5.4.
JSD Weights, πit
Assign every simulated agent equal weight when computing Jensen-Shannon
Divergence. In the concept of perfect competition, this is loosely consistent with the
condition that no firm have disproportionate market influence.
Number of Agents, n
This simulation consists of two types of agents: mills and staple manufacturers
(processors). Initialize each simulation with twenty mills and twenty staple
manufacturers. The simulation does not introduce new agents, and it does not
eliminate agents during the simulation.
Interaction Probability, P(ci•t)
This is the probability that agent i interacts with anyone at time t. Each agent
can undertake two types of action: offer and respond. P(offer) is the initiation rate
discussed earlier. In this simulation, every agent makes an offer every round, so
P(offer) equals one in all cases. The probability that an agent responds depends on the
probability that alters seek interaction with that agent, which emerges from the
parameters below.
Specific Interaction Probability, P(cijt)
75
This is the probability that i and j interact at time t. From Chapter 5’s
discussion of the empirical application, P(cijt) actually includes two distinct events.
Actor i could solicit interaction with j by making an offer to actor j – P(ci→jt), or actor j
could make offer to actor i – P(cj→it). The simulation computes P(ci→jt) as:
𝑃𝑃�𝑐𝑐𝑖→𝑗𝑡� = 𝑖𝑖𝑡𝑡𝑖→𝑗𝑡
𝑐𝑓𝑖
∑ 𝑖𝑖𝑡𝑡𝑖→𝑘𝑡𝑐𝑓𝑖𝑚
𝑘=0 (6.1)
In Equation 6.1, m is the number of non-like alters (e.g., the number of mills
with whom a staple manufacturer might interact), and cfi is actor i’s commit_factor.
For each simulated system, randomly specify an avg_commit_factor ~ Unif(0.5, 1.5).
For each simulated agent, specify a commit_factor as: avg_commit_factor + Unif(-0.5,
0.5). This commit_factor specification generates system-level heterogeneity in tie
strengths’ influence on alter selection.
Interaction’s Influence on Tie Strength
At any time t, the simulation specifies directed tie strength as:44
𝑖𝑖𝑡𝑡𝑖→𝑗𝑡
= 𝑖𝑖𝑟𝑖𝑗𝑡𝑙𝑓𝑖 + 𝑔𝑖𝑗 (6.2)
trijt is the total number of accepted offers – interactions that have resulted in
transactions – between i and j by time t. lfi is agent i’s liking factor. Each system is
initialized with an avg_liking_factor ~ Univ(0.5, 1.5), and each agent is initialized
with a liking_factor equal to her system’s avg_liking_factor plus ~Unif(-0.5, 0.5). gij
is a binary value discussed in the specification for Initialize Social Structure, and
indicates whether or not interaction is contextually possible.
44 This specification uses completed transactions rather than all interactions to ensure greatest possible consistency with Homans’ clarification (1961) of his original mechanisms (1950), in which he specified that interactions had to be freely undertaken and have positive outcomes.
76
Differentiating Equation 6.2 using the chain rule reveals its consistency with
Equation 3.7’s formalization of Homans’ mechanism.
𝜕𝜕𝑖𝑖𝑡𝑡𝑖→𝑗𝑡𝜕𝜕𝑃𝑃�𝑐𝑐𝑖𝑗𝑡�
= 𝑙𝑓𝑖 ∗𝜕𝜕𝑖𝑖𝑟𝑖𝑗𝑡
𝑙𝑓𝑖−1
𝜕𝜕𝑃𝑃�𝑐𝑐𝑖𝑗𝑡�
= 𝑙𝑓𝑖 ∗𝜕𝜕𝑖𝑖𝑟𝑖𝑗𝑡
𝑙𝑓𝑖−1
𝜕𝜕𝑐𝑐𝑖𝑗𝑡∗
𝜕𝜕𝑐𝑐𝑖𝑗𝑡𝜕𝜕𝑃𝑃�𝑐𝑐𝑖𝑗𝑡�
= 𝑙𝑓𝑖 ∗ (≥ 0) ∗ (≥ 0)
≥ 0 (6.3)
lfi is symmetric about 1 with minimum equal to 0 and maximum equal to 2. tr, the
number of completed transactions, will weakly grow in the number of interactions
through time t – cijt. And the number of interactions will grow as the probability of
interaction – P(cij) – grows. The simulation’s tie strength specification thus guarantees
that the derivative of tsi→j in P(cij) – Equation 3.6 – will be greater than or equal to 0.
Tie Strength’s Influence on Alter Selection
Differentiating Equation 6.1 relative to tie strength reveals that the simulation’s
alter selection routine conforms to Granovetter’s probabilistic implementation of
Homans’ proposition from Equation 3.5.
𝜕𝜕𝑃𝑃�𝑐𝑐𝑖→𝑗𝑡�𝜕𝜕𝑖𝑖𝑡𝑡𝑖𝑗𝑡
=��∑ 𝑖𝑖𝑡𝑡𝑖𝑘𝑡
𝑐𝑓𝑖𝑚𝑘=0 � ∗ 𝑐𝑐𝑓𝑖 ∗ 𝑖𝑖𝑡𝑡𝑖𝑗𝑡
𝑐𝑓𝑖−1� − �𝑖𝑖𝑡𝑡𝑖𝑗𝑡𝑐𝑓𝑖 ∗ 𝑐𝑐𝑓𝑖 ∗ 𝑖𝑖𝑡𝑡𝑖𝑗𝑡
𝑐𝑓𝑖−1�
�∑ 𝑖𝑖𝑡𝑡𝑖𝑘𝑡𝑐𝑓𝑖𝑚
𝑘=0 �2
=��∑ 𝑖𝑖𝑡𝑡𝑖𝑘𝑡
𝑐𝑓𝑖𝑚𝑘=0 � − 𝑖𝑖𝑡𝑡𝑖𝑗𝑡
𝑐𝑓𝑖��𝑐𝑐𝑓𝑖 ∗ 𝑖𝑖𝑡𝑡𝑖𝑗𝑡𝑐𝑓𝑖−1�
�∑ 𝑖𝑖𝑡𝑡𝑖𝑘𝑡𝑐𝑓𝑖𝑚
𝑘=0 �2
={≥ 0}�𝑐𝑐𝑓𝑖 ∗ 𝑖𝑖𝑡𝑡𝑖𝑗𝑡
𝑐𝑓𝑖−1�> 0
77
≥ 0 (6.4)
Summary
These parameterizations specify codable functions for a computational model
of Figure 3.6 applied to the motivating empirical case. That computational model can
illuminate structuration’s influence on Figure 3.6’s endogenous terms:
i) 𝑘𝑘𝑖𝑡
ii) 𝑐𝑐𝑖𝑡
iii) 𝑆𝑡
iv) 𝐾𝑡
v) 𝐴𝑡
79
Chapter 7: Modeling Learning
Chapter 6 described the simulation’s learning model, which is implemented in
Appendix 2’s compute_actor_knowledge.py. For each agent, the learning function
incorporates various signals (accepted offers, rejected offers, and alter offers) into a
single probability distribution representing the agent’s subjective beliefs of potential
alters’ threshold acceptance prices. This probability has to accommodate change,
including expanding to include regions previously thought impossible. Through a
series of examples, this chapter illustrates the simulation’s implementation of agent
learning.
Knowledge as Threshold Probabilities
The simulation computes posterior probability mass functions (pmf) for three
elements of agent-level knowledge:
• pr(x) – Probability that an alter will reject agent’s offer for x
• pa(x)– Probability that an alter will accept agent’s offer for x
• po(x)– If agent receives an offer, probability that the offer is for x
The simulation aggregates these three probability distributions to derive the
agent’s subjective knowledge of alters’ threshold prices. A mill’s threshold price is
the lowest price at which she would sell wire. A processor’s threshold price is the
highest price at which he would purchase wire. So a mill’s subjective knowledge is a
80
probabilistic representation of her beliefs about the highest prices that processors will
pay.
Initial Knowledge
Chapter 6 specified agent i’s initial knowledge – ki0 – as a uniform distribution
between zero and a multiple of either the agent’s total cost (mills) or net profit
(processors). In an actual simulation with twenty mills and twenty processors, Mill 3
begins the simulation knowing only her own manufacturing cost and the global bundle
cost – $0.11 and $0.19, respectively. Using these costs, the simulation initializes each
of her three knowledge elements and her aggregate knowledge uniformly between
$0.0 and $0.45 – ~U($0.0, $0.45). Figure 7.1 captures this as four overlapping
probability distributions.
Initially, Mill 3 is in a state of total ignorance, and her different knowledge
elements are all identical. In stark contrast to Mill 3’s initial knowledge, her twenty
potential alters face actual threshold prices as summarized in Figure 7.2.
81
Comparing Figure 7.1 to Figure 7.2 reveals Mill 3’s initial ignorance. In
Figure 7.1, Mill 3 believes that a processor might reject $0.25, while Figure 7.2 shows
that every processor would accept an offer of $0.25. Illustrating the magnitude of Mill
3’s initial misperceptions, Figure 7.3 compares the complementary cumulative
distribution functions (ccdf) of Mill 3’s subjective knowledge and alters’ actual
threshold prices.
82
According to Figure 7.3, Mill 3 initially believes there is an 80% chance that
potential buyers would accept $0.10, and a 25% chance that buyers would accept an
offer for $0.35. In fact, based on the actual thresholds, every buyer would accept
$0.35. As agents observe alters’ actions, the simulation’s learning implementation
should rapidly render subjective knowledge more similar to actual thresholds. The
remainder of this chapter illustrates the simulation’s learning model and its dynamic
efficacy.
Learning from Alters’ Actions
Figure 7.3’s Subjective Knowledge constitutes the knowledge input for
Equation 5.1’s argmax function. Initially informed only by Figure 7.3’s risky, high
entropy knowledge, Mill 3 uses Equation 5.1’s logic to select her first offer price. In
the first simulation round – round 0 – Mill 3 offers a pound of steel wire to Processor
6 for $0.38, and Processor 6 accepts the offer. Mill 3 does not receive any offers in
round 1, so Processor 0’s offer acceptance is Mill 3’s only new observation. Figure
7.4 illustrates this new observation’s impact on Mill 3’s subjective knowledge.
83
Several things have changed between Figures 7.1 and 7.4. Mill 3 assigns non-
zero probability to a range of potential prices. Her initial knowledge was ~unif($0.00,
$0.45), where the maximum corresponded to 150% of her total production cost. After
observing Processor 6 accept $0.38 in simulation round 0, Mill 3 updates her
maximum conceivable price to 200% of her highest observed transaction price, so she
now assigns non-zero probability over the range ($0.00, $0.76). The simulation uses a
time-weighting scheme that blends prior knowledge with new observations, which
causes prices in the newly added region – ($0.45, $0.76) – to receive relatively less
weight than the prices in the region originally considered feasible.
Processor 6’s acceptance of the $0.38 offer creates a kink in Mill 3’s
perceptions of alters’ acceptance probabilities. Comparing ‘Offer Accept’ between
Figure 7.1 and Figure 7.4, Mill 3 now believes that $0.40 is a more likely threshold
offer acceptance price and $0.10 is less likely. Finally, Figure 7.4’s ‘Threshold pmf’
reflects the learning function’s relative weighting. When integrating ‘Offer Accept,’
‘Offer Reject,’ and ‘Alter Offer,’ the simulation emphasizes high probability regions.
84
Thus, ‘Threshold pmf’ in the region ($0.38, $0.45) is greater than any of the
probability distributions from which it is computed, and it is less than its component
probability distributions in the region ($0.45, $0.76).
As Mill 23 interacts with Processor 6, her alters’ threshold prices are also
changing; Mill 23 is chasing a moving target. Figure 7.5 summarizes Mill 23’s newly
updated knowledge and potential alters’ new threshold prices.
Comparing Figure 7.5 to Figure 7.3 reveals two things: Mill 23’s knowledge of
her alters’ threshold prices is still far from accurate, but her updated knowledge is
better than her initial knowledge. Also, her potential alters’ threshold prices are
changing. Not directly aware of these changes in her alters’ threshold prices, Mill 3
uses her updated subjective knowledge and the logic from Equation 5.1 to select a new
profit-maximizing offer price. This time, she offers steel wire to Processor 7 for $0.38
and he accepts. Figure 7.6 presents Mill 3’s subjective knowledge after incorporating
this new observation.
85
After observing a second accepted offer at $0.38, Mill 3 assigns even more
probability to values greater than $0.38. Also, the time weighting method is muting
the difference between the regions ($0.00, $0.38) and ($0.45, $0.78). For both the
probability mass functions (pmf) and complementary cumulative distribution
functions (ccdf), Figure 7.7 compares Mill 23’s newly updated knowledge with alters’
actual thresholds.
By simulation round 2, Mill 3 is clearly learning about her alters’ threshold
prices. In the region ($0.38, $0.45), her subjective knowledge looks pretty good. But
86
she still assigns too little probability to values under $0.38, and her recent offer
success causes her to assign excess probability to values greater than $0.50. Using her
updated knowledge, Mill 3 offers Processor 2 $0.40, which she accepts. In the same
round, Mill 3 receives a $0.23 offer from Processor 9 and a $0.32 offer from Processor
14. Mill 3 incorporates these three new observations into her knowledge as in Figure
7.8.
Comparing Figure 7.2 to the upper half of Figure 7.8, Mill 3’s alters’ threshold
prices are clearly growing more heterogeneous. Based on the ccdf in the lower half of
Figure 7.8, it looks like Mill 3 now overestimates her alters’ threshold values. In
round 3, using this updated knowledge, Mill 3 offers Processor 5 $0.42, which he
rejects. Figure 7.9 presents Mills 3’s knowledge after this first offer rejection.
87
The rejected offer causes Mill 3 to reevaluate her earlier beliefs about alters’
threshold probabilities; she now believes threshold prices above $0.42 are less likely.
Reaching further into the future, Figure 7.10 summarizes Mill 3’s knowledge and
alters’ actual thresholds in round 20.
By round 20, processors’ threshold prices exhibit significantly more
heterogeneity, but Mill 3’s knowledge is quite good. Her assignment of probability
roughly corresponds to both the density and range of alters’ actual thresholds. And
88
Mill 3 is typical of the simulated agents. Figure 7.11 summarizes Mill 2’s round 20
subjective knowledge.
Mills 2 and 3 face the same set of alters, or the same simulated reality of
threshold prices. Mill 2 is more pessimistic than Mill 3, and believes he will have to
offer processors relatively low prices. Still, Mill 2’s subjective perception of reality is
not too bad. He recognizes the breadth of actual threshold prices, and he does assign
high probability to the densest region.
The simulation similarly implements buyer learning. Because buyers are
concerned with the minimum prices acceptable to sellers, the simulation computes
buyer knowledge based on the cumulative distribution function (cdf) rather than the
ccdf. Figure 7.12 summarizes Processor 0’s round 20 knowledge.
89
As Figures 7.10 and 7.11 demonstrated for mills, Figure 7.12 shows that the
simulation’s implementation of buyer learning produces a reasonably good
approximation of alters’ actual threshold prices.
Summary
Learning plays a central role in the theory’s concept of markets as socially
contextualized communication systems. The simulation implements learning by
computing several different posterior distributions, incorporating these a single
probability mass function summarizing an agent’s aggregated beliefs about potential
alters’ threshold price probabilities, and computing either the complementary
cumulative distribution function (for mills) or cumulative distribution function (for
processors) as the final representation of time-specific knowledge. This representation
of knowledge is used when agents select offer prices.
Based on Figures 7.10, 7.11, and 7.12, the simulation’s learning function
seems to perform relatively well. It holds up well over time, responds to dynamic
90
change, works for both buyers and sellers, and does not demonstrate bias. The
learning function’s accuracy likely could be improved, but improving the learning
function without compromising its flexibility to underlying change proved difficult.45
45 Using the existing integration and time weights, I think agent mortality could improve the learning function by evolving a set of well-adjusted agents.
91
Chapter 8: Baseline Coordination Implications
Chapter 3 formalized a theory of processual market coordination during
endogenous social structural reproduction. The core of this theory is the idea that
structure and knowledge co-evolve during socially contextualized interaction, and that
this process influences system dynamics by imperfectly coordinating actor knowledge.
Chapter 5 described the case of mid-level, bilateral markets for ferrous metals
products, which Chapter 6 parameterized using Chapter 3’s formal theory. The
Python code in Appendix 2 instantiates this parameterization of the theory as a
computational model. I used the computational model to simulate archetypal cases,
and compared the cases to assess the manner in which social structural reproduction
influences system dynamics.46
Two Extremes
Chapter 6 formalized Parameters 10 and 11, partial derivatives that Chapter 2
identified as core mechanisms governing processes of endogenous social structural
reproduction. From Equations 6.1 and 6.2, the simulation implements these via a
commitment factor and a liking factor, respectively. The commitment factor and the
liking factor are independent, and range from 0 to 2.
46 Ideally, results from many simulations would be used as input to a structural equation model based on Figure 3.6. This proved to be computationally infeasible. Running Appendix 2’s programs on a late-2012 iMac with 32 GB RAM, a 768 SSD, and a 3.4 GHz Ivy Bridge processor, I was able to execute about 200 simulations per day using Python’s multiprocessing module. I ran more than 10,000 simulations, and I expect that many more would be required to get a structural equation model to converge.
92
Asocial Systems
When both factors are zero for all agents, social structure and interaction
probabilities are static. Such systems are not atomistic, because learning still occurs
through sequences of dyadic interactions. But interaction has no influence on social
structure, and structure exerts no influence on alter selection. In such systems,
interaction will always be random, and no structural patterns will emerge to condition
knowledge propagation.
If either the liking or commitment factor is zero, then knowledge propagation
is completely independent of social structure in this dissertation’s computational
model. For example, in a system where all actors’ liking factors are equal to zero,
Equation 6.2 specifies that tie strength will always equal two. Consequently,
according to Equation 6.1, an agent will select alters with equal probability regardless
of her commitment factor. Similarly, in a system where all actors have commitment
factors equal to zero, Equation 6.1 says that all actors’ alter selection probabilities
remain constant. If either Equation 6.1 or Equation 6.2 equals zero, structure never
changes and/or it exerts no influence on alter selection. Such asocial systems
constitute the first base case.
Maximally Social Systems
In contrast to asocial systems , when the commitment and liking factors are
both equal to two for all agents, a simulation is maximally social.47
47 Higher levels of commitment, stronger affect, or other factors may cause actual social systems to exhibit even greater tendencies toward clique formation. The simulated maximally social systems are “maximally” social in that these systems sit at one extreme of the simulation’s parameter space.
In such cases,
liking and interaction reinforce one another, quickly yielding cliques. In a system with
93
ten mills and ten staple manufacturers, given the simulation’s interaction initiation
rate, any given mill will interact with at least one manufacturer in the first round. If
Mill A’s round 1 interaction with Manufacturer Z is a successful transaction, tsA→Z
will increase from 1 to 2. From Equation 6.1, this change in tie strength will increase
P(cA→Z) from 10% to about 31%, and reduce all other P(cA→j) values from 10% to
about 8%. If Mill A has a second transaction with Manufacturer Z in round 2, tsA→Z
will increase from 2 to 5 and P(cA→Z) will grow to almost 74%.
The asocial system and the maximally social system are informative
archetypes for assessing the dissertation’s coordination theory. We are interested in
these extreme cases’ influence on coordination, and through coordination, on market
dynamics.
Coordination Implications
I executed simulations of these two extreme cases by forcing one set of
simulations’ (liking_factor, commitment_factor) universally to (2.0, 2.0) and another
set of simulations’ factors universally to (0.0, 0.0). The mechanisms of structural
reproduction in these two archetypal systems yield very different social structures and
interaction patterns. As per the telephone game discussion related to Equations 3.3-
3.5, this variation in social structural reproduction could create significant differences
in system-level knowledge coordination. I expected the asocial case to produce an
integrated, relatively coordinated market and the maximally social system’s rigid
interaction patterns to produce cliques with dissimilar knowledge.
94
Knowledge Similarity
In a system with several cliques, dense subgroup interaction creates distinct
knowledge clusters, each well-coordinated within itself but not aware of the system as
a whole. Each subgroup should have a relatively thorough understanding of the costs
faced by its own members. In a completely asocial system, agents’ relatively
promiscuous interaction should synchronize knowledge globally. But because this
process takes time, volatility, actor-level heterogeneity, path length, and differences in
subjective learning will all influence knowledge coordination.
Generally, actors in asocial systems should exhibit greater knowledge
similarity and system-level awareness, but the process of knowledge propagation may
occur slowly and it may introduce noise. Actors in highly social systems should
quickly become well-attuned to their partners, but remain relatively oblivious to the
broader system. Asocial systems will be relatively more aware of cost heterogeneity,
and therefore more aware of system-wide price dispersion, while actors in maximally
social systems will be less aware of system-wide price dispersion.
Simulating the market for steel wire largely corroborated these knowledge
hypotheses. All simulations were similarly initialized with totally ignorant actors in
systems with no pre-existing social structure. Beyond the focal social mechanisms,
the only differences in simulated systems are random noise attributable to differences
in learning and exogenous price volatility. Figure 8.1 presents the distribution of
95
round-44 Jensen-Shannon Divergences for 200 asocial simulations and 300 maximally
social simulations.48
Figure 8.1 suggests a slight difference between asocial and maximally social
systems. Simulations of maximally social systems appear to have slightly higher JSD
than simulations of completely asocial systems. In fact, using the normal
approximation to the two-tailed Wilxocon rank sum test, the maximally social and
asocial JSD distributions are different at the > 0.0001 level. Compared to agents in
asocial simulations, maximally social systems’ agents tend to have dissimilar
perceptions of the world. This is exactly what we expect, and suggests a micro
explanation of Granovetter’s (2005) hypothesized multiple equilibria. As we might
expect given the interdependent formalizations of interaction probabilities and tie
48 In the simulation, JSD is computed over every agent’s subjective beliefs about all of her potential alters’ threshold prices. Because the market is a bipartite graph, each mill’s knowledge only includes manufacturers’ threshold prices, and each manufacturer’s knowledge only includes mills’ threshold prices. So long as profit opportunities exist, mills’ beliefs should be different from manufacturers’. Consequently, unless profits have been driven to zero, “perfect information” would not require that JSD equal zero.
96
strength, this phenomenon grows stronger over time.49
Figure 8.2 presents JSD for the
same 500 simulations after 180 simulation rounds.
Comparing Figures 8.1 and 8.2 suggests time-varying coordination differences
between asocial and maximally social systems. Asocial systems exhibit lower JSD,
and the difference appears to grow over time. Chapter 3 introduced the idea that
markets are communication systems, loosely analogous to a telephone game, in which
interactions offer noisy signals about distant parts of the network. Pursuing that
metaphor, asocial systems behave as a loosely integrated network in which all agents
are playing the same telephone game. At the end of the game, whether their
knowledge is right or wrong, all agents have similar perceptions of the current state of
the world. Maximally social systems begin in such a state, but cliques quickly
emerge. These cliques make the market look like a collection of smaller telephone 49 In the maximally social simulations, tie strength increasingly grows in interaction and interaction increasingly grows in tie strength (second derivatives are greater than zero). Systems with more muted, but still non-zero, parameters do not exhibit the same structural convergence tendency. I did not execute enough simulations to find a parametric tipping point at which cliques inevitably emerge, but the absence of convergence in the (1.0, 1.0) case compared to convergence in the (2.0, 2.0) case suggests that such a threshold may exist.
97
games in which agents re-circulate their information without reference to the broader
system. Perhaps unsurprisingly, at least as far as knowledge similarity, asocial
systems seem to yield a state relatively more consistent with economics’ perfect
information.
Knowledge Dispersion
Figures 8.1 and 8.2 illustrate asocial and maximally social systems’ substantial
differences in actor-level knowledge similarity, but what about knowledge dispersion?
Chapter 4 illustrated the need for a two-dimensional coordination measure that
recognizes both the similarity in and dispersion across actors’ knowledge. For
example, if all actors in a system are identically ignorant, we might be reluctant to call
that system highly coordinated. Chapter 3 formalized system-level knowledge
dispersion based on the Shannon entropy of weighted system-level knowledge. For
the 500 simulations discussed above, Figure 8.2 presents the distribution of system-
level Shannon entropy in round 44.
98
In contrast to Figures 8.1 and 8.2, Figure 8.3 does not offer immediate visual
intuition regarding differences between asocial and maximally social simulated
systems. The entropy cdf in Figure 8.4 offers a bit more insight.
The asocial and maximally social cdfs seem very similar, but close inspection
of the tails reveals that the asocial cdf has a slightly narrower range. The normal
approximation to the two-tailed Wilcoxon rank sum test indicates no statistically
significant difference between maximally social and asocial systems’ average entropy,
but the normal approximation to the Siegel-Tukey test indicates a statistically
significant difference in variance at the 0.05 level. After 45 simulation rounds, asocial
and maximally social systems have similar entropy levels, but asocial systems exhibit
less variance. After 180 simulation rounds, as seen in Figure 8.5, the difference
becomes more pronounced.
99
Comparing Figures 8.4 and 8.5 reveals the microsociological mechanisms’
influence on system-level knowledge dispersion over time. By round 179, asocial
systems still exhibit slightly less variance than maximally social systems, but they also
exhibit lower average entropy. Maximally social systems have both greater
knowledge dispersion and greater variance in their levels of knowledge dispersion.50
Assessing Archetypal Knowledge
Other than the mechanisms governing structuration, these 500 simulations
shared identical parameters. From Figures 8.1-8.5, it appears that coordination
differences are emergent in the microsociological mechanisms governing social
structural reproduction. These mechanisms produce greater knowledge similarity and
greater knowledge concentration in asocial systems relative to maximally social
systems. Agents in asocial systems tend to agree about a relatively concentrated state
50 The normal approximation to the two-sided Wilcoxon is significant at the 0.002 level, and the Siegel-Tukey test of variance is significant at the 0.02 level.
100
of the world. It turns out that agents in maximally social simulated systems perceive
relatively low risk, but these agents’ perceptions of risk do not significantly overlap;
maximally social systems exhibit relatively high levels of uncertainty because agents
do not recognize the extent of their disagreement.
A Micro Theory of Structure and Coordination
In the context of Figure 3.6’s theoretical frame, this chapter demonstrated that
variation in the micro mechanisms of social structural reproduction can yield variation
in system-level knowledge coordination. But these same microsociological
mechanisms simultaneously yield significant social structural variation.51
Furthermore, Figure 3.6’s theoretical ambitions are significantly greater than
merely explaining coordination differences. The dissertation proposed knowledge
coordination as a latent mechanism to explain system behavior. Pursuing the
possibility of system-level outcome variation, Chapter 9 examines profit patterns in
the two archetypes.
Could
social structure, independent of the processes by which it emerges, fully explain the
coordination differences? Chapter 8 cannot answer that.
51 In the asocial simulations with 20 potential alters, agents are always 5% likely to interact with any potential alter, so cohesion remains constant. In the maximally social simulations, after 180 simulation rounds, agents choose to interact with their most preferred alter nearly 100% of the time. This leads to market fragmentation.
101
Chapter 9: Sometimes, Ignorance is Bliss
In Chapter 8, simulation revealed significant coordination differences between
asocial and maximally social systems. Asocial systems exhibited coordination
characteristics relatively more consistent with economics’ perfect information. But do
these coordination differences impact system-level behavior?
Assessing Archetypal Profits
Imperfect information is typically associated with disequilibrium and
inefficiency. But if markets are always in disequilibrium, is system performance
linearly tied to the magnitude of information’s imperfection? If so, based on Chapter
8’s comparison of asocial and maximally social systems’ knowledge coordination, we
might expect asocial simulated systems to outperform maximally social systems.
Figure 9.1 compares cumulative profit between simulation rounds zero and forty-four
for Chapter 8’s 200 asocial and 300 social simulations.
102
Despite their apparent information advantages, asocial systems summarized in
Figure 9.1 seem to do worse than their maximally social counterparts. Neither the
normal approximation to the two-tailed Wilcoxon nor the Siegel-Tukey suggests a
statistically significant difference, but the visual intuition raises some interesting
questions. Of course, Figure 9.1 only summarizes the first quarter of simulated time,
the period when the microsociological mechanisms are just beginning to affect
emergent structure and when asocial and maximally social systems are most similar.
Comparing Figure 8.1 to Figure 8.2, and Figure 8.4 to Figure 8.5, we know that these
simulated systems undergo significant coordination changes in the last three quarters
of simulated time. Figure 9.2 summarizes profit during the last three quarters of
simulated time.
The cumulative distribution functions in Figure 9.2 suggest that simulated
asocial systems perform poorly relative to maximally social systems. Both the two-
tailed Wilcoxon and the Siegel-Tukey test are significant at the 0.01 level; asocial
systems have different expected values and variances than maximally social systems.
103
Auditing the Information Origins of Foregone Profits
Why might systems with apparent information advantages perform relatively
poorly? In conjunction with Chapter 8, Figure 9.2 shows that well-coordinated
simulated systems, systems that better approximate economics’ perfect information,
under-perform fragmented, socially clustered markets characterized by widespread
uncertainty. In asocial simulated systems, agents widely agree on a relatively narrow
price range. In maximally social systems, agents are unknowingly ignorant. As
structuration produces cliques, agents grow oblivious to the universe of price
possibilities, instead repeatedly sampling from well-known alters’ knowledge, and
thereby recycling their own beliefs. Agent knowledge becomes relatively well-attuned
to reality as faced by a small group of alters.
The information weakness of maximally social systems becomes a subtle
strength when costs are heterogeneous, because constant profit-seeking leads to
excessive search. As agents execute successful search, learning assigns increasing
probability to more profitable prices. Agents’ offer prices inevitably overreach,
leading to a lost transaction. In a heterogeneous system characterized by maximally
social structuration processes, actors continually overreach, and then restart their
search process with their preferred alter(s). But agents in maximally social systems
restart their searches with relatively good information about the alters with whom they
are most likely to interact.
In contrast, agents in asocial systems are inundated with heterogeneous price
signals. Not only does profit maximization lead agents to ultimately make
104
unsuccessful offers, but asocial agents’ awareness of heterogeneous reality causes
them to recover more slowly.
Agents in asocial systems have to sort through reality’s noise, while agents in
maximally social systems are insulated from noisy reality. Maximally social systems
do better because their agents are embedded in fragmented clusters that render them
oblivious to the scope of the actual threshold price search space. Compared to perfect
information, agent ignorance ironically reduces foregone transactions because relative
ignorance reduces search range.52
For these simulations, an individual agent does not need to know about the
universe of alters’ threshold prices. Instead, the agent needs to know the threshold
price faced by the next alter with whom she will interact. Asocial agents are much
better prepared to answer the first question, but agents in the maximally social
simulation are better prepared to answer the second question.
A Micro Theory of System-Level Behavior
Chapter 8 showed that microsociological mechanisms of social structural
reproduction, either directly or indirectly through their influence on social structure,
affect system-level knowledge coordination as suggested in Figure 3.6. This chapter
showed that the same micro mechanisms yield variation in system-level behavior. But
knowledge coordination could be a spurious byproduct of social structure, and social
52 This might suggest that agents in asocial systems should maintain alter-specific knowledge. But as agent-level cost volatility increases, such a strategy should quickly fail. In these 500 simulations, based on the empirical data from Chapter 5, individual cost can change up to 10% each simulation round. If an agent only interacts with a given alter after several rounds, her outdated knowledge of that alter may be significantly worse than her knowledge of alters generally.
105
structure could directly influence system-level behavior. Right now, we have a theory
of system-level behavior emergent in processes of social structural reproduction. We
have only allowed the micro mechanisms to vary, in the form of the archetypes, but
these generate differences in both knowledge coordination and social structure.
Consequently, we cannot conclusively say that knowledge coordination is the latent
causal mechanism influencing system behavior. By altering agents’ strategy spaces,
the next chapter takes us closer to a full test of Figure 3.6’s theoretical frame.
107
Chapter 10: Satisficing and the Profit Maximization Irony
Chapter 8 found that asocial systems are characterized by consistent beliefs
across agents, while maximally social systems are characterized by dissimilar
knowledge and an implicitly higher degree of uncertainty. Chapter 9 showed that
profit maximization leads to low system-level performance, and this
disproportionately affected asocial systems, despite their apparent information
advantages.
Maybe the simulation’s implementation of profit maximization is to blame.
Equations 5.1 and 5.2 specify the model’s implementation of profit maximizing
action. In these argmax functions, each agent knows her costs exactly. So the only
possibility for error is in subjective knowledge, which the simulation implements
through learning. But Chapter 7 illustrated the simulation’s relative knowledge
accuracy. Agents have imperfect but reasonably good perceptions of alters’ threshold
prices. The inputs to argmax are not the problem; profit seeking, the conceptual
predicate for argmax, seems to be the issue.53
This chapter implements satisficing (Simon, 1955) as a strategic alternative to
profit maximizing.
54
53 This is consistent with the spirit of Axelrod’s (1984) observation that tit-for-tat dominates other strategies over time. Unlike Axelrod’s case, though, markets require that actors continually adjust to a dynamic environment.
In the simulations of Chapters 8 and 9, actors selected offer
prices strictly according to Equations 5.1 and 5.2. This chapter reports on an
otherwise identical set of simulations in which agents randomly choose between profit
maximizing and satisficing when initiating interaction. Agents choose these strategies
54 This is implemented in process_interaction.py, included in Appendix 2.
108
with 20% and 80% probability, respectively. When satisficing, if her most recent
offer was accepted and is still at least profit-neutral, an agent repeats her last offer
price. If the agent’s most recent offer was rejected, she reverts to profit maximizing.
Satisficing Profit
Simon (1955) proposed satisficing as an alternative to the infinite cognition
underlying economics’ perfect rationality. Satisificing was proposed as a feasible, but
implicitly suboptimal, model of human behavior. Thus far, this dissertation has tried
to stay close to the introduction’s summary of Stigler’s definition of perfect
competition. Satisficing is a step away from the perfect rationality embedded in
perfect competition, but as Figure 10.1 shows, introducing satisficing improved
system-level outcomes.
Figure 10.1 compares asocial and maximally social systems in both pure profit
maximization and mixed strategy (profit maximization = 20%, satisficing = 80%)
109
satisficing scenarios.55
Introducing satisficing slightly improves outcomes for
maximally social systems, but dramatically improves outcomes for asocial systems. In
Chapter 9’s profit maximization scenarios, maximally social systems’ outcomes
dominated asocial systems’. Satisficing improves both archetypal systems’ outcomes,
but asocial systems improve more. Importantly, when agents satisfice, asocial and
maximally social systems’ outcomes become roughly equivalent.
Knowledge under Satisficing
Figure 10.1 reveals satisficing’s substantial effect on system-level profit,
particularly for asocial systems. Part of this improvement is attributable to reduced
search. If that were the complete story, though, we might expect asocial and
maximally social systems to improve equally. Asocial systems’ relatively substantial
improvement suggests that something else must be happening. Figure 10.2
summarizes the Jensen-Shannon Divergence for asocial and maximally social systems
in both the profit maximizing and satisficing cases.
55 In addition to the 500 pure profit maximization simulations discussed in Chapters 8 and 9, Figure 10.1 summarizes results for 153 asocial, satisficing simulated systems and 172 maximally social, satisficing simulated systems.
110
Introducing satisficing increases JSD, and this increase is similar in both
asocial and maximally social simulated systems. So satisficing tends to increase
dissimilarity in actors’ knowledge regardless of processes of structural reproduction.
As agents’ knowledge grows dissimilar, Figure 10.3 suggests more complex effects on
knowledge dispersion.
111
Chapter 8 observed that profit maximing asocial systems exhibited lower
knowledge entropy than maximally social systems. Figure 10.3 shows that that
difference disappears when agents satisfice. Systems with satsificing, both asocial and
maximally social, exhibit entropy very similar to maximally social systems
characterized exclusively by profit maximizing.
In the pure profit maximization simulations, maximally social systems
unambiguously outperformed asocial systems, which exhibited less knowledge
dispersion and greater knowledge similarity. Introducing satisficing improves all
systems’ profits by reducing search, but introducing satisficing eliminates maximally
social systems’ profit advantage by increasing asocial systems’ knowledge dispersion
and decreasing knowledge similarity.
Maximally social systems do well when agents repeatedly interact. These
agents learn about threshold prices within their cliques, and consequently experience
low-cost search. But if intra-clique profit opportunities disappear, failure to search
beyond the boundaries of the clique means that these maximally social systems grow
stuck in profitless interaction. In contrast, agents in asocial systems engage in
indiscriminate interaction, and this entails relatively costly search. But these agents’
promiscuous search patterns yield a telephone game-like effect that generates noisy
but loosely similar knowledge throughout the system. When these agents interact with
new alters, they have some rudimentary price expectation. Under certain conditions, it
appears that this similarity of knowledge can compensate for the increase in search.
112
Isolating Knowledge Coordination as a Latent Mechanism
Chapter 8 found an association between variation in the microsociological
mechanisms governing social structural reproduction and variation in system-level
knowledge coordination. Chapter 9 showed that these microsociological mechanisms
can influence system-level outcomes. This is consistent with Figure 3.6’s theory of
system-level dynamics as a consequence of knowledge coordination during
structuration. But because structuration also yields social structure, neither Chapter 8
nor Chapter 9 could conclusively say that knowledge coordination was the latent
mechanism responsible for system-level outcome variation.
By introducing a new strategy – satisficing – the simulations in this chapter
eliminated the system-level outcome variation seen in Chapter 9 and modified the
knowledge coordination landscape. Yet social structure was unchanged. The asocial
system remained asocial, and the maximally social system still converged to nearly
exclusively dyadic interaction. This chapter observed variation in knowledge
coordination and system-level behavior, but no variation in social structure.
Introducing an expanded strategy space seems to have offered a logical lever,
cleaving social structure from the explanatory framework and preserving knowledge
coordination emergent in social structural reproduction. While this further supports
Figure 3.6’s theoretical system, and is wholly consistent with the dissertation’s theory,
expanding agents’ strategy space with satisficing offers another alternative hypothesis
– maybe coordination and system dynamics change in either strategy or structure.
Chapter 11 examines this possibility through a new archetype – moderately social
systems characterized by linear growth in tie strength and interaction probabilities.
113
Chapter 11: Exploring the Middle Ground
Chapter 10 found that satisficing mitigates asocial systems’ searching such that
asocial and maximally social systems can experience approximately equal outcomes.
Chapter 10’s use of extreme archetypes naturally raises questions about the
performance of hybrid systems, or systems in which structuration occurs, but in which
structuration does not necessarily force a limiting state of fragmented cliques.
From Uzzi’s (1996, 1997) discussions of over and under-embeddedness, we
might expect simulated systems with moderate structural emergence and structural
conditioning of interaction to outperform both asocial and maximally social systems.
Such systems might avoid asocial systems’ excessive search and provide an escape
valve for maximally social systems that get trapped in profitless cliques. On the other
hand, Uzzi’s performance curve was attributable to a tradeoff between embedded ties’
security and arm’s-length ties’ novel information. Social support has no role in this
dissertation’s simulations, and Chapter 9 showed that novel information can create
noise that encourages wasteful search. So how might a mixed strategy perform and
what might we learn from it?
Outcomes from Moderate Structuration
Chapters 8, 9, and 10 relied on simulations of extreme structuration archetypes.
Asocial systems’ parameters precluded both structural emergence and structural
influence on alter selection, while maximally social systems’ parameters cause rapid
clique formation and significant structural effects on alter selection. I executed 150
114
new simulations with more moderate structuration parameters.56
Figure 11.1 adds
these new results to Figure 10.1.
Oddly, these moderately social systems did nearly as poorly as the profit
maximizing asocial systems. Far from improving on the asocial and maximally social
satisficing cases, the moderately social simulated systems universally underperformed.
The JSD and entropy of the moderately social case reveals coordination’s significant
influence.
56 I set the liking and commitment factors both equal to 1.
115
Knowledge Coordination in Moderately Social Systems
In Figure 11.2, the JSD for the moderately social satisficing simulations is
nearly as low as the JSD for the asocial profit maximizing cases, and significantly
lower than both the asocial and maximally social satisficing cases. The mechanisms
of structural reproduction yield a pattern of knowledge propagation that produces
greater knowledge similarity than in the other archetypes. Figure 11.3 shows that
these moderately social systems also exhibit relatively high knowledge dispersion.
116
When agents engage in satisficing, the moderately social system exhibits less
entropy than either asocial or maximally social systems. From a knowledge
coordination perspective, systems of moderately social, satisficing agents look very
similar to systems of profit maximizing, asocial agents – agents tend to share similarly
narrows beliefs about their world. And these system types share similar outcomes.
Summarizing Coordination’s Role
Chapters 8, 9, and 10 incrementally tested coordination’s emergence during
social structural reproduction, coordination’s potential role in system-level behavior,
and the alternative explanation that social structure was the latent mechanism driving
both coordination and variation in system-level behavior. Introducing a third type of
social structural reproduction, this chapter shows that satisficing agents can yield
different coordination and different system-level outcomes. At least for the simple
example simulated here, combining Chapters 8 through 11 reveals that knowledge
coordination consistently changes in microsociological processes of social structural
117
reproduction, and that sytem-level performance varies at the same time. Variation in
agent strategy and social structure are insufficient to explain the changes in either
coordination or sytem-level outcomes. Consequently, the archetypal comparisons
show that knowledge coordination during structuration can influence market
outcomes.
119
Reflections and Extensions
Figure 3.6, reproduced below, specified a formal theory in which processes of
social structural reproduction, through their influence on latent knowledge
coordination, condition market behavior.
Chapters 8-11 simulated the following five cases, each with a different
parameterization of Figure 3.6’s micro elements.
Table S1
Case ID Figure 3.6 Element a ∂ts ∂P(c)
1 Maximize profit 0.0 0.0 2 Maximize profit 2.0 2.0 3 Satisfice 0.0 0.0 4 Satisfice 2.0 2.0 5 Satisfice 1.0 1.0
Figure 3.6: Coordination During Structuration
ajt
ujt ujt
St
cijt
,
kjt
At
𝑑𝑑𝑖𝑖𝑖𝑖 = �𝑎𝑎𝑗𝑗𝑖𝑖 ∗ 𝑃𝑃�𝑐𝑐𝑖𝑖𝑗𝑗𝑖𝑖 |𝑐𝑐𝑖𝑖∙𝑖𝑖�𝑛𝑛−1
𝑗𝑗=1
𝜕𝜕𝑃𝑃�𝑐𝑐𝑖𝑖𝑗𝑗𝑖𝑖 �𝜕𝜕𝑖𝑖𝑡𝑡𝑖𝑖→𝑗𝑗𝑖𝑖
≥ 0
𝜕𝜕𝑖𝑖𝑡𝑡𝑖𝑖→𝑗𝑗𝑖𝑖𝜕𝜕𝑃𝑃�𝑐𝑐𝑖𝑖𝑗𝑗𝑖𝑖 �
≥ 0
argmax(𝑢𝑢𝑖𝑖𝑖𝑖 |𝑘𝑘𝑖𝑖𝑖𝑖)
120
Indicating cases where cross-case variance existed (X) and did not exist (-),
Table S2 summarizes cross-case comparisons, identifying patterns of variation and
isolating coordination’s unique latent influence on system-level behavior.
Table S2
Case Comparisons
Figure 3.6 Elements A JSD Entropy S a ∂ts ∂P(c)
1 v. 2 X X X X - X X 1 v. 3 X X X - X - - 3 v. 4 - X - X - X X 3 v. 5 X X X X - X X 4 v. 5 X X X X - X X 1 v. 5 - - - X X X X
In all of the simulated cases, system-level profit – A – varied if and only if
both knowledge coordination elements – JSD and entropy – varied. Structural
changes without coordination changes, as in (3 v. 4) and (1 v. 5), did not trigger
system-level profit changes. This suggests that coordination, which varies in the
mechanisms of social structural reproduction and agent strategy, is a latent influence
on system-level outcomes.57
Informed by mid-level steel markets, the dissertation’s computational
implementation largely mimicked economics’ perfect competition. The simulated
product was completely asocial, status did not exist, there was no potential
57 While the observed causation supports the dissertation’s theoretical frame, the negative relationship between knowledge coordination and system profitability was puzzling. I expect this is an artifact of modeling a pure arbitrage market in which today’s actions have no long-term implications. If agents had to hold inventory, buy capital equipment, or otherwise commit themselves across time, greater knowledge coordination would likely prove valuable. As Chapter 9 discussed, in these pure arbitrage cases, an agent need only know what her next alter will do; the universe of alters does not matter. If long-term decisions matter, and if the mix of potential alters can change over time, heterogeneous, noisy information may be much more valuable.
121
opportunism for social relations to mitigate, and transaction costs were zero. This was
a test of social relations’ influence on markets strictly through knowledge propagation.
Like a telephone game, social structural reproduction conditions the path through
which actors share noisy information. This is fundamental to all markets characterized
by human interaction, and the dissertation’s observed causal relations should thus hold
across nearly all markets. If structuration affects otherwise asocial markets for asocial
products such as steel, we have a baseline theory to apply to the universe of more
socially nuanced markets and products.
This theoretical template of markets’ irreducibly social nature offers significant
flexibility. We could introduce agent mortality and birth, which could reveal
evolutionarily stable systems of complementary agents. We could revise the agents’
action to accommodate price negotiation. Replicating public indexes, we could
sample from simulated transactions and integrate this back into agent knowledge as a
public signal. Using the theory’s strategy and population size parameters, we could
compare strategic and structural determinants of organizational outcomes. To
recognize preferential pricing, we could incorporate tie strength into actor preferences.
Using these extensions, I hope to expand the application of the theory across
steel’s multi-stage supply chain. I expect this will identify variation in capital bubbles
and business cycles attributable to microsociological processes of social structural
reproduction. This dissertation offers a microsocioogical theory of markets. Through
such extensions, the dissertation’s theory may offer a microsociological
macroeconomics.
122
Appendix 1: Simulation Data Structure
This appendix discuses the simulation’s processing, and specifies the data
structure used in the simulation. This accompanies Chapter 6’s parameterization and
Appendix 2’s code as an accessible bridge to the simulation’s architecture.
The simulation occurs in three high-level steps:
• Step 1: Initialization
• Step 2: Processing Loop
• Step 3: Output Logging
Step 1 randomly initializes an environment in which to execute a simulation. Step
2 executes the actual simulation processing, including modeling dyadic interaction,
structural change, price dynamics, and summary computations. Step 3 writes each
simulation’s output to a database for efficient storage and analysis. This section
summarizes each step’s underlying architecture.
Simulation Initialization
Initialization consists of three sub-steps:
• Step 1: Initialization
o Step 1.1: Initialize System-Level Parameters
o Step 1.2: Initialize Actors
Step 1.2.1: Initialize Social Structure
123
Step 1.2.2: Initialize Actor Interactions
Step 1.2.3: Initialize Actor Prices
Step 1.2.4: Initialize Actor Knowledge
o Step 1.3: Initialize Interactions
Step 1.1 randomly initializes global variables used elsewhere in the simulation.
These ensure system-level variation in critical independent variables –
microsociological mechanisms governing social structural reproduction – and control
variables selected to accommodate existing industrial organization theories tying
market dynamics to market size and volatility. Table A1.1 summarizes the variables
generated during Step 1.1:
Table A1.1: Global Variables
Position Name Description Value Type
N/A num_mills Number of wire
mills in the simulated market
20 Int
N/A num_processors Number of wire processors in the
simulation market 20 Int
N/A sim_time Simulation duration, in
interaction rounds 180 Int
N/A avg_liking_factor The system-level average of actor liking factors, lfi
~Unif(0.5, 1.5) Real
N/A avg_commit_factor
The system-level average of actor
commitment factors, cfi
~Unif(0.5, 1.5) Real
N/A initial_bundle_price Round -1 bundle_price $0.20 Real
N/A initial_staple_price Round -1 column_price $0.50 Real
124
Table A1.1: Global Variables Position Name Description Value Type
N/A initial_proc_mfg_cost
Round -1 processor
manufacturing cost
$0.10 Real
N/A initial_mill_mfg_cost Round -1 mill manufacturing
cost $0.10 Real
N/A bundle_price_range
The maximum percentage by which bundle
prices can rise or fall in a single
simulation round
~Unif(0.0, 0.10) Real
N/A staple_price_range
The maximum percentage by which staple
prices can rise or fall in a single
simulation round
~Unif(0.0, 0.10) Real
N/A proc_mfg_cost_range
Maximum percentage by
which individual processor’s
manufacturing cost can rise or fall in a single
round
~Unif(0.0, 0.10) Real
N/A mill_mfg_cost_range
Maximum percentage by
which individual mill’s
manufacturing cost can rise or fall in a single
round
~Unif(0.0, 0.10) Real
N/A sim_length
Total number of rounds that the
simulation should execute
180 Int
125
Step 1.2 uses the global variables from Step 1.1 to initialize a set of num_mills
plus num_processors agents in a data structure “Actors.” In Actors, the simulation
represents each agent as an element according to the data structure summarized in
Table A1.2. 58
Table A1.2: Actors
Position Name Description Value Type
0 actor_id
A unique numeric ID for each actor corresponding to position in Actors
[0, num_mills + num_processors] Int
1 actor_type A flag indicator if
an actor is a mill or a processor
“mill” or “processor” Str
2 num_interactions
Total number of interactions in
which the actor has engaged
0 Int
3 num_transactions
Total number of transactions in which actor has
participated
0 Int
4 Actor_interactions A list of actor
interactions; empty at initialization
List
5 Actor_ties An array with current tie data List
6 initiation_rate
Probability that an actor seeks
interaction in any given simulation
round
1 Real
7 liking_factor
A parameter that determines the magnitude of
Parameter 1, actor’s change in tie
strength given interaction
~Unif(avg_liking_factor- 0.5,
avg_liking_factor + 0.5)
Real
58 For all data structure tables, italicized field descriptions indicate key fields.
126
Table A1.2: Actors Position Name Description Value Type
8 commitment_factor
A parameter that determines the magnitude of
Parameter 2, actor’s change in interaction
probability given tie strength
~Unif(avg_commit_factor- 0.5,
avg_commit_factor + 0.5)
Real
9 Actor_prices An array with actor-specific price data See Below List
10 time_weight
A value that governs each
actor’s knowledge’s sensitivity to time
0.5 Real
11 integration_weight
A value weighting the integration of
the three knowledge posteriors
0.5 Real
12 Actor_strategies An array detailing the agent’s use of
strategies List
13 Actor_learning
An array detailing the frequencies with which an actor uses different learning
functions
List
14 Actor_knowledge
An array that stores an actor’s
knowledge at each simulation time
List
Step 1.2.1 initializes social structure as a list of ties for each actor – Actor_ties.
For each potential alter, Actor_ties contains a list of tie attributes as summarized in
Table A1.3:
Table A1.3: Actor_ties
Position Name Description Value Type
0 alter_id Joins to Actors[actor_id] for each potential alter Int
127
Table A1.3: Actor_ties Position Name Description Value Type
1 hist_interactions Number of interactions
between actor and alter at time t
Int
2 hist_transactions Number of transactions between actor and alter
through time t Int
3 inter_possible
Binary value, discussed below as mij, indicating whether interaction is contextually possible
0 or 1 Int
4 tie_str Weighted strength of
directed tie from actor to alter
See Below Real
5 interaction_prob
Probability that actor seeks interaction with alter, conditioned on actor
seeking interaction with someone
See Below Real
Step 1.2.2 initializes interaction data for each actor – Actor_interactions in
Table A1.2. Actor_interactions maintains a list of interactions in which the actor has
participated and a flag indicating whether or not the actor initiated the interaction. At
initialization, no interactions have occurred, so Actor_interactions is an empty list.
Table A1.4 specifies the data structure for Actor_interactions:
Table A1.4: Actor_interactions
Position Name Description Value Type
0 interaction_id A unique ID that joins to the Interactions data structure Int
1 initiated
A field indicating whether the actor initiated this
interaction, or whether the actor was approached by
alter
Int
128
Step 1.2.3 initializes a data structure containing time-specific price data for
each actor.
Table A1.5: Actor_prices Position Name Description Value Type
0 sim_time Unique ID indicating the
sim_time at which the price data were relevant
sim_time Int
1 bundle_cost The cost an individual mill faces when purchasing raw
material See Below Real
2 staple_price The price an individual processor receives when selling converted wire
See Below Real
3 manufacturing_cost
The cost that an individual mill incurs to convert bundles
to wire, or the cost that an individual processor pays to
convert wire to staples
See Below Real
Step 1.2.4 creates a data structure to manage each actor’s knowledge.
Table A1.6: Actor_knowledge Position Name Description Value Type
0 max_observation Maximum observed price
observation (either offered or accepted)
Real
1 min_value Minimum price that the actor thinks possible 0 Real
2 max_value Maximum price that the actor thinks possible Real
3 Time_knowledge List of Actor_knowledge keyed by simulation round List
4 Knowledge_components List of lists with each of the knowledge elements List
5 obs_rejects Time-weighted total number of observed rejected offers 0 Real
6 recent_obs_rejects Number of rejections
observed in the immediately previous round
0 Int
7 reject_weight Weight attributed to P(offer reject) posterior 0 Real
129
Table A1.6: Actor_knowledge Position Name Description Value Type
8 obs_accepts Time-weighted total number of observed accepted offers 0 Real
9 recent_obs_accepts Number of accepts observed in the immediately previous
round 0 Int
10 accept_weight Weight attributed to P(offer
accept) posterior 0 Real
11 obs_offers Time-weighted total number of observed offers 0 Real
12 recent_obs_offers Number of offers observed in
the immediately previous round
0 Int
13 offer_weight Weight attributed to P(offer) posterior 0 Real
14 prior_knowledge Knowledge_components at time t-1 List
15 hist_entropy Time indexed list of actor’s knowledge entropy List
Within Actor_knowledge, Knowledge_components maintains a set of
probability distributions that are blended to construct an integrated representation of
knowledge. Table A1.7 identifies Knowledge_components’ data structure.
Table A1.7: Knowledge_components
Position Name Description Value Type
0 price Price at which knowledge probabilities apply Real
1 pmf_offer Probability mass function
associated with actor’s knowledge of alters’ offers
Real
2 cdf_offer Cumulative distribution function associated with
pmf_offer Real
3 pmf_accept
Probability mass function associated with actor’s
knowledge of alters’ offer acceptance
Real
130
Table A1.7: Knowledge_components Position Name Description Value Type
4 cdf_accept Cumulative distribution function associated with
pmf_accept Real
5 pmf_reject
Probability mass function associated with actor’s
knowledge of alters’ offer rejection
Real
6 cdf_reject Cumulative distribution function associated with
pmf_reject Real
7 agg_pmf Probability mass function integrating pmf_offer and
action_pmf Real
8 agg_cdf Cumulative distribution function associated with
agg_pmf Real
9 action_pmf Probability mass function
integrating pmf_accept and pmf_reject
Real
10 action_cdf Cumulative distribution function associated with
action_pmf Real
Step 1.3 initializes an empty data structure, Interactions, to store interaction
data during the simulation. This data structure joins to Actor_interactions via
interaction_id.
Table A1.8: Interactions
Position Name Description Value Type
0 interaction_id Unique ID for each actor/alter interaction
[0, 1, …, #number of interactions
]
Int
1 sim_time The simulation round in which the interaction occurred Int
2 actor_id actor_id of agent that initiates interaction Int
3 alter_id actor_id of responding actor Int 4 actor_offer Offered wire price Real
131
Table A1.8: Interactions Position Name Description Value Type
5 alter_accept Flag indicating whether alter accepted or rejected offer
1= TRUE, 0 = FALSE Int
6 actor_entropy
Marginal entropy associated with actor’s knowledge after
updating for just this interaction
Real
7 alter_entropy
Marginal entropy associated with alter’s knowledge after
updating for just this interaction
Real
8 actor_JSD
JSD comparing prior knowledge with knowledge
updating for just this interaction
Real
9 alter_JSD
JSD comparing prior knowledge with knowledge
updating for just this interaction
Real
Simulation Processing Loop
After initialization, the simulation executes successive rounds, corresponding
to time in the model. In each round, based on initiation_rate, each agent chooses
whether or not to initiate interaction. Each agent that initiates chooses an alter and
chooses an offer price. Alters then respond by accepting or rejecting. After all
interactions have been processed, the simulation uses learning to update each actor’s
knowledge. Finally, the simulation randomly changes the exogenous price
components faced by each actor.
132
Output Logging
At the end of the simulation, once the simulation has run through sim_time
number of rounds, simulated data are stored in a database for subsequent analysis.59
59 Agent’s time-specific knowledge data is not stored. The knowledge dataset gets too large, so only the most recent round’s data is stored. For debugging purposes, the code allows storing knowledge data. For high volume execution, though, this is not feasible.
133
Appendix 2: Simulation Code
This appendix briefly introduces the actual simulation code, and contains
copies of all programs used in the simulation.
Program Overview
The simulation is implemented via the following Python programs:
• multiproc_sim.py
• market_sim.py
• sim_params.py
• create_actors.py
• compute_actor_knowledge.py
• weighted_sample.py
• process_interaction.py
• JSD.py
The simulation is CPU-constrained, so the highest level program,
multiproc_sim.py, initiates a number of Python threads equal to the number of virtual
cores on the host machine. Each of these threads call an instance of market_sim.py,
which hosts the master simulation loop. market_sim.py calls sim_params.py to import
various variables, including the target number of simulations (sim_count) and the
length of each simulation (sim_length). market_sim.py uses parameters from
sim_params.py to execute create_actors.py, which initiates agents for each simulation.
134
For each simulation, market_sim.py iterates through sim_length number of simulation
rounds. During each round, market_sim.py executes agent learning through
compute_actor_knowledge, and uses weighted_sample.py to select alters for the
dyadic interaction processed in process_interaction.py. At the end of each simulation
round, market_sim.py calls JSD.py to compute system-level Jensen-Shannon
Divergence. After all sim_length rounds have finished, market_sim.py writes
simulation results to database. If sim_count has not yet been achieved, market_sim.py
then initiates the next simulation.
Program Code
The following sections correspond to the actual Python programs, including all
comments and formatting. Unlike many programming languages, spacing is an
element of Python syntax. When converting the programs to standard page format, I
have tried to preserve proper Python spacing. Consequently, the programs should be
executable if copied directly from this document.
135
multiproc_sim.py ######################################################## #NAME: multiproc_sim.py #CREATED: 3/23/2013 #MODIFIED: 3/23/2013 # #DESCRIPTION: Testing revealed that market_sim.py is CPU constrained. Using # multiprocessing allows a single machine to simultaneously process across multiple # cores, effectively increasing simulation speed by (#cores)-fold. # #VERSION HISTORY: # 20130323 -- Initial version # #NOTES: # 1/ ######################################################## import multiprocessing from market_sim import market_sim #import os, sys, time num_cores = multiprocessing.cpu_count() if __name__ == '__main__': jobs = [] for i in range(num_cores): p = multiprocessing.Process(target=market_sim, args=(i,)) jobs.append(p) p.start()
136
market_sim.py ######################################################## #NAME: market_sim.py #CREATED: 9/1/2010 #MODIFIED: 3/23/2013 # #DESCRIPTION: Python program executes a simulation of a bilateral # commodity market. This instantiates components of the coordination theory from # Chandler Johnson's dissertation, specifically simulating time-varying individual # knowledge emergent in structuration in an uncertain context. The output of the # simulation is appended to a text file. The output from many such simulations, # randomly initiated and thus providing variation, informs subsequent theory-building # for subsequent empirical testing. The code is written to correspond with the # dissertation's functional specification. For example, Step 1 in the code corresponds # to Step 1 in the functional specification. # ######################################################## #STEP 0: Import python modules, functions, and global variables ######################################################## import random #module used for random number generation import pyodbc #imports module used to connect to database import numpy from scipy.stats.distributions import entropy from weighted_sample import weighted_sample from process_interaction import process_interaction from create_actors import create_actors from compute_actor_knowledge import compute_actor_knowledge from JSD import JSD import sim_params sim_count = sim_params.sim_count min_mills = sim_params.min_mills max_mills = sim_params.max_mills min_processors = sim_params.min_processors max_processors = sim_params.max_processors sim_length = sim_params.sim_length ######################################################## #SIM LOOP #DESC: This is a loop that iterates through sim_count as specified in params. ########################################################
137
def market_sim(instance_num = 0): sim_id = instance_num*sim_count while sim_id < sim_count*(instance_num + 1): print 'instance num is:', instance_num print ' sim ID is:' print sim_id interaction_cntr = 0 ######################################################## #STEP 1: Import sim-specific parameters #DESC: This corresponds to Step 1 in the functional specification ######################################################## from sim_params import avg_liking_factor from sim_params import avg_commit_factor from sim_params import initial_bundle_price from sim_params import initial_staple_price from sim_params import initial_proc_mfg_cost from sim_params import initial_mill_mfg_cost from sim_params import bundle_price_range from sim_params import staple_price_range from sim_params import proc_mfg_cost_range from sim_params import mill_mfg_cost_range from sim_params import num_mills from sim_params import num_processors from sim_params import initiation_rate from sim_params import time_weight_range from sim_params import integration_weight_range #Create stored ties data structure. The sim will use this list to store directed #tie strengths by actor by simulation time. Corresponds to social structure. Stored_ties = [] #Create data structure for JSD by round. JSD_round = [] ######################################################## #STEP 2-4: CREATE ACTORS DATA #DESC: This calls a program that initializes actors
138
# to generate the list, Actors, in Step 4. ######################################################## Actors = create_actors([ num_mills, num_processors, initiation_rate, avg_liking_factor, avg_commit_factor, time_weight_range, integration_weight_range, initial_staple_price, staple_price_range, initial_proc_mfg_cost, proc_mfg_cost_range, initial_bundle_price, bundle_price_range, initial_mill_mfg_cost, mill_mfg_cost_range ]) ######################################################## #STEP 5: CREATE INTERACTIONS DATA # This holds historical interaction data. ######################################################## Interactions = [] ######################################################## #STEP 6: Simulation Round #DESC: This is the simulation's main loop. ######################################################## sim_round = 0 #this to indicate position in sim_length alter_ID = -1 #this to indicate alter in interaction, initialized to an unobserved value #################################### #STEP 7: Sim Complete? #DESC: The main simulation loop sits in this section. #################################### while sim_round < sim_length: print 'sim time is:', sim_round actor_cntr = 0
139
#Update actor-level data for x in Actors: #print ' actor id is:', [x][0][0] #################################### #STEP S0: Update Structure #DESC: update tie strengths based on the cumulative interactions through this # sim round. update interaction probabilities within Ties within Actors. store # current tie data. note the division issue if tie growth rate = 0 and number of # interactions = 0. #################################### total_ties = 0.0 #compute tie_str for y in [x][0][5]: [y][0][4] = ([y][0][2]**[x][0][7]) + [y][0][3] total_ties = total_ties + [y][0][4]**[x][0][8] #compute interaction_prob for y in [x][0][5]: [y][0][5] = ([y][0][4]**[x][0][8])/total_ties Stored_ties.append([[x][0][0], sim_round, [y][0][0], [y][0][1], [y][0][2], [y][0][4], [y][0][5]]) ################################### #STEP L9: Update Knowledge #DESC: Pass the active actor record, the current sim round, and interactions data # to a stand-alone function to update actor's knowledge based on recent # observations. ################################### x = compute_actor_knowledge([x, sim_round, Interactions, "round_update"]) #################################### #STEP S2: Interaction Loop Through Actors #################################### while actor_cntr < num_mills + num_processors: #################################### #STEP S3: Actor Initiates? #################################### if Actors[actor_cntr][6] >= random.random():
140
#################################### #STEP S5: Find Alter #################################### #first create list for use in weighted_sample function partner_selection = [] for x in Actors[actor_cntr][5]: partner_selection.append((x[5], x[0])) #use partner_selection list as input for weighted_sample function alter_ID = [i for i in weighted_sample(partner_selection, 1)][0] #################################### #STEPS S6-S9 and S10--S13: PROCESS INTERACTION #DESC: Use a function, process_interaction, to execute Steps S6-S13 #################################### interaction_outcome = process_interaction([sim_round, actor_cntr, alter_ID, Actors, Interactions, interaction_cntr, num_processors]) Interactions = interaction_outcome[0] Actors = interaction_outcome[1] interaction_cntr += 1 #increment counter to next actor actor_cntr = actor_cntr + 1 #Compute JSD prob_dists = [] for x in Actors: y = [row[7] for row in [x][0][14][0][4]] prob_dists.append(y) weights = [(1.0)/(num_mills + num_processors)]*(num_mills + num_processors) updated_JSD = JSD(prob_dists, weights) JSD_round.append([sim_round, updated_JSD[0], updated_JSD[1]]) #increment to next round sim_round = sim_round + 1 ################################### #STEP 8: Update Prices ################################### for x in Actors: if [x][0][1] == 'processor':
141
[x][0][9].append([ sim_round, -1, [x][0][9][sim_round-1][2]*random.uniform(1-staple_price_range, 1+staple_price_range), [x][0][9][sim_round-1][3]*random.uniform(1-proc_mfg_cost_range, 1+proc_mfg_cost_range) ]) else: [x][0][9].append([ sim_round, [x][0][9][sim_round-1][1]*random.uniform(1-bundle_price_range, 1+bundle_price_range), -1, [x][0][9][sim_round-1][3]*random.uniform(1-mill_mfg_cost_range, 1+mill_mfg_cost_range) ]) ######################################################## #STEP 9: Log Results ######################################################## #Specify connection cnxn = pyodbc.connect("DSN=wire_market_sims") c = cnxn.cursor() #Specify tables in which to store output c.execute ('''if not exists (select 1 from INFORMATION_SCHEMA.TABLES where TABLE_NAME ='sim_log') create table sim_log (sim_id int, sim_length int, num_processors int, num_mills int, avg_liking_factor real, avg_commit_factor real, staple_price_range real, bundle_price_range real, proc_mfg_cost_range real, mill_mfg_cost_range real)''') c.execute ('''if not exists (select 1 from INFORMATION_SCHEMA.TABLES where TABLE_NAME ='actors') create table actors (sim_id int, actor_id int, actor_type text, initiation_rate real, liking_factor real, commitment_factor real, time_weight real, integration_weight real)''') c.execute ('''if not exists (select 1 from INFORMATION_SCHEMA.TABLES
142
where TABLE_NAME ='interactions') create table interactions (sim_id int, interaction_id int, sim_round int, actor_id int, alter_id int, actor_offer real, alter_accept int, actor_marg_entropy real, alter_marg_entropy real, actor_JSD real, alter_JSD real)''') c.execute ('''if not exists (select 1 from INFORMATION_SCHEMA.TABLES where TABLE_NAME ='ties') create table ties (sim_id int, actor_id int, alter_id int, sim_round int, tie_strength real, interaction_prob real)''') c.execute ('''if not exists (select 1 from INFORMATION_SCHEMA.TABLES where TABLE_NAME ='prices') create table prices (sim_id int, actor_id int, sim_round int, bundle_cost real, staple_price real, mfg_cost real)''') c.execute ('''if not exists (select 1 from INFORMATION_SCHEMA.TABLES where TABLE_NAME ='entropy') create table entropy (sim_id int, actor_id int, sim_round int, entropy real)''') c.execute ('''if not exists (select 1 from INFORMATION_SCHEMA.TABLES where TABLE_NAME ='knowledge') create table knowledge (sim_id int, actor_id int, sim_round int, price real, pmf_offer real, cdf_offer real, pmf_accept real, cdf_accept real, pmf_reject real, cdf_reject real, pmf_action real, cdf_action real, pmf real, cdf real)''') c.execute ('''if not exists (select 1 from INFORMATION_SCHEMA.TABLES where TABLE_NAME ='coordination') create table coordination (sim_id int, sim_round int, agg_entropy real, JSD real)''') #Store global data cur_values = (sim_id, sim_length, num_processors, num_mills, avg_liking_factor, avg_commit_factor, staple_price_range, bundle_price_range, proc_mfg_cost_range, mill_mfg_cost_range) c.execute('INSERT INTO sim_log VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', cur_values) #Store actor-level data for x in Actors: cur_values = (sim_id, [x][0][0], [x][0][1], [x][0][6], [x][0][7], [x][0][8], [x][0][10], [x][0][11]) c.execute('INSERT INTO actors VALUES (?, ?, ?, ?, ?, ?, ?, ?)', cur_values)
143
#Store interaction data for x in Interactions: cur_values = (sim_id, [x][0][0], [x][0][1], [x][0][2], [x][0][3], [x][0][4], [x][0][5], [x][0][6], [x][0][7], [x][0][8], [x][0][9]) #print cur_values c.execute('INSERT INTO interactions VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', cur_values) #Store tie data for x in Stored_ties: cur_values = (sim_id, [x][0][0], [x][0][2], [x][0][1], [x][0][5], [x][0][6]) c.execute('INSERT INTO ties VALUES (?, ?, ?, ?, ?, ?)', cur_values) #Store price data for x in Actors: for y in [x][0][9]: cur_values = (sim_id, [x][0][0], [y][0][0], [y][0][1], [y][0][2], [y][0][3]) c.execute('INSERT INTO prices VALUES (?, ?, ?, ?, ?, ?)', cur_values) #Store entropy data for x in Actors: for y in [x][0][14][0][15]: cur_values = (sim_id, [x][0][0], [y][0][0], [y][0][1]) c.execute('INSERT INTO entropy VALUES (?, ?, ?, ?)', cur_values) #Store knowledge data for x in Actors: for index, y in enumerate([x][0][14][0][3]): cur_values = (sim_id, [x][0][0], [y][0][0], [y][0][1], [y][0][2], [y][0][3], [y][0][4], [y][0][5], [y][0][6], [y][0][7], [y][0][10], [y][0][11], [y][0][8], [y][0][9]) c.execute('INSERT INTO knowledge VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', cur_values) #Store coordination data for x in JSD_round: cur_values = (sim_id, [x][0][0], [x][0][1], [x][0][2]) c.execute('INSERT INTO coordination VALUES (?, ?, ?, ?)', cur_values) c.execute ('''if not exists (select 1 from INFORMATION_SCHEMA.TABLES where TABLE_NAME ='coordination') create table coordination (sim_id int, sim_round int, agg_entropy real, JSD real)''')
144
#End cnxn.commit() #increment sim_id sim_id = sim_id +1 reload (sim_params) print 'all done' return
145
sim_params.py ############################################## #Name: sim_params.py # #Description: This is a control file that specifies parameters and modules used in wire_mkt_sim. # #Created by: JCJ #Created: 20121110 # #Modified by: JCJ #Modified: 20121110 # ############################################## ############################################## #STEP 0: Import necessary python modules ############################################## import random import math ############################################## #STEP 1: Create parameters #Desc: These will be called individually as other programs require them ############################################### sim_count = 1000 #number of full simulations process should execute min_mills = 10 max_mills = 30 min_processors = 10 max_processors = 30 sim_length = 180 avg_liking_factor = random.uniform(1- 0.5, 1 + 0.5) avg_commit_factor = random.uniform(1- 0.5, 1 + 0.5) initial_bundle_price = .20 initial_proc_mfg_cost = 0.10 initial_mill_mfg_cost = 0.10 bundle_price_range = random.uniform(0.00, 0.02) staple_price_range = random.uniform(0.00, 0.02) proc_mfg_cost_range = random.uniform(0.00, 0.02) mill_mfg_cost_range = random.uniform(0.00, 0.02) num_mills = random.randint(min_mills, max_mills) num_processors = random.randint(min_processors, max_processors) initiation_rate = 1.0
146
time_weight_range = 0.6 integration_weight_range = 2.0 ############################################## #STEP 2: Define short custom functions ############################################### #this to compute the Shannon entropy of a probability distribution def entropy(prob_dist, base=math.e): return -sum([p*math.log(p, base) for p in prob_dist if p != 0])
147
create_actors.py ######################################################## #NAME: create_actors.py #CREATED: 11/10/2012 #MODIFIED: # #DESCRIPTION: This function creates initial actor profiles. # ######################################################## ######################################################## #STEP 0: Import python modules, custom functions, and global variables ######################################################## import random ######################################################## #STEP 1: Now create actors ######################################################## def create_actors(items): #define terms based on input num_mills = items[0] num_processors = items[1] initiation_rate = items[2] avg_liking_factor = items[3] avg_commit_factor = items[4] time_weight_range = items[5] integration_weight_range = items[6] initial_staple_price = items[7] staple_price_range = items[8] initial_proc_mfg_cost = items[9] proc_mfg_cost_range = items[10] initial_bundle_price = items[11] bundle_price_range = items[12] initial_mill_mfg_cost = items[13] mill_mfg_cost_range = items[14] actor_cntr = 0 Actors = [] #Populate Actors with processors' data while actor_cntr < num_processors:
148
x = 0 #create instances for every processor Actors.append([ actor_cntr, #actor_ID "processor", #actor_type 0, #num_interactions 0, #num_transactions [], #Actor_interactions [], #Actor_ties initiation_rate, #initiation rate random.uniform(avg_liking_factor - 0.5, avg_liking_factor + 0.5), #liking_factor random.uniform(avg_commit_factor - 0.5, avg_commit_factor + 0.5), #commit_factor [], #Actor_prices 0.5 + time_weight_range*random.uniform(-0.5, 0.5), #time_weight 1.0 + integration_weight_range*random.uniform(-0.5, 0.5), #integration_weight [], #Actor_strategies [], #Actor_learning [] #Actor_knowledge ]) #create a list of ties to every mill -- Actors.Actor_ties while x < num_mills: Actors[actor_cntr][5].append([ x + num_processors, #alter_ID for each mill 0.0, #hist_interactions between actor_id and alter_id 0.0, #hist_transactions along dyad 1.0, #inter_possible 1.0, #tie_str 1.0/num_mills #interaction_prob ]) x = x + 1 #initiate Actors.Actor_prices Actors[actor_cntr][9].append([ 0, #sim_time -1, #bundle_cost initial_staple_price*random.uniform(1-staple_price_range, 1+staple_price_range), #staple_price initial_proc_mfg_cost*random.uniform(1-proc_mfg_cost_range, 1+proc_mfg_cost_range) #manufacturing_cost ]) #specify this actor's use of strategies
149
Actors[actor_cntr][12].append([ 1.0, #maximize expected profit 0.0, #random 0.0, #volume maximization 0.0, #reciprocate 0.0, #repeat 0.0 #average ]) #specify this actor's use of learning functions Actors[actor_cntr][13].append([ 1.0, #nonparametric 0.0 #all-in ]) #specify initial Actor_knowledge values Actors[actor_cntr][14].append([ 0.0, #max_observation 0.0, #min_value (not actually used right now) 0, #max_value [], #Time_knowledge, ultimately defined over the range: [min_value, max_value] [], #Knowledge_components 0.0, #obs_rejects 0.0, #recent_obs_rejects 0.0, #reject_weight 0.0, #obs_accepts 0.0, #recent_obs_accepts 0.0, #accept_weight 0.0, #obs_offers 0.0, #reject_obs_offers 0.0, #offer_weight [], #Prior_knowledge [] #Hist_entropy ]) #increment actor_cntr to create record for next processor actor_cntr = actor_cntr + 1 #Populate Actors with mills' data while actor_cntr < num_processors + num_mills: x = 0 #create instances for every mill Actors.append([
150
actor_cntr, "mill", 0, 0, [], [], initiation_rate, random.uniform(avg_liking_factor - 0.5, avg_liking_factor + 0.5), random.uniform(avg_commit_factor - 0.5, avg_commit_factor + 0.5), [], 0.5 + time_weight_range*random.uniform(-0.5, 0.5), 1.0 + integration_weight_range*random.uniform(-0.5, 0.5), [], [], [] ]) #for every mill create a list of ties to every processor -- Actors.Actor_ties while x < num_processors: Actors[actor_cntr][5].append([ x, 0.0, 0.0, 1.0, 1.0, 1.0/num_processors ]) x = x + 1 #initiate Actors.Actor_prices Actors[actor_cntr][9].append([ 0, initial_bundle_price*random.uniform(1-bundle_price_range, 1+bundle_price_range), -1, initial_mill_mfg_cost*random.uniform(1-mill_mfg_cost_range, 1+mill_mfg_cost_range) ]) #specify this actor's use of strategies Actors[actor_cntr][12].append([ 1.0, #maximize expected profit 0.0, #random 0.0, #volume maximization 0.0, #reciprocate
151
0.0, #repeat 0.0 #average ]) #specify this actor's use of learning functions Actors[actor_cntr][13].append([ 1.0, 0.0 ]) #specify initial Actor_knowledge values Actors[actor_cntr][14].append([ 0.00, 0.00, 0.00, [], [], 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0, [], [] ]) #increment actor counter to next mill actor_cntr = actor_cntr + 1 #return actor data to master loop return (Actors)
152
compute_actor_knowledge.py ######################################################## #NAME: compute_actor_knowledge.py #CREATED: 5/31/2011 #MODIFIED: 3/11/2013 # #DESCRIPTION: Module uses prior observations to compute: # 1/ an actor's time t knowledge, knowledge entropy, and JSD of prior vs. current # knowledge OR # 2/ marginal knowlede after observing 1 interaction, associated entropy, and # associated JSD # ######################################################## ################################ #STEP 0: Import Python modules ################################ import itertools import numpy import math import copy #from scipy.stats.distributions import entropy from sim_params import entropy from JSD import JSD ################################### #STEP 1: Compute knowledge ################################## def compute_actor_knowledge(items, actor_offer = 0.00): #define input data elements actor = items[0] sim_round = items[1] Interactions = items[2] mode = items[3] #revert recent obs to 0 [actor][0][14][0][6] = 0 [actor][0][14][0][9] = 0 [actor][0][14][0][12] = 0 #update max values old_max_value = round([actor][0][14][0][2], 2)
153
if [actor][0][1] == 'processor': [actor][0][14][0][2]=round(max([actor][0][14][0][2], 2*[actor][0][14][0][0], 1.5*([actor][0][9][sim_round][2]-[actor][0][9][sim_round][3])),2) else: [actor][0][14][0][2]=round(max([actor][0][14][0][2], 2*[actor][0][14][0][0], 1.5*([actor][0][9][sim_round][1]+[actor][0][9][sim_round][3])),2) #update Knowledge_components based on current mins and maxs. Proceed differently #if the actor has no observations, as in round 0. rnge = int(([actor][0][14][0][2] - [actor][0][14][0][1])*100)+1 #Specify Knowledge_components where actor has no observations if [actor][0][2] == 0: h = 0.00 while round(h, 2) <= round([actor][0][14][0][2], 2): #note the odd sensitivity to rounding here. why matters for processors, not mills? [actor][0][14][0][4].append([ h, #price 1.0/rnge, #offer pmf 0.0, #offer cdf 1.0/rnge, #accept pmf 0.0, #accept cdf 1.0/rnge, #reject pmf 0.0, #reject cdf 1.0/rnge, #agg price pmf 0.0, #agg price cdf 1.0/rnge, #action pmf 0.0 #action cdf ]) #increment counter by 1 cent h = h + 0.01 #Update Knowledge_components maximum where actor has observations else: #if max_value has changed, grow Knowledge_components based on new #max_value if round(old_max_value, 2) < round([actor][0][14][0][2], 2): h = round(old_max_value + 0.01, 2) while round(h, 2) <= round([actor][0][14][0][2], 2): if [actor][0][1] == 'mill':
154
[actor][0][14][0][4].append([h, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) else: [actor][0][14][0][4].append([h, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) #increment counter by 1 cent h = round(h + 0.01, 2) #Set prior knowledge based on new range prior_k = copy.deepcopy([actor][0][14][0][4]) #k_list = [row[7] for row in [actor][0][14][0][4]] #prior_k_list = [row[7] for row in [actor][0][14][0][14]] #print "pre-update", sim_round, [actor][0][0] #x=0 #while x < len(k_list): # print ' ', mode, x/100.0, k_list[x], prior_k_list[x] # x += 1 ################################## #STEP L3-L7: Positive and Negative Learning ################################## #handle each observation/knowledge type separately for know_type in ['offer', 'accept', 'reject']: #create a sorted list of the new observations and their frequencies raw_obs = [] count_obs = [] #populate list based on round_update or transaction mode if mode == "round_update": for y in [actor][0][4]: z = [y][0][0] if know_type == 'offer': if ([y][0][1] == 0 and Interactions[z][1] == (sim_round - 1)): raw_obs.append(round(Interactions[z][4], 2)) elif know_type == 'accept': if ([y][0][1] == 1 and Interactions[z][1] == (sim_round - 1) and Interactions[z][5] == 1): raw_obs.append(round(Interactions[z][4], 2)) else: if ([y][0][1] == 1 and Interactions[z][1] == (sim_round - 1) and Interactions[z][5] == 0): raw_obs.append(round(Interactions[z][4], 2))
155
#this is the case associated with transaction mode elif know_type == mode: raw_obs.append(round(actor_offer, 2)) raw_obs.sort() #this required for groupby to function properly count_obs = [(g[0], len(list(g[1]))) for g in itertools.groupby(raw_obs)] count_obs.sort() #count the total number of new observations in the last round num_new_obs = sum([row[1] for row in count_obs]) #allocate probability to the values in each interval interval_max = 0.0 likelihood = [] #specify an interval counter, z z = 0 #specify a counter for each $0.01 price, the index over which knowledge is #managed h = 0.00 #Loop to compute likelihood while z <= len(count_obs): interval_prob = 0.0 increment_prob = 0.0 interval_min = interval_max #deal with empty case separately if len(count_obs) == 0: interval_max = round([actor][0][14][0][2], 2) interval_len = round((interval_max - interval_min)*100) + 1 interval_prob = 1.0 #specify interval maximums, interval lengths, and probabilities assigned to each #interval. handle sellers (mills) and buyers (processors) separately elif [actor][0][1] == 'mill': #first interval always bounded by first price obs if z == 0: interval_max = round(count_obs[z][0] - 0.01, 2) #adjust interval length up 1 to accomodate fact that, in mid intervals, min will #be outside of interval, while it is actually included in the first interval interval_len = round((interval_max - interval_min)*100) + 1
156
if know_type == 'reject': interval_prob = float(count_obs[z][1])/num_new_obs else: interval_prob = 0.0 #mid intervals are open on the right, closed on the left elif len(count_obs) > z: interval_max = round(count_obs[z][0] - 0.01, 2) interval_len = round((interval_max - interval_min)*100) if know_type == 'reject': interval_prob = float(count_obs[z][1])/num_new_obs else: interval_prob = float(count_obs[z-1][1])/num_new_obs #last interval includes range_max and is closed on both ends else: interval_max = round([actor][0][14][0][2], 2) #not necessary to add 1, because already debiting previous max values; so min #already offset by 1 increment interval_len = round((interval_max - interval_min)*100) if know_type == 'reject': interval_prob = 0.0 else: interval_prob = float(count_obs[z-1][1])/num_new_obs #deal with processors: else: #first interval always bounded by first price obs, and closed both ends if z == 0: interval_max = round(count_obs[z][0], 2) interval_len = round((interval_max - interval_min)*100) + 1 if know_type == 'accept' or know_type == 'offer': interval_prob = float(count_obs[z][1])/num_new_obs else: interval_prob = 0.0 #mid intervals are open on the left, closed on the right elif len(count_obs) > z: interval_max = round(count_obs[z][0], 2) interval_len = round((interval_max - interval_min)*100) if know_type == 'accept' or know_type == 'offer': interval_prob = float(count_obs[z][1])/num_new_obs else: interval_prob = float(count_obs[z-1][1])/num_new_obs
157
#last interval always includes range_max else: interval_max = round([actor][0][14][0][2], 2) interval_len = round((interval_max - interval_min)*100) if know_type == 'accept' or know_type == 'offer': interval_prob = 0.0 else: interval_prob = float(count_obs[z-1][1])/num_new_obs #deal with case where interval_len = 0 (can happen when mill observes offer at #$0.00, which will happen if processor has no profit-making option. will set #interval_max = -0.01, which should preclude anything from being appended in #while loop below if interval_len == 0: increment_prob = 0 else: increment_prob = interval_prob/interval_len while round(h, 2) <= round(interval_max, 2): likelihood.append([round(h, 2), increment_prob]) h = round(h + 0.01, 2) z = z + 1 #update knowledge with likelihood to get posterior k = 0 while k < len(likelihood): if know_type == 'offer': #print [actor][0][1], len([actor][0][14][0][4]), len(likelihood), actor_offer, mode [actor][0][14][0][4][k][1] = [actor][0][14][0][4][k][1]*(1- [actor][0][10]) + likelihood[k][1]*[actor][0][10] elif know_type == 'accept': [actor][0][14][0][4][k][3] = [actor][0][14][0][4][k][3]*(1- [actor][0][10]) + likelihood[k][1]*[actor][0][10] #update action pmf if recently observed accept in response to action if len(count_obs) > 0: [actor][0][14][0][4][k][9] = [actor][0][14][0][4][k][9]*(1- [actor][0][10]) + likelihood[k][1]*[actor][0][10] else: #know_type = ‘reject’ [actor][0][14][0][4][k][5] = [actor][0][14][0][4][k][5]*(1-
158
[actor][0][10]) + likelihood[k][1]*[actor][0][10] #update action pmf if recently observed reject in response to action if len(count_obs) > 0: [actor][0][14][0][4][k][9] = [actor][0][14][0][4][k][9]*(1- [actor][0][10]) + likelihood[k][1]*[actor][0][10] k = k+1 ################################## #STEP L8: Knowledge Integration ################################## #combine the action and offer pmfs as an unscaled aggregate pmf k = 0 while k < len([actor][0][14][0][4]): #integration weight used here as exponent; as probability gets centralized this #(de)emphasizes tails that emerge from learning. at 0, remains uniform forever. #At 1, no effect. At high values, de-emphasizes tails. [actor][0][14][0][4][k][7] = ([actor][0][14][0][4][k][9]* [actor][0][14][0][4][k][1])**[actor][0][11] k = k+1 #scale aggregate pmf values based on unscaled sum temp_pmf_sum = sum(row[7] for row in [actor][0][14][0][4]) k = 0 while k < len([actor][0][14][0][4]): [actor][0][14][0][4][k][7] = [actor][0][14][0][4][k][7]/temp_pmf_sum k = k+1 #k_list = [row[7] for row in [actor][0][14][0][4]] #new_prior_k_list = [row[7] for row in prior_k]#[actor][0][14][0][14]] #print "mid-update", sim_round, [actor][0][0] #x=0 #while x < len(k_list): # print ' ', mode, x/100.0, k_list[x], new_prior_k_list[x], prior_k_list[x] # x += 1 #compute cdfs from pmfs for knowledge sources v = 0 if [actor][0][1] == 'mill':
159
while v < len([actor][0][14][0][4]): [actor][0][14][0][4][v][2] = sum([row[1] for row in [actor][0][14][0][4][v:]]) #offer cdf [actor][0][14][0][4][v][4] = sum([row[3] for row in [actor][0][14][0][4][v:]]) #accept cdf [actor][0][14][0][4][v][6] = sum([row[5] for row in [actor][0][14][0][4][:v+1]]) #reject cdf [actor][0][14][0][4][v][10] = sum([row[9] for row in [actor][0][14][0][4][v:]]) #action cdf v = v + 1 else: #processor case while v < len([actor][0][14][0][4]): [actor][0][14][0][4][v][2] = sum([row[1] for row in [actor][0][14][0][4][:v+1]]) #offer cdf [actor][0][14][0][4][v][4] = sum([row[3] for row in [actor][0][14][0][4][:v+1]]) #accept cdf [actor][0][14][0][4][v][6] = sum([row[5] for row in [actor][0][14][0][4][v:]]) #reject cdf [actor][0][14][0][4][v][10] = sum([row[9] for row in [actor][0][14][0][4][:v+1]]) #action cdf v = v + 1 #compute P(accept) based on actor type v = 0 if [actor][0][1] == 'mill': while v < len([actor][0][14][0][4]): [actor][0][14][0][4][v][8] = sum([row[7] for row in [actor][0][14][0][4][v:]]) v = v + 1 else: #processor case while v < len([actor][0][14][0][4]): [actor][0][14][0][4][v][8] = sum([row[7] for row in [actor][0][14][0][4][:v+1]]) v = v + 1 #For debugging, store round updated knowedlge in Time_knowledge. Disabled #once fully vetted, but left in code for illustration/future development. if mode == "impossible value": #"round_update": for y in [actor][0][14][0][4]: #print [y][0] [actor][0][14][0][3].append([ sim_round,
160
[y][0][0], #price [y][0][1], #pmf offer [y][0][2], #cdf offer [y][0][3], #pmf accept [y][0][4], #cdf accept [y][0][5], #pmf reject [y][0][6], #cdf reject [y][0][7], #agg price pmf [y][0][8], #agg price cdf [y][0][9], #action pmf [y][0][10] #action cdf ]) #isolate list of current and prior agg pmf values k_list = [row[7] for row in [actor][0][14][0][4]] #prior_k_list = [row[7] for row in [actor][0][14][0][14]] prior_k_list = [row[7] for row in prior_k] #print "post-update", sim_round, [actor][0][0] #x=0 #while x < len(k_list): # print ' ', mode, x/100.0, k_list[x], prior_k_list[x] # x += 1 #calculate entropy associated with current knowledge current_entropy = entropy(k_list, math.e) #If running in round_update mode, find new entropy, append it, and return updated #actor record if mode == "round_update": [actor][0][14][0][15].append([sim_round, current_entropy]) return (actor) #If running for a specific transaction, compute entropy on current k and use current #and prior k to compute JSD else: marginal_JSD = JSD([k_list, prior_k_list], [0.5, 0.5]) return(current_entropy, marginal_JSD)
161
weighted_sample.py ############################################## #Thanks to Jason Orendorff @ stackoverflow.com #http://stackoverflow.com/questions/2140787/select-random-k-elements-from-a-list- # whose-elements-have-weights/2149533#2149533 ############################################## import random def weighted_sample(items, n): total = float(sum(w for w, v in items)) i = 0 w, v = items[0] while n: rand = random.random() x = total * (1 - rand ** (1.0 / n)) total -= x while x > w: x -= w i += 1 w, v = items[i] w -= x yield v n -= 1
162
process_interaction.py ############################################## #Name: process_interaction.py # #Description: shell called by structuring_sim in which a predefined (buyer, seller) pair # engages in an interaction. Based on previous results of bilateral interaction, # actor_ctnr chooses an offer to submit to alter_id. alter_id then accepts or rejects # based on his/her privately known cost. # #Created: 2011 # #Modified: 20130311 # ############################################## #Import modules from compute_actor_knowledge import compute_actor_knowledge import random import math import copy #Process interaction to identify offer price and accept/reject by alter. Function takes #(sim_round, actor_cntr, alter_ID, Actors, Interactions) from structuring_sim def process_interaction(items): #define terms based on input sim_round = items[0] actor_cntr = items[1] alter_ID = items[2] Actors = items[3] Interactions = items[4] interaction_cntr = items[5] num_processors = items[6] ##################################### #STEP S8: Identify Actor Strategy ##################################### if random.uniform(0,1) <= Actors[actor_cntr][12][0][0]: #profit maximize ##################################### #STEP S9: Select Actor Offer #####################################
163
#could make this more efficient by just searching over non-loss prices price = 0 exp_profit = 0.0 if Actors[actor_cntr][1] == 'mill': for x in Actors[actor_cntr][14][0][4]: if exp_profit < [x][0][8]*([x][0][0] - (Actors[actor_cntr][9][sim_round][1] + Actors[actor_cntr][9][sim_round][3])): exp_profit = [x][0][8]*([x][0][0] - (Actors[actor_cntr][9][sim_round][1] + Actors[actor_cntr][9][sim_round][3])) price = [x][0][0] else: for x in Actors[actor_cntr][14][0][4]: if exp_profit < [x][0][8]*(Actors[actor_cntr][9][sim_round][2] - Actors[actor_cntr][9][sim_round][3] - [x][0][0]): exp_profit = [x][0][8]*(Actors[actor_cntr][9][sim_round][2] - Actors[actor_cntr][9][sim_round][3] - [x][0][0]) price = [x][0][0] else: #for now, just choose a random non-loss-making value if Actors[actor_cntr][1] == 'mill': price = random.uniform((Actors[actor_cntr][9][sim_round][1] + Actors[actor_cntr][9][sim_round][3]), Actors[actor_cntr][14][0][2]) #print Actors[actor_cntr][0], sim_round else: price = random.uniform(0.0, Actors[actor_cntr][9][sim_round][2] - Actors[actor_cntr][9][sim_round][3]) #finalize offer price actor_offer = round(price, 2) ##################################### #STEP S12: Identify Alter Strategy ##################################### #Right now, always accept any weakly profitable offer ##################################### #STEP S13: Select Alter Response to Actor Offer ##################################### #accept any (weakly) profitable price if Actors[alter_ID][1] == 'mill': if actor_offer >= (Actors[alter_ID][9][sim_round][1]
164
+ Actors[alter_ID][9][sim_round][3]): accept = 1 else: accept = 0 else: if actor_offer <= Actors[alter_ID][9][sim_round][2] - Actors[alter_ID][9][sim_round][3]: accept = 1 else: accept = 0 ########### #Update tables with interaction results ########### #update number of interactions and transactions for actor and alter Actors[actor_cntr][2] = Actors[actor_cntr][2] + 1 Actors[alter_ID][2] = Actors[alter_ID][2] + 1 if accept == 1: Actors[actor_cntr][3] = Actors[actor_cntr][3] + 1 Actors[alter_ID][3] = Actors[alter_ID][3] + 1 #update number of transactions and interactions specifically between actor and alter if actor_cntr < num_processors: Actors[actor_cntr][5][alter_ID - num_processors][1] = Actors[actor_cntr][5][alter_ID - num_processors][1] + 1 if accept == 1: Actors[actor_cntr][5][alter_ID - num_processors][2] = Actors[actor_cntr][5][alter_ID - num_processors][2] + 1 else: Actors[actor_cntr][5][alter_ID][1] = Actors[actor_cntr][5][alter_ID][1] + 1 if accept == 1: Actors[actor_cntr][5][alter_ID][2] = Actors[actor_cntr][5][alter_ID][2] + 1 if alter_ID < num_processors: Actors[alter_ID][5][actor_cntr - num_processors][1] = Actors[alter_ID][5][actor_cntr - num_processors][1] + 1 if accept == 1: Actors[alter_ID][5][actor_cntr - num_processors][2] = Actors[alter_ID][5][actor_cntr - num_processors][2] + 1 else: Actors[alter_ID][5][actor_cntr][1] = Actors[alter_ID][5][actor_cntr][1] + 1 if accept == 1: Actors[alter_ID][5][actor_cntr][2] = Actors[alter_ID][5][actor_cntr][2] + 1
165
#update maximum observation values; only update max values if offer accepted Actors[alter_ID][14][0][0] = max(Actors[alter_ID][14][0][0], actor_offer) if accept == 1: Actors[actor_cntr][14][0][0] = max(Actors[actor_cntr][14][0][0], actor_offer) #store data related to this interaction Actors[actor_cntr][4].append([interaction_cntr, 1]) Actors[alter_ID][4].append([interaction_cntr, 0]) #increase alter's recent observed offer count Actors[alter_ID][14][0][12] = Actors[alter_ID][14][0][12] + 1 #increase actor's recent accept or reject count as appropriate if accept == 0: Actors[actor_cntr][14][0][6] = Actors[actor_cntr][14][0][6] + 1 else: Actors[actor_cntr][14][0][9] = Actors[actor_cntr][14][0][9] + 1 #Compute this transaction's marginal entropy and JSD for both alter and actor Actors_cp = copy.deepcopy(Actors) alter_k_measures = compute_actor_knowledge([Actors_cp[alter_ID], sim_round, Interactions, "offer"], actor_offer) if accept == 1: actor_k_measures = compute_actor_knowledge([Actors_cp[actor_cntr], sim_round, Interactions, "accept"], actor_offer) else: actor_k_measures = compute_actor_knowledge([Actors_cp[actor_cntr], sim_round, Interactions, "reject"], actor_offer) #Append new record to interactions Interactions.append([ interaction_cntr, sim_round, actor_cntr, alter_ID, actor_offer, accept, actor_k_measures[0], #marginal actor entropy alter_k_measures[0], #marginal alter entropy actor_k_measures[1][1], #marginal actor JSD alter_k_measures[1][1], #marginal alter JSD ])
166
#return transaction information to structuring_sim return (Interactions, Actors)
167
JSD.py ######################################################## #NAME: JSD.py #CREATED: 3/10/2013 #MODIFIED: 3/10/2013 # #DESCRIPTION: This function takes a list of probability distributions, a list of # corresponding weights, and (optionally) a logarithmic base (e.g., e for "nats," 2 for # "bits"). The function uses those to compute and return the corresponding # Jensen-Shannon Divergence (JSD). # #VERSION HISTORY: # 20130310 -- Created # #NOTES: # 1/ This avoids scipy's built-in entropy function in favor of the version specified in # sim_params. The scipy version sometimes has issues that appear related to # computing log(0), for which Shannon entropy and the JSD appeal to the limit. # 2/ This draws on kanzen_master's JSD implementation, but extends it to n # distributions and does not require equal weights. KM's solution is here: # http://stats.stackexchange.com/questions/29578/jensen-shannon-divergence- # calculation-for-3-prob-distributions-is-this-ok # ######################################################## ################################ #STEP 0: Import Python modules ################################ import numpy import math from sim_params import entropy ################################### #STEP 1: Define function ################################## def JSD(prob_dists, weights, base = math.e): #Standardize distribution lengths. All n distributions will be [0, max(n)], so #standardize by appending zeroes to shorter distributions. #First sort by len prob_dists.sort(key = len)
168
#Identify len(longest dist) max_dist_len = len(prob_dists[len(prob_dists) - 1]) #append zeroes where current prob_dist shorter than longest prob_dist for x in prob_dists: if len(x) < max_dist_len: while len(x) < max_dist_len: x.append(0.0) #specify base values for JSD first and second terms. The first term will be the entropy #of the weighted probability distributions, and the second term will be the weighted #sum of the individual probability distributions jsd_term1 = [0.0]*max_dist_len jsd_term2 = 0.0 #iterate through each distribution, incrementally updating jsd_term1 and jsd_term2 pd = 0 for y in prob_dists: #print y #print entropy(y, base) #apply each pd to jsd_term1 x = 0 while x < max_dist_len: jsd_term1[x] += weights[pd]*[y][0][x] x += 1 #add weighted entropy of pd to jsd_term2 jsd_term2 += weights[pd]*entropy(y, base) pd += 1 #compute Jensen-Shannon Divergence jsd = entropy(jsd_term1, base) - jsd_term2 #print entropy(jsd_term1, base) #print jsd return (entropy(jsd_term1, base), jsd)
169
References
Alchien, Armen A. 1950. “Uncertainty, Evolution, and Economic Theory.” Journal
of Political Economy. 58 (3): 211-221.
Amihud, Yakov and Haim Mendelson. 1983. “Price Smoothing and Inventory.” The
Review of Economic Studies. 50 (1): 87-98.
Arrow, Kenneth J. 1994. “Methodological Individualism and Social Knowledge.”
American Economic Review. 84 (2): 1-9.
Arrow, Kenneth J. and Gerard Debreu. 1954. “Existence of an Equilibrium for a
Competitive Economy.” Econometrica. 22 (3): 265-290.
Arrow, Kenneth J. and Leonid Hurwicz. 1958. “On the Stability of the Competitive
Equilibrium, I.” Econometrica. 26 (4): 522-552.
Axelrod, Robert. 1984. The Evolution of Cooperation. Cambridge, MA: Basic
Books.
Baker, Wayne E.. 1984. “The Social Structure of a National Securities Market.”
American Journal of Sociology. 89 (4): 775-811.
Becker, Gary S. 1962. “Irrational Behavior and Economic Theory.” Journal of
Political Economy. 70 (1): 1-13.
Beckert, Jens. 1996. “What is Sociological about Economic Sociology? Uncertainty
and the Embeddedness of Economic Action.” Theory and Society. 25 (6):
803-840.
170
Beckert, Jens. 2003. “How Shall We Conceptualize Economic Action?” Journal of
Economic Issues. 37 (3): 769-787.
Beja, Avraham and M. Barry Goldman. 1980. “On the Dynamic Behavior of Prices
in Disequilibrium.” Journal of Finance. 35 (2): 235-248.
Boettke, Peter J. 1998. “Rational Choice and Human Agency in Economics and
Sociology: Exploring the Weber-Austrian Connection.” In Giersch, Herbert
(ed.). 1998. Merits and Limits of Markets. Springer.
Boettke, Peter J., and Virgil Henry Storr. 2002. “Post-Classical Political Economy:
Polity, Society and Economy in Weber, Mises, and Hayek.” American Journal
of Economics and Sociology. 61 (1): 161-191.
Burt, Ronald S. 1992. Structural Holes: The Social Structure of Competition.
Cambridge, Massachusetts: Harvard University Press.
Carley, Kathleen. 1991. “A Theory of Group Stability.” American Sociological
Review. 55 (3): 331-354.
Carlton, Dennis W. 1978. “Market Behavior with Demand Uncertainty and Price
Inflexibility.” The American Economic Review. 68 (4): 571-587.
Carlton, Dennis W. 1979(a). “Contracts, Price Rigidity, and Market Equilibrium.”
Journal of Political Economy. 87 (5): 1034-1062.
Carlton, Dennis W. 1979(b). “Future Trading, Market Interrelationships, and
Industry Structure.” American Journal of Agricultural Economics. 65 (2):
380-387.
Carlton, Dennis W. 1983. “Equilibrium Fluctuations when Price and Delivery Lag
Clear the Market.” Bell Journal of Economics. 14 (2): 562-572.
171
Coleman, James. 1986. Social Theory, Social Research, and a Theory of Action.
American Journal of Sociology. 91 (6): 1309-1335.
Davis, Jason P., Kathleen M. Eisenhardt, and Christopher B. Bingham. 2007.
“Developing Theory Through Simulation Models.” Academy of Management
Review. 32 (2): 480-499.
Domberger, Simon. 1979. “Price Adjustment and Market Structure.” Economic
Journal. 89 (353): 96-108.
Emirbayer, Mustafa. 1997. “Manifesto for a Relational Sociology.” American
Journal of Sociology. 103 (2): 281-317.
Emirbayer, Mustafa, and Jeff Goodwin. 1994. “Network Analysis, Culture, and the
Problem of Agency.” American Journal of Sociology. 99 (6): 1411-1454.
Fanselow, Frank S. 1990. “The Bazaar Economy: Or How Bizarre is the Bazaar
Really?” Man. 25 (2): 250-265.
Ferguson, Adam. 1767 (1995). An Essay on the History of Civil Society. Cambridge:
Cambridge University Press.
Friedman, Milton. 1949. “The Marshallian Demand Curve.” Journal of Political
Economy. 57 (6): 463-495.
Giddens, Anthony. 1979. Central Problems of Social Theory: Action, Structure and
Contradiction in Social Analysis. London: Macmillan.
Granovetter, Mark. 1973. “The Strength of Weak Ties.” American Journal of
Sociology. 68 (2): 1360-1380.
Granovetter, Mark. 1985. “Economic Action and Social Structure: The Problem of
Embeddedness.” American Journal of Sociology. 91 (3): 481-510.
172
Granovetter, Mark. 2005. “The Impact of Social Structure on Economic Outcomes.”
Journal of Economic Perspectives. 19 (1): 33-50.
Granovetter, Mark, and Richard Swedberg. 2001. The Sociology of Economic Life.
Boulder: Westview Press.
Grossman, Sanford J. and Joseph E. Stiglitz. 1976. “Information and Competitive
Price Systems.” American Economic Review. 66 (2): 246-253.
Grossman, Sanford J. and Joseph E. Stiglitz. 1980. “On the Impossibility of
Informationally Efficient Markets.” American Economic Review. 70 (3): 393-
408.
Gulati, Ranjay and Martin Gargulio. 1999. “Where do Interorganizational Networks
Come From?” American Journal of Sociology. 104 (5): 1439-1493.
Hayek, F.A. 1945. “The Use of Knowledge in Society.” American Economic
Review. 35 (4): 519-530.
Hayek, F.A. 1946. “The Meaning of Competition.” In F.A. Hayek. 1948.
Individualism and Economic Order. Chicago: University of Chicago Press.
Hayek, Friedrich A. 1973. Law Legislation and Liberty: Volume 1 Rules and Order.
Chicago: University of Chicago Press.
Hobbes, Thomas. 1651 (1914). Leviathan: Or the Matter, Form, and Power of a
Commonwealth, Ecclesiastical and Civil. London: J.M. Dent and Sons, Ltd.
Homans, George C. 1951. The Human Group. London: Routledge and Kegan Paul
Ltd.
Homans, George C. 1961. Social Behavior: Its Elementary Form. New York:
Harcourt, Brace, & World, Inc.
173
Homans, George. 1967. The Nature of Social Science. New York: Harcourt, Brace &
World, Inc.
Kahneman, Daniel, and Amos Tversky. 1979. “Prospect Theory: An Analysis of
Decisions Under Risk.” Econometrica. 47: 313-327.
Karp, Richard M. 1972. “Reducibility in Combinatorial Problems.” in R.E. Miller
and J.W. Thatcher (eds). Complexity of Computer Computations. New York:
Plenum. 85-103.
Kirzner, Israel M. 1962. “Rational Action and Economic Theory.” Journal of
Political Economy. 70 (4): 380-385.
Kirzner, Israel M. 1997. “Entrepreneurial Discovery and the Competitive Market
Process: An Austrian Perspective.” Journal of Economic Literature. 35 (1):
60-85.
Knight, H. Frank. 1921 [2002]. Risk, Uncertainty, and Profit. Wasington, D.C.:
Beard Books.
Kollock, Peter. 1994. “The Emergence of Exchange Structures: An Experimental
Study of Uncertainty, Commitment, and Trust.” American Journal of
Sociology. 100 (2): 313-345.
Kontopolous, Kyriakos M. 1993. The Logics of Social Structure. Cambridge:
Cambridge University Press.
Krippner, Greta R. 2001. “The Elusive Market: Embeddedness and the Paradigm of
Economic Sociology.” Theory and Society. 30 (6): 775-810.
174
Krippner, Greta R. and Anthony S. Alvarez. 2006. “Embeddedness and the
Intellectual Projects of Economic Sociology.” Annual Review of Sociology.
33: 219-240.
Lachmann, L.M. 1951. “The Science of Human Action.” Economica. 18 (72): 412-
427.
Lachmann, L.M. 1971. The Legacy of Max Weber: Three Essays by L.M. Lachmann.
Berkeley: Glendessary Press.
Langlois, Richard N. (ed.). 1986. Economics as a Process: Essays in the New
Institutional Economics. Cambridge: Cambridge University Press.
Lawler, Edward J., and Jeongkoo Yoon. 1993. “Power and Emergence of
Commitment Behavior in Negotiated Exchange.” American Sociological
Review. 58 (4): 465-481.
Lin, Jinhua. 1991. “Divergence Measures Based on the Shannon Entropy.” IEEE
Transactions on Information Theory. 37 (1): 145-151.
Machovec, Frank M. 1995. Perfect Competition and the Transformation of
Economics. London: Routledge.
Mackay, Charles. 1841 [1980]. Extraordinary Popular Delusions and the Madness of
Crowds. New York: Three Rivers Press.
Mandeville, Bernard. 1714 (1970). The Fable of the Bees. London: Penguin Books.
Means, Gardner C. 1936. “Notes on Inflexible Prices.” American Economic Review.
26 (1): 23-35.
Mills, Frederick C. 1927. Behavior of Industrial Prices. National Bureau of
Economic Research: New York.
175
von Mises, Ludwig. 1949 [1963]. Human Action. Chicago: Contemporary Books.
O’Driscoll, Gerald P. and Mario J. Rizzo. 1996. The Economics of Time and
Ignorance. New York: Routledge.
O’Hara, Maureen. 1995. Market Microstructure Theory. Malden, MA: Blackwell.
Podolny, Joel M. 2001. “Networks as Pipes and Prisms of the Market.” American
Journal of Sociology. 107 (1): 33-60.
Scarf, Herbert. 1960. “Some Examples of Global Instability of the Competitive
Equilibrium.” International Economic Review. 1 (3): 157-172.
Schinkel, Maarten Pieter. 2006. “Disequilibrium Dynamics and Aggregate Excess
Demand: On a Homunculus Fallacy in Economic Theory.” History of Political
Economy. 38: 189-212.
Schinkel, Maarten Pieter, Jan Tuinstra and Dries Vermeulen. 2002. “Convergence of
Bayesian Learning to General Equilibrium in Mis-Specified Models.” Journal
of Mathematical Economics. 38: 483-508.
Shannon, C.E. 1948. “A Mathematical Theory of Communication.” Bell Systems
Technical Journal. 27: 379-423, 623-656.
Simon, Herbert A. 1955. “A Behavioral Theory of Rational Choice.” Quarterly
Journal of Economics. 69 (1): 99-118.
Simon, Herbert A. 1956. “Rational Choice and the Structure of the Environment.”
Psychological Review. 63 (2): 129-138.
Simon, Herbert A. 1959. “Theories of Decision-Making in Economics and
Behavioral Science.” American Economic Review. 49 (3): 253-283.
176
Slade, Margaret E. 1991. “Market Structure, Marketing Method, and Price
Instability.” Quarterly Journal of Economics. 106 (4): 1309-1340.
Smith, Adam. 1776 [1981]. An Inquiry into the Nature and Causes of the Wealth of
Nations. Indianapolis: Liberty Fund.
Stigler, George. 1946 [1947]. The Theory of Price. New York: MacMillan
Company.
Stigler, George. 1957. “Perfect Competition, Historically Contemplated.” Journal of
Political Economy. 65 (1): 1-17.
Taylor, Howard F. 1970. Balance in Small Groups. New York: Van Nostrand
Reinhold Company.
Thomsen, Esteban F. 1992. Prices and Knowledge: A Market-Process Perspective.
London: Routledge.
Uzawa, H. 1960. “Walras’ Tatonnement in the Theory of Exchange.” The Review of
Economic Studies. 27 (3): 182-194.
Uzzi, Brian. 1996. “The Sources and Consequences of Embeddedness for the
Economic Performance of Organizations: The Network Effect.” American
Sociological Review. 61 (4): 674-698.
Uzzi, Brian. 1997. “Social Structure and Competition in Interfirm Networks: The
Paradox of Embeddedness.” Administrative Science Quarterly. 42 (1): 35-67.
Uzzi, Brian, and Ryon Lancaster. 2004. “Embeddedness and the Price of Legal
Services.” American Sociological Review. 69 (3): 319-344.
Walras, Leon. 1874 [1954]. Elements of Pure Economics. United Kingdom: Taylor
and Francis.
177
White, Harrison C. 1981(a). “Production Markets as Socially Induced Role
Structures.” Sociological Methodology. 12: 1-57.
White, Harrison C. 1981(b). “Where do Markets Come From?” American Journal of
Sociology. 87 (3): 517-547.