This page was automatically generated by NetLogo 5.0.5.

The applet requires Java 5 or higher. Java must be enabled in your browser settings. Mac users must have Mac OS X 10.4 or higher. Windows and Linux users may obtain the latest Java from Oracle's Java site.


In order for this to work, this file, your model file (SpiraleDelSilenzio_CeeCom2014_FrK_web.nlogo), and the files NetLogoLite.jar and NetLogoLite.jar.pack.gz must all be in the same directory. (You can copy NetLogoLite.jar and NetLogoLite.jar.pack.gz from the directory where you installed NetLogo.)

On some systems, you can test the applet locally on your computer before uploading it to a web server. It doesn't work on all systems, though, so if it doesn't work from your hard drive, please try uploading it to a web server.

You don't need to include everything in this file in your page. If you want, you can just take the HTML code beginning with <applet> and ending with </applet>, and paste it into any HTML file you want. It's even OK to put multiple <applet> tags on a single page.

If the NetLogoLite files and your model are in different directories, you must modify the archive= and value= lines in the HTML code to point to their actual locations. (For example, if you have multiple applets in different directories on the same web server, you may want to put a single copy of the NetLogoLite files in one central place and change the archive= lines of all the HTML files to point to that one central copy. This will save disk space for you and download time for your users.)

powered by NetLogo

view/download model file: SpiraleDelSilenzio_CeeCom2014_FrK_web.nlogo
NOTE: This model is only for demonstration purposes, or for wandering-how-it-might-be purposes only. For more rigorous experiments and improving program code of the model, please download this version: rigorous version for experiments. I apologize, but for rigorous version is needed access to your hard-disk which java applets can't do. In case of interest in developing the model, download and install NetLogo first, then download model and open it in NetLogo.
Contact to author: kalvas(at)kss.zcu.cz

CODE

;; HEAD:
;; Simulation of Spiral of Silentce theory
;; Writen:  by FrK 2014/06/08
;; Revised: by FrK 2014/06/10

;; LERATURE:
;; Simulation is mainly based on texts:
;; Willnat, Lars. 1996. "Mass media and Political outspokeness in Hong Kong: Linking the third-person effect and the spiral of silence". IJPOR 8(2): 187-212.
;; Scheufele, Dietram A., James Shanahan, Eunjung Lee. 2001. "Real talk: Manipulating the dependent variable in spiral of silence research". Communication Research 28(3): 304-324
;; 
;; After developement of model's draft also revised/checked sources:
;; Glynn, Carroll J., Andrew F. Hayes, James Shanahan. 1997. "Perceived support for one's opinions and willingness to speak out: A meta-analysis of survey studies on the 'spiral of silence'". The Public Opinion Quarterly(POQ) 61(3): 452-463.
;; Granovetter, Mark, Roland Soong. 1988. "Treshold models of diversity: Chinese restaurants, residential segregation, and the spiral of silence". Sociological Methodology 18: 69-104.
;; Scheufele, Dietram A. 1999. "Deliberation or dispute? An exploratory study examining dimensions of public opinion expression". IJPOR 11(1): 26-58.
;; Bodor, Tamas. 2012. "The issue of timing and opinion congruity in spiral of silence research: Why does research suggest limited empirical support for the theory?". IJPOR 24(3): 269-286.
;; Noelle-Neumann, Elizabeth. 1997. "Turbulences in the climate of opinion: Methodological applications of the spiral of silence theory". POQ 41(2): 143-158.

;; MAIN IDEAS:
;; Main idea is to build model on the tendency to avoid embarrassing public revealing of our opinion. My model stems from this basic idea.
;; So, fear of isolation (FoI) is represented by margin of Dice (respective its lower bound, upper bound, and the middle) which an agent uses to 
;; roll against risk treshold - when agent rolls same or bigger number than treshold, he speaks, when lower, he falls/remains silent.
;; Using this Dice-mechanism, I would like to simulate probabilistic nature of the process (the "social skin" methaphor), cos' I personally 
;; belive more in methaphor of social skin than "quasi-statistical sense". I believe we have no exact calculator in our mind, but by scanning our environment continuosly,
;; we have got idea about rough proportion about proponents and opponents of our opinion. And that we have also some treshold, how severe opposition we can stand. But we never calculate
;; like: "OK, my treshold is 57% of opponents in the environment, there are 9 people, 5 oppose me, 5/9 is 55%, it is lower than my treshold, so I will openly speak my mind."
;; I believe, that all is about feeling ease or unease like when our soft skin pains or does not. If the proportions are fare from our treshold, we do not feel our skin,
;; because we are confident that we are in comfortable majority and there is no space for embarrasement or we are in deep minority and we can be sure of embarrasement. Our skin
;; is softer and softer as we approaching to our treshold (never mind from which side - from bottom up or from top down), BECAUSE WE ARE NOT SURE about risk we are facing of.
;; And when is our skin soft, we sometimes speak, sometimes not. And exactly this is now in the heart of my simulation:
;; agent has setted bounds of his own dice, if the risk treshold is higher than upper bound, agent is definitely silent (has no chance to roll bigger number), 
;; if the risk is below lower bound, the agent definitely speaks (has no chance to roll smaller number than treshold), in case the treshold is somwhere between bounds
;; agent rolls dice - it is evident that success in such a roll is conditioned by position of treshold inside the bounds: the lower is the larger chance agent has to overcome treshold and start to speak.
;; 
;; Construction of Dice:
;; Because I am not sure if we, humans, have some natural and same margin of such a dice, I will set it randomly:
;; firstly, I randomly set the mid-point in the interval <0;1>
;; secondly, I set bounds - if the mid-point is lower than 0.5, I set randomly lower bound in the interval <0;mid-point>
;;                        - if the mid-point is same or higher than 0.5, I set randomly upper bound in the interval <mid-point;1>
;; thirdly, I count the missing bound according equation: missingBound = (2 * mid-point) - settedBound
;; The mid-point will be used as numerical representation of FoI level for the other purposes in model (see later)
;; Another possibility is take margin of dice as same for all agents, let's say 0.1, and randomly set just lower bound in the interval <-margin;1> 
;; (according assumption margin = 0.1 it would be <-0.1;1>), so the agents with extreme FoI (extreme couragious or extreme shy) would have narrower
;; margin of the dice (bounds outside interval <0;1> would be set to 0 or 1 and FoI recounted as: FoI = (lowerBound + upperBound) / 2).
;; Or do it in plain random way - generate two numbers, lower set as lower bound, higher as a upper boud and count FoI (see above).
;; So, construction of Dice represents FoI level of the agent and FoI's role in the model.
;; NOTE: In the program there is no variable named "mid-point", it is because I generate FoI firstly, so I use this FoI for construction of dice's margin and bounds, there is no point in code like "set mid-point FoI"
;; 
;; How the model/agent works:
;; 0) world is created: 1600 patches, 1000 of them are asked to give a birth to one agent
;; 1) at the initalization phase agents' Dice and variables (FoI, media exposure, opinion/its non-presence, proneness to 3rd person effect (3PE), alpha (weight of the silents), number of other agents in neighborhood (allAgents)) are setted 
;; 2) also model's variables are setted (beta (weight of acquired knowledge), maximum-knowledge-treshold (number of information bits needed for information saturation of the agent), broadcast (number of information bits broadcasted by media in each turn - constant or function))
;; 3) simulation parameters will be setted (poisson-mean, normal-range, maximal-knowledge-treshold, beta, alphas)
;; 4) parameters of setting are reported
;; common turn:
;; 5) agent scan neoghborhood (= 20 nearest patches) and according notion of minority/majority (3PE), the numbers of opposing agents, and the silents he sets basic perceived risk (risk0)
;; 6) agent takes from his memory parameters of the past situation(s), counts prediction of future devolopement of opinion climate in neighborhood, and changes risk estimation (riskF)
;; 7) agent uses knowledge he knows about issue and changes risk estimation for the last time (risk)
;; 8) agent rolls dice inside its bounds, if the result is higher then risk estimation he speaks, if isn't he is silent (WARNING! dice is rolled by all agents - speking or silent!)
;; 9) media broadcast information about issue
;; 10) agent acquires some knowledge about issue from media through equation Kt = Kt-1 + dK; dK = beta * exposure * broadcast / maximal-knowledge-treshold; Kt0 = 0
;; 11) day ends, so to report turn, to tick, and go back to point (5)
;; end of simulation:
;; 12) report final state (WHAT TO REPORT?)
;; Open question: How to stop model? After maximum of silents reached? After 35 days - because Bodor reported that spiraling process was recognizable it he secod week of three weeks study, so 35 days for sure?
;;
;; Basic equations:
;; risk0 = (openlyOpposingAgentsT + alpha * silentsT) / allAgents ;; heart of the model, this is counting of risk treshold if there would be no future prediction, and no knowledge, only 3PE - for omitting also 3PE set alpha = 0.5
;; riskF = risk0 + ((openlyOpposingAgentsDifference + alpha * silentsDifference) / 2 * allAgents) ;; basic risk treshold corrected by prediction of future developement
;; riskT = riskF * (1 - knowledgeT) ;; final risk treshold, corected also by agent's knowledge about issue
;; knowledgeT = knowledgeT-1 + dK according condition knowledgeT < beta 
;;                                if condition is not true, then knowledgeT = beta ;; knowledge at time T is same as day before, just with added knowledge gained meanwhile, 
;;                                                                                 ;; NOTE assumtion, that there is treshold above which additional does not lessen riskF
;; dK = beta * exposure * broadcast / knowledge-treshold ;; according her interest in media information (exposure) agent receives part of broadcasted information about issue until she reaches her treshold which is needed to be reached to maximally leave shyness
;;                                                       ;; beta is weight of knowledge in final risk equation
;; exposure = floor((random-float 1 + random-float 9) / 10 * (random-float 1  + random-float 9) / 10 * maximal-knowledge-treshold) ;; random integer, but skewed form right, average cca 25 % of maximal-knowledge-treshold, median cca 20 % maximal-knowledge-treshold
;; broadcast = maximal-broadcast - random(7 * maximal-broadcast / 9) + random(2 * maximal-broadcast / 9);; random integer, or it could be constant for whole simmulation, or it could be a function of time
;; knowledge-treshold = (1 - FoI) * maximal-knowledge-treshold
;; openlyOpposingAgentsDifference = openlyOpposingAgentsT - openlyOpposingAgentsT-1
;; silentsDifference = silentsT - silentsT-1
;; all T-1 variables are restored from memory
;; openlyOpposingAgentsT and silentsT are scaned in the neighborhood (20 nearest patches)
;;

;; FUTURE DEVELOPEMENT:
;; Employ Agent_Zero of Joshua Epstein: 
;; It is proposed by SoS theory that process of SoS has its affectional and rational part,
;; Elizabeth Noelle-Neumann also stressed the public opinion has its rational and affectional/emotional side.
;; It sounds reasonable to me now to start think also in terms of Epstein's dispositions, so that there are 
;; rational and emotinal dispositions, connected to one and this one is contagious and this proneness to
;; others agents' to the one disposition is the third and the last part of over-all disposition.
;; In case of SoS theory, the disposition to speak would be contagious, who doesn't ovecome treshold of speaking will remain silent.
;; My idea is completely neglect opinion side of the others - contagiuos would be speaking, not speaking exact opinion. After all,
;; I can also simulate and model contagiousness of speaking exact opinion and we will see whether there is difference and what looks more realistic.

 
breed [Smiths Smith]
breed [Joneses Jones]
breed [Bonds Bond]
breed [waiters waiter]

turtles-own 
[
  opinion
  speaksAtLeastOnce
  pe3 ;; indicates whether person is prone to 3rd person effect or not
  recognizedMinority ;; indicates whether agent rocognized, which part of conflicting issue is coined by media as minority
  allAgents 
  FoI ;; BE AWARE: abbreviation FoI comes from fear of isolation, but because of history of my work it now happens that it mens complete opposing thing:
      ;; 1 is for absolutly fearless individual, 0 for absolutly shy and feared one, BE AWARE, that now it means "the amount of fear the one can stand"!
  lowerBound upperBound ;; margins of the agent's dice    
  risk0 riskF riskT
  alpha 
  knowledgeT knowledgeT-1 
  dK exposure knowledge-treshold 
  openlyOpposingAgentsT openlyOpposingAgentsT-1 openlyOpposingAgentsDifference
  silentsT silentsT-1 silentsDifference
]

globals 
[
  meanX 
  modeX
  ;; beta is slider - for setting weight of the knowledgeT in the riskT equation
  ;; poisson-mean and normal-range are sliders - for setting shape of exposure distribution 
  ;; maximal-knowledge-treshold is slider - for setting knowledge-treshold of agent by FoI
  broadcast
  greens ;; agents openly speaking disfavoring opinion
  blues  ;; agents openly speaking favoring opinion
  greys  ;; silent agents - whether Smiths (favoring), Joneses (disfavoring), or Bonds (no opinion)
  ;; nSmiths is slider - setting how many Smiths will be inicialized
  ;; nJoneses is slider - setting how many Joneses will be inicialized
  ;; nBonds is slider - setting how many Bonds will be inicialized  
  dice ;; for purposis of storing of randomly generated numbers  
  JohnDoe ;; who-number of John Doe - might be useful for inspection and reports
  ;; notion-of-minority-treshold is slider - setting how much information agent needs to recognize which side of conflicting issue is judged as minority, in Bodor's words: the evil one
  ;;                                       - NOTE that it is ratio, defaultly set as 0.1, telling us how much must agent fullfill his information treshold to recognize who is in the minority / who is the evil
  file            ;; filename
  ;;repeats slider;; number of simulation runs per individual setting 
  counter         ;; counter which stores number of running simulation
  ;;days is slider;; number of simulated days
  reportedDice
    
]

to setup
;; Firstly, I check sliders, whther is there any problem...
if (nBonds + nSmiths + nJoneses) > 1600 
[
  print "There is not enough of space for all the agents you would like to initialize! Check sliders, it must hold true that: (nBonds + nSmiths + nJoneses) <= 1600." 
  stop
]
  
;; clear patches and turtles
ca

;; sprout agents
ask n-of (nBonds + nSmiths + nJoneses) patches [sprout-waiters 1]

;; randomly pick agents which will be prone 3rd Person Effect
ask n-of (portion-prone-to-3PE * count turtles) turtles [set pe3 1]

;; to randomly set Smiths, Joneses and Bonds, and their initial variables
initialize-agents  

;; Set variables for description of neighbors distribution 
set meanX (mean [allAgents] of turtles)
set modeX (modes [allAgents] of turtles)

;; Report the description of neighbors distribution
report-distributions

;; Set John Doe - most common agent - for demonstrational reasons
set-John-Doe

reset-ticks
end

to go
;; Firstly, set the broadcasted messages for today
set broadcast (maximal-broadcast - random(7 * maximal-broadcast / 9) + random(2 * maximal-broadcast / 9))
   
;; common turn:
;; 5) agent scan neoghborhood (= 20 nearest patches or number set by slider: "radius-of-neighborhood") and according notion of minority/majority (3PE), the numbers of opposing agents, and the silents he sets basic perceived risk (risk0)
ask turtles with [breed != Bonds]
  [
    if breed = Smiths [set openlyOpposingAgentsT (count other turtles with [color = green] in-radius radius-of-neighborhood) ]
    if breed = Joneses [set openlyOpposingAgentsT (count other turtles with [color = blue] in-radius radius-of-neighborhood) ]
    set silentsT (count other turtles with [color = grey] in-radius radius-of-neighborhood)
    ifelse PE3-on
      [
        set risk0 precision ((openlyOpposingAgentsT + (silentsT * (0.5 + (alpha * pe3 * recognizedMinority)))) / allAgents) 5   ;; this is original idea of the model
      ]
      [
        set risk0 precision ((openlyOpposingAgentsT + (silentsT * 0.5)) / allAgents) 5 ;; as an experiment I try to neglect role of 3rd Persons Effect
      ]
    set openlyOpposingAgentsDifference (openlyOpposingAgentsT - openlyOpposingAgentsT-1)
    set silentsDifference (silentsT - silentsT-1)
    if ticks <= 1 [set openlyOpposingAgentsDifference 0 set silentsDifference 0]
    set riskF precision (risk0 + ((openlyOpposingAgentsDifference + ((0.5 + (alpha * pe3 * recognizedMinority)) * silentsDifference)) / (2 * allAgents))) 5
    set dK precision (beta * exposure * broadcast / maximal-knowledge-treshold) 5
    set knowledgeT precision (knowledgeT-1 + dK) 5
    if knowledgeT > beta [set knowledgeT beta]
    ifelse knowledge-on 
      [
        set riskT precision (riskF * (1 - knowledgeT)) 5 ;; this is original idea of the model
      ]
      [
        set riskT riskF ;; as an experiment I try to neglect role of the knowledge, see what happens
      ]



    ;;set riskT ( risk0 * (1 - knowledgeT))   ;; NOTE change of original idea, in case of taste go bakc: (1) put ";;" on the start of this line, (2) erase ";;" at the start of the line above
    ;;if riskT < 0 [set riskT 0]
    ;;if riskT > 1 [set riskT 1]
    
    ifelse (lowerBound + random-float(upperBound - lowerBound)) > riskT [set color opinion set speaksAtLeastOnce 1] [set color grey]
    
    set openlyOpposingAgentsT-1 openlyOpposingAgentsT
    set silentsT-1 silentsT
    set knowledgeT-1 knowledgeT
  ]

 
;; 6) agent takes from his memory parameters of the past situation(s), counts prediction of future devolopement of opinion climate in neighborhood, and changes risk estimation (riskF)
;; 7) agent uses knowledge he knows about issue and changes risk estimation for the last time (risk)
;; 8) agent rolls dice inside its bounds, if the result is higher then risk estimation he speaks, if isn't he is silent (WARNING! dice is rolled by all agents - speking or silent!)
;; 9) media broadcast information about issue
;; 10) agent acquires some knowledge about issue from media through equation Kt = Kt-1 + dK; dK = beta * exposure * broadcast / maximal-knowledge-treshold; Kt0 = 0
;; 11) day ends, so to report turn, to tick, and go back to point (5)
   
   
   
   set greys count turtles with [color = grey]
   set blues count turtles with [color = blue]   
   set greens count turtles with [color = green]   
   
   ;;if ticks > 0 [report-results] ;; I think it might be better report everithing and then maybe erase some results
   
   
   tick
   
end

to initialize-agents 
;; set randomly distributed variables od the agents
;; 1) at the initalization phase agents' Dice and variables (FoI, media exposure, opinion/its non-presence, proneness to 3rd person effect (3PE), alpha (weight of the silents), number of other agents in neighborhood (allAgents)) are setted 
ask turtles 
[
  set color grey
  set allAgents (count other turtles-on patches in-radius radius-of-neighborhood)
  set FoI precision (random-normal random-mean random-sd) 5
  if FoI > 1 [set FoI 1]
  if FoI < 0 [set FoI 0] 
  set knowledge-treshold precision (((1 - FoI) * maximal-knowledge-treshold)) 5
  set heading precision ((FoI * 180) - 90) 5
  ifelse FoI <= 0.5
    [
      set lowerBound precision (random-float FoI) 5
      set upperBound precision ((2 * FoI) - lowerBound) 5
    ]
    [
      set upperBound precision (FoI + (random-float (1 - FoI))) 5
      set lowerBound precision ((2 * FoI) - upperBound) 5
    ]
  set exposure floor((random-poisson poisson-mean) * (random-float normal-range))
  ;set exposure floor((random-float 1.01 + random-float 9.01) / 10 * (random-float 1.01  + random-float 9.01) / 10 * maximal-knowledge-treshold)
  if exposure > maximal-knowledge-treshold [set exposure 2 * maximal-knowledge-treshold - exposure]
]

  set dice random 6
  if dice = 0 [set-Smiths set-Joneses set-Bonds]
  if dice = 1 [set-Smiths set-Bonds set-Joneses]
  if dice = 2 [set-Joneses set-Smiths set-Bonds]
  if dice = 3 [set-Joneses set-Bonds set-Smiths]
  if dice = 4 [set-Bonds set-Joneses set-Smiths]  
  if dice = 5 [set-Bonds set-Smiths set-Joneses]    
end

to set-Smiths
  ask n-of nSmiths waiters
  [
    set breed Smiths
    set opinion blue
    set alpha 0 - margin-of-3PE
  ] 
end

to set-Joneses
  ask n-of nJoneses waiters
  [
    set breed Joneses
    set opinion green
    set alpha margin-of-3PE
  ] 
end

to set-Bonds
  ask n-of nBonds waiters
  [
    set breed Bonds
    set opinion grey
  ] 
end

to report-distributions
type "Most common number of neighbors: "
type modex
set modeX first modeX
type ", Average density of neighborhood: "
type precision (meanX / 20) 3 
type ", Maximal number of neighbors: "
type max [allAgents] of turtles
type ", Maximal exposure: "
type max [exposure] of turtles
type ", Mean exposure: "
type precision mean [exposure] of turtles 3
type ", dice: "
print dice
set reportedDice dice ;; NOTE: result is stored for purposes of reporting results

end

to set-John-Doe
ask one-of turtles with [opinion = green and allAgents = modeX] 
[
  set JohnDoe who
  ask patches in-radius radius-of-neighborhood 
    [
      set pcolor yellow
    ]
  ask patch-here 
    [
      set pcolor sky
      set plabel "John Doe"
      set plabel-color orange
    ]
]
end