Diffusion

Social diffusion via direct contacts and/or a basic conversion rate

Diagram

Information

This information is part of the Business Simulation Library (BSL). Please support this work and ► donate.

This is more or less the classical Bass diffusion model [5] that explains how new products get adopted in a population:  Potential adopters turn into adopters being affected either by advertising or promotion (i.e., as innovators) or by social interaction ("word of mouth") with adopters (i.e., as imitators).

The basic model for diffusion can also be used to model the spread of infectious diseases (→SIR). Since the disease is ultimately spread by contact with an infected person, the fractionalAdoptionRate in this case should be zero.

While the structure in principle folllows Sterman's implementation [3, chapter 9], the component has been put in a more general form. We have to distinguish the following subgroups that make up the total population of potential contacts for social interaction:

  • Potential adopters ("susceptible")—the stock connected to portA

  • Adopters ("infected")—the stock connected to portB

  • Other population ("immune") the sub population that is neither adopter or potential adopter

  • Other adopters ("other infected") the sub population that is also influencing potential adopters, but not the "next stage" (adopters/infected)

Depending upon the structural parameter nextStageIsInfluencing we may choose to take the converted adopters out of the group of influencers, e.g., a freshly converted adopter may not yet be entusiastic enough, while more elaborate epidemic models like the SEIR model distinguish an exposed stage, that is not yet infectious.

Implementation

The behavior of the component is exactly specified by the following equations:


totalPopulation = potentialAdopters + otherPopulation + adopters + otherAdopters
adoptionRate = potentialAdopters · fractionalAdoptionRate
conversionRate = potentialAdopters·(otherAdopters [+ adopters])·adoptionFraction·contactRate / totalPopulation
totalAdoptionRate = adoptionRate + conversionRate

Notes

  • All else being equal the process will produce S-shaped growth of adopters.

  • If advertising has no effect there needs to be a seed of initial adopters to set off the dynamics.

  • The classical Bass model only has two parameters. This can be obtained as a special case of the given structure by simply setting contactRate and totalPopulation to 1. The parameters fractionalAdoptionRate and adoptionFraction then correspond to the parameters used by Bass (note: the units for adoptionFraction are then different.

Parameters (11)

otherAdopters

Value: unspecified

Type: People (#)

Description: Other adopters involved in influencing potential adopters

otherPopulation

Value: unspecified

Type: People (#)

Description: Other potential contacts that are neighter adopters or potential adopters

contactRate

Value: unspecified

Type: Rate (1/s)

Description: Social contacts per person per period for adopters

fractionalAdoptionRate

Value: unspecified

Type: Rate (1/s)

Description: Basic conversion rate independent from social contacts

adoptionFraction

Value: unspecified

Type: Fraction

Description: Fraction of social contacts that will result in adoption

hasConstantOtherAdopters

Value: false

Type: Boolean

Description: = true, if other adopters are given by the parameter and not by the continuous input

hasConstantOtherPopulation

Value: false

Type: Boolean

Description: = true, if other population is given by the parameter and not by the continuous input

hasConstantContactRate

Value: false

Type: Boolean

Description: = true, if the rate of social contacts is given by the parameter and not by the continuous input

hasConstantFractionalAdoptionRate

Value: false

Type: Boolean

Description: = true, if the fractional adoption rate is given by the parameter and not by the continuous input

hasConstantAdoptionFraction

Value: false

Type: Boolean

Description: = true, if true the adoption fraction is given by the parameter and not by the continuous input

nextStageIsInfluencing

Value: true

Type: Boolean

Description: = true, if true the next stage (adopters) are influencing potential adopters

Connectors (4)

portA

Type: FlowPort

Description: Port connected to stock of potential adopters

portB

Type: FlowPort

Description: Port connected to stock of adopters

dataOut

Type: DataOutPort

Description: Expandable connector for output

dataIn

Type: DataInPort

Description: Expandable connector for input

Components (26)

totalAdopters

Type: Add_2

Description: Sum of adopters and other adopters

totalPotentialContacts

Type: Add_3

Description: Total population with regard to potential contacts for adopters

adjustedTotalAdopters

Type: Add_2

Description: Depending on whether they influence or not the next stage (adopters) has to be added

adoptersNotInfluencing

Type: Gain

Description: Input is multiplied by constant parameter

adoptersInfluencing

Type: PassThrough

Description: Output is identical to input

doNotAddAdopters

Type: ConstantConverter

Description: Do not add adopters to popoulation as they are already included

addAdoptersToPopulation

Type: PassThrough

Description: Adopters are not influencing and thus have to be added to potential contacts

potentialAdopters

Type: FlowPortSensor

Description: Potential Adopters as given by stock connected to port A

adopters

Type: FlowPortSensor

Description: Level of adopters as given by stock connected to port B

converting

Type: Transition

Description: Conversion of potential adopters to adopters

parOtherPopulation

Type: ConstantConverter

Description: Constant opther population (optional)

u_otherPopulation

Type: PassThrough

Description: Continuous input of other population (neither adopter nor potential adopter)

potAdoptConcentration

Type: Division

Description: Concentration of potential adopters

u_ContactRate

Type: PassThrough

Description: Rate of social contacts for adopters

parContactRate

Type: ConstantConverter

Description: Social contact rate for adopters (people per people per period)

contactsAdopters

Type: Product_2

Description: Contacts with adopters per period

contactsWithPotAdopt

Type: Product_2

Description: Contacts of adopters with potential adopters

u_AdoptionFraction

Type: PassThrough

Description: Conversion propability for interaction of potential adopters with adopters

conversionRate

Type: Product_2

Description: Rate of conversion

u_FractAdoptRate

Type: PassThrough

Description: Continuous fractional adoption rate

adopting

Type: ProportionalTransition

Description: Conversion independent from social contacts

parAdoptionFraction

Type: ConstantConverter

Description: Constant adoption fraction (optional)

totalAdoptionRate

Type: Add_2

Description: Sum of two inputs

parOtherAdopters

Type: ConstantConverter

Description: Constant opther adopters (optional)

u_otherAdopters

Type: PassThrough

Description: Continuous input of other adopters envolved in influencing potential adopters

parFractAdoptRate

Type: ConstantConverter

Description: Constant fractinal adoption rate (optional)

Used in Examples (2)

SimpleProductionChainIII

BusinessSimulation.Examples

Further extending the first example to explain new product diffusion

SIR

BusinessSimulation.Examples

Classical epidemic model by Kermack and McKendrick

Revisions

  • Connectors DataOutPort and DataInPort changed to encapsulated expandable connector classes in v2.1.0.

  • Values for optional parameter inputs changed to unspecified in v2.1.0.