Schoenberg, William with Pål Davidsen  "Understanding Model Behavior Using Loops That Matter", 2018 August 7 - 2018 August 9

Online content

Fullscreen
Understanding Model
Behavior Using Loops That
Matter

Billy Schoenberg
&
Pal Davidsen

UNIVERSITY OF BERGEN (


69e@

High-level ideas, the formation of the
method

¢ By studying the relationship between variables in the system we can
determine loop impact on the behavior of the model

¢ All relationships must be examined in isolation using values
calculated by the model
- Independent variable values are never manipulated
- This means that the model must be changing in order for this
method to analyze it
- Ensuring model consistency, variable values are sacred and
consistent with the model
- Discontinuity should not be made as an artifact
¢ Using link scores we can determine the magnitude and direction of
the connection strength between the independent and dependent
variable (AKA strength and polarity between...)
- Ex: A*B=C
- In plain English: The changes in A & B have to describe all of th
change in C for each and every dT

¢ All connections between variables are links (flows->stocks, stocks‘
>flows, converter->converter)


69e@

Getting in-depth with link scores

¢ Link scores contain two components (within a single
number) polarity is represented via sign[+,-], strength is
represented via magnitude [0-1].

- A link score of +1.0 (reinforcing polarity) means that
100% of the behavior in the dependent variable is
explained by the independent.

* To calculate link scores in isolation we (typically) must
recalculate each equation multiple times to measure the
true impact of the independent variable on the
dependent variable holding all other independent
variables constant per dT


69e@

High-level overview of the mechanics

* Ex model: T[O -> 10]: C=A*B , F=C+D, , A = J(F-A), B=TIME,
D=5
¢ Link scores are calculated for each link in the model for each
dT
- Links: A->C, B->C, C->F, D->F, F->A
- Method requires: ABS(LS,,...)) + ABS(LS|5..4)) = 1.0
- Method requires: ABS(LS,-..,;) + ABS(LS,,..,;) = 1.0
° In this example model:
¢ LSip.sf) = 0.0, because D never changes, D->F has no impact

¢ LSics) = 1.0, because C changes and D never changes C->F contains
all of the impact

- ABS(LS,,..,;) = 1.0, Because A is influenced only by F (from
the user perspective)


Before we get too deep with link %¥®
scores...
What do we use them for?

* Loop scores are calculated for each loop in the model for
each dT
- Multiply the scores for each of the links together ***
this does not take into account fully contained loops
(see later slides) - We will discuss loop scores in depth
later on

* My point here is that we can use link scores to say
things about loops


69e

Depending on the kind of the link, there
are 2 methods for calculating link scores,
in preparation for calculating loop scores

* Flow -> Stock
- We treat the links between flows and stocks separately. The integration of the stock
necessitates this
* With change in dependent variable

- Main method, used for most relationships, requires that there is a change in the dependent
variable

- Ex: T1:5+5=10, T2: 5+6=11

* Not covered: Without change in dependent variable
- The links in which this variable appears as an independent variable has a link score(s) of 0
- AKA we can skip calculating the link scores for the independent variables leading into this
variable because we know that when we use this dependent variable as an independent
variable in the next link in the loop, that we will get a link score of 0. This means that this

method does not apply without change (unless we perturb system, shock it out of
equilibrium)


Calculating link scores
Flow->Stock

UNIVERSITY OF BERGEN (


69e@

Flow-> Stock Link Score Method

¢ Link score
- Inflow: flow / SUM(ABS(Flows))
- Outflow: -flow / SUM(ABS(Flows))

- Each flow is responsible for a change in the stock
relative to the total (absolute) magnitude of all the
flows into and out of (i.e. influencing) the stock

¢ This method yields both parts of the link score,
magnitude AND polarity

¢ Remember that this is a normalization process, it ensures
that the link score is in the range [-1, 1] inclusive


Calculating link scores with
change in dependent
variable, not Flow->Stock

69e@

Calculating a link score magnitude:
Simple
° Ex equation:
- T[1->2] dT = 1: A+B=C
¢ PCc, = Potential change of C with [| Ff FF FI
respect X Time 1 5 5 10

- Ex: PCc, -> Potential change of C

with respect to X, Let only X vary "©? ? 8

- PCc, = 7 +5 =12 (Let onlyA PCC, 5 F 7
vary)

- PCc, = 5 + 6 = 11 (Let only B PCC, 5 6 11
vary)

4 . Link Score .67 33
* Link Score (non-normalized)

- T2: A->C = (PCc, - Cy)/ (Cy -
Cn)
- T2: A->C = (12-10)/(13-10) = .67

69e@

Calculating a link score magnitude: With
change, full - Sometimes correct polarity

Ex equation:
- T[1->2] dT = 1: A*B =C 4
Stage 1 = Raw link score a

Stage 2 = ABS(Stage 1) times °

Link Score = Stage 1/ Time 2 4 2 8
SUM(Stage 2) = F 5 =
Link Score

- A->C: -3/(3+3) = -0.5 = a : :
- B->C: 3/(3+3) = 0.5 Stage 1 3 3

The raw link scores are Stage 2 3 3
normalized to ensure LS[x->y] is

between the range [-1,1] Link Score -0.5 0.5

inclusive

- Works just like we do for
flows!

69e@

Calculating a link score magnitude: With change,
full - Sometimes correct polarity, example error

Ex equation:
- T[1->2] dT = 1: (A+B)/C = D

en Seine er
Stage 2 = ABS(Stage 1)

Time 2 10 4 5 2.8
Link Score = Stage 1 /
SUM(Stage 2) WRONG!! ms a 7 2 a
Link Score Magnitude = Stage 2 °C, 7 4 3 3.67
/ SUM(Stage 2) PCd, 7 D 5 18
The polarity here is wrong Sane = "sag 16
because we measure our
change based on the change in %#9°? ° lc
D with the impact of all the Link Score -0.349 -0.232.-0.419

wrong Polarity

independent variables

- We’re not using our potential
changes!

Okay lets talk about
polarity now

UNIVERSITY OF BERGEN (


69e@

What is polarity?

° Ex: C = f(A,B) - Cis a function of A and B
* In English as A goes up, ignoring B, C does what? [goes up, goes down]
¢ In math speak... the sign of the first order derivative of A matches the

sign of the first order derivative of C (calculated with a constant B)
(Richardson)

* Translating the math speak back into English
- If Ais getting bigger (positive first derivative) and C is getting bigger,
then A and C are positively correlated, that is a positive polarity
- If Ais getting smaller (negative first derivative) and C is getting

smaller, then A and C are positively correlated, that is a positive
polarity

- If Ais getting bigger and C is getting smaller, A and C are negatively
correlated, that is a negative polarity

- If Ais getting smaller and C is getting bigger, A and C are negatively
correlated, that is a negative polarity


69e@

Calculating a link score sign
(polarity)

Ex equation:

Jowe hve enough All
Do we have enough

information to determine the
polarities of the following links:
- A->D? Yes

- B->D? No

- C->D? Yes

B->D doesn’t matter, B is
constant, its link score
magnitude is 0 and -0 == +0
As long as we have a change in
the independent variable we
can determine polarity!

2 10 2 5 2.4

69e@

Calculating a link score sign (polarity) Cont’d

Ex equation:
- T[1->2] dT = 1: (A+B)/C = D

PCd,, = Potential change of D with respect ee ee ee ee
x 2 3 3

Time 1 U
- PCd, = (10 + 2)/3 = 4 (only A varies)

- PCd, = (7 + 2)/5 = 1.8 (only C varies) Time2 10 2 5 2.4
Ax: Change in X over Time

PCd, 10 2 3 4
- Aa=10-7=3
- Ac=5-3=2 PCd. 7 2 5 1.8
APCd,: Change in D with impact of X only
- Ad, = PCd, - d, ox : :
= Adi= = 4 3)=el APCd, il “12
- Ad, = 1.8-3=-1.2
Sign = SIGNUM(APCd, /Ax) sign ae om

- Sign A = SIGNUM(1/3) = 1.0
- Sign C = SIGNUM(-1.2/2) = -1.0

69e@

Calculating a link score sign (polarity) Cont’d #2
- Shifting polarity (C->D)!

Ex equation:
- T[2->3] dT = 1: (A+B)/C = D

PCd,, = Potential change of D with respect ee ee ee ee
x 2 3 3

Time 2 U
- PCd, = (10 + 2)/3 = 4 (only A varies)

- PCd. = (7 + 2)/-1 = -9 (only C varies) Time3 10 2 a -12
Ax: Change in X over Time

PCd, 10 2 3 4

- Aa=10-7=3

- Ac=-1-3=-4 PCd, 7 2 1 9
APCd,: Change in D with impact of X only

- Ad, = PCd, - d, ox : =

= Adi= = 4 3)=el APCd, il -12

- Ad, = -9-3 =-12

Sign = SIGNUM(APCd, /Ax) sign ae go

- Sign A = SIGNUM(1/3) = 1.0
- Sign C = SIGNUM(-12/-9) = 1.0

Okay - lets talk about loops

UNIVERSITY OF BERGEN (


69e@

Model #1: Bass Diffusion, Simple Discussion of
Loops

=) 1L0->15]
. . - Inflection point = 9.5625 to 9.625
Balancing Reinforcing

* Balancing
- probability of contact with
potentials
- potentials contacts with adopters
- adoption from word of mouth
- adopting

Potential
Adopters

Adopters
=

contact rate

\
adoption pcre
faction contacts

\ \
\ adoption frm Qe ;
\\word of molth ©

Martetsiae Of — - potential adopters
_— \ potentials gfntact: r .
Pchenity al Na vathagieteta ° Reinforcing

contact with potentials

- adopter contacts

- potentials contacts with a adopters
- adoptions from word of mouth

- adopting

- adopters

Calculating a loop
(T=1)

¢ Calculate link score for each
link in the loop at time T
¢ Multiply all link scores
together to generate the Non
Normalized Loop Score
¢ Normalize Loop Score across
all loops in model
- Sum all non normalized
loop scores, take this
loops score as a
percentage of the whole
- Just like link scores
ensures values are in the
range [-1, 1] inclusive.

69e@

score: Balancing

probability_of_contact_with_potentialspotentials_contacts_wit
h_adopters

potentials _contacts_with_adopters>adoption_from_word_of_mo
ut

adoption_from_word_of_mouth-adopting
adopting—potential_adopters
potential_adopters—probability_of_contact_with_potentials
Non-Normalized Loop Score

Loop Score

1E-06

1

Calculating a loop

probability_of_contact_with_potentials>potentials_contacts_wi 0. ey
th_adopters

625)

potentials contacts_with_adopters>adoption_from_word_of_m

outh a
adoption_from_word_of_mouth-adopting al
adopting—potential_adopters -1
potential_adopters—probability_of_contact_with_potentials al

0.488313
Raw Loop Score il

0.488313
Loop Score a

69e@

score: Balancing

i ES)

probability_of_contact_with_potentials>potentials_contacts_wi 0. pueies
th_adopters

ink (T:

potentials contacts_with_adopters>adoption_from_word_of_m

outh a
adoption_from_word_of_mouth-adopting al
adopting—potential_adopters 1
potential_adopters—probability_of_contact_with_potentials al

0.999784
Raw Loop Score 9

0.999784
Loop Score 9

tes

69e

Bass Diffusion Loop Impact

Loop Impact Bass Diffusion

Balancing

Reinforcing

Loop Impact Bass Diffusion:
Magnitude Only

ab 3 5 7 9 11, 13 15

Balancing

Reinforcing

69e@

Model #2: Escalation, Discussion of Contained
vs. Containing Loops

* Containing (Reinforcing)

- their desired weapons

- changing their weapons
their weapons

- our desired weapons

- changing our weapons
our weapons

* Our Weapons (Balancing,
contained)

et - changing our weapons
- our weapons

¢ Their Weapons (Balancing,
contained)

- changing their weapons
- their weapons

Their
Weapons changin
their weapons

our desired
safety margin

our desired

esl their time

tochange

\ Our
Weapons

=]
changing

our weapons

“their desired”

‘our time
0 change

69e@

What is a contained loop?

changing
their weapons

¢ A contained loop is a loop
. . our desired
where all variables either: sey ate

: raf QO
- Are in the containing loop earns
- Or not in any loop except

!  theirtime
to change.

Our
Weapons

for the contained loop =| le

safety margin

ourtime
lo change

¢ The theoretical loop in red is
still contained!

69e@

Escalation Model Key Results

Escalation Model Key Results

0 5 10 15 20 25 30

Our Weapons Their Weapons Total Weapons


69e@

Contained vs Containing Loops

link scores, the containing loop
will ALWAYS be less impactful then changing_our_weapons~our_weapons 1
the contained loops

our_desired_weapons—changing_our_weapons 0.590163934

- We need to correct for the :

effect of the comingled our_weapons—changing_our_weapons 0.409836066

influence changing_their weapons—their_weapons Al

Loop (T=0) Raw Without Raw Corrected their_desired_weapons>changing_their_ weapons oS

Correction

Containing 0.295081967 0.713047568 their_weapons—changing_their_weapons -0.5

Our Weapons -0.409836066 -0.24187046 their_weaponsour_desired_weapons Al
Their Weapons -0.5 70.25

oOur_weapons~their_desired_weapons al

69e@

How do we correct for the undue influence of
contained loops?

¢ In this model there are two “modulator
links”.
- our_desired_weapons->changing_our_weapons
- their_desired_weapons-
>changing_their_weapons wate ‘
. . jason, changing
° These links modulate the impact of the outchved ae
contained loops Sate eT,
- They are the interface between the
contained loop and the containing

loop wks

- Destination variable is first variable 7
in both loops.

- Source variable must not be in the oO ek aes
contained loop to change

- These are the locations that the
containing loop changes the
acceleration of (changes the
gearing of, or directly influences)
the contained loop

69e@

Cont’d: How do we correct for the undue
influence of contained loops?

¢ For each contained loop we use
its modulator link to determine
the percentage of the contained
loop non-normalized loop score © waters tang
to reallocate to the major loop ou eies, - O}
¢ Stated another way, the impact
of the containing loop on the
contained loop is equal to one
minus the link strength of the
modulator link 6
¢ It is that resulting impact that Stine
needs to be removed from the
impact of the contained loop
and assigned to the containing
loop

their desired
safety margin

69e@

Cont’d #2: How do we correct for the undue
influence of contained loops?

¢ We multiply the link strength of the
modulator link by the raw loop score
of the contained loop, which gives
us the correct impact of the a7
contained loop. es) eee

* We then take the impact which was seiay rea —
removed from the contained loop
and add it to the impact of the
containing loop (Conservation of

changing
their yeapons

energy)
* Be sure to do above step oe iS
transferring magnitude ONLY. AKA if oO ssleymaran

to change

containing loop is reinforcing, but
contained is balancing, you add the
magnitude, of the transferred
impact, you don’t subtract
magnitude from the containing loop!

69e

Escalation Loop Impact

Loop Impact Escalation

Containing
Our Weapons (Contained)
Their Weapons (Contained)

Loop Impact Escalation:
Magnitude Only

1.2

oe
0.8
0.6
0.4
0.2

_t PAA

3 5 7 9: a 13 1S
Containing

Our Weapons (Contained)
Their Weapons (Contained)


Metadata

Resource Type:
Document
Description:
The link between structure and behavior is central to System Dynamics, but effective tools for understanding that relationship still elude us. The current state of the art in the field of loop dominance analysis relies on either practitioner intuition and experience or complex algorithmic analysis in the general forms of eigenvalue analysis or pathway participation metrics. This paper presents a new and distinct method to find the 'loops that matter' in generating model behavior. This is a numeric method capable of determining the loop impact of each and every loop across the entire model. The method is derived via logical demonstrations and empirical evaluation. Forrester's 1968 market growth model is analyzed, shedding new light on the current understanding of this model and pointing to key insights that have not been adequately brought out in past analyses. In addition to explaining behavior, the method show promise for improving model visualization and aggregation.
Rights:
Date Uploaded:
March 10, 2026

Using these materials

Access:
The archives are open to the public and anyone is welcome to visit and view the collections.
Collection restrictions:
Access to this collection is unrestricted unless otherwide denoted.
Collection terms of access:
https://creativecommons.org/licenses/by/4.0/

Access options

Ask an Archivist

Ask a question or schedule an individualized meeting to discuss archival materials and potential research needs.

Schedule a Visit

Archival materials can be viewed in-person in our reading room. We recommend making an appointment to ensure materials are available when you arrive.