The Spread of a Meme Across a Social Network

The Spread of a Meme Across a Social Network preview image

This model is seeking new collaborators — would you please help?

2 collaborators

Default-person Kristen Amaddio (Author)
Default-person Sean Dalton (Author)

Tags

memes 

Tagged by Sean Dalton over 2 years ago

social networks 

Tagged by Sean Dalton over 2 years ago

Child of model Trendsetting
Model group MAM-2015 | Visible to everyone | Changeable by everyone
Model was written in NetLogo 6.2.0 • Viewed 2572 times • Downloaded 137 times • Run 0 times
Download the 'The Spread of a Meme Across a Social Network' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


WHAT IS IT?

The purpose of this model is to examine how memes spread across a social network, and to explore the effects of different influences on this spread.

Influence factors include:

  • Friends
  • Media
  • Inherent "category" of meme and "interest category" of a person
  • Popularity of the "trend-setter", the person who starts the meme

    In this model, the "turtle" agents are people, the "link" agents represent relationships between the people, and the "patches" act as TV/media influences.

    HOW IT WORKS

    First, a social network must be created. To do this, we use the "Preferential Attachment" method. In this method, we start with two nodes connected by an edge. Then, at each step, a node is added. The new node chooses to connect to an existing node randomly, but with a bias based on the number of connections, or "degree", the existing node already has. So the higher the degree of an existing node, the more likely a new node will connect to it. A new node "prefers" to connect to an existing node with a higher number of connections. (See the "Preferential Attachment" Sample Model.)

    When the network is generated, each "node", or person in this model, is given an "INTEREST-CATEGORY", an integer ranging between 0 and 9, that represents the sort of subject matter that person is interested in. The person is also initialized as gray to show that they are not currently following the meme (i.e. they are not TRENDY). A person's "POPULARITY" is the exact value of their degree, or how many links they have to other people in the social network.

    Next, it's time to start a meme. First, a TREND-SETTER must be seeded. This person will turn a color based on their "INTEREST-CATEGORY", indicating that they follow the meme (i.e. they are TRENDY). Each meme will have a "TREND-CATEGORY", an integer ranging between 0 and 9 that directly corresponds with the categories given by the "INTEREST-CATEGORY" values of the people who made them. The current meme's "TREND-CATEGORY" will be the exact value of the TREND-SETTER's "INTEREST-CATEGORY".

    Finally, we must spread this meme across the social network. At each clock tick, if a person is following a meme (i.e. they are TRENDY), then they will try to spread it to one of their linked neighbors. The success of the spread depends on the INTEREST-CATEGORY of the target neighbor. The closer the TREND-CATEGORY of the meme is to the INTEREST-CATEGORY of the neighbor, the more likely that neighbor is to follow the meme (and become TRENDY). So if a meme is about a subject matter that a person is interested in, they will be more open to accepting and spreading it.

    The media can also help spread the meme across the social network if the MEDIA? switch is turned on (see below in the "HOW TO USE IT" section). In this case, a random patch with people on it will flash white at a given frequency of ticks, emulating the act of people watching a TV. This patch will select one of the people on it as its target, attempting to spread the meme to them if they are not already TRENDY. The success of the spread depends on "MEDIA-INFLUENCE". If the target becomes TRENDY, then it will follow the typical turtle behavior outlined in the previous paragraph, trying to spread the meme to its linked neighbors.

    HOW TO USE IT

    I. Setting Up the Network

    Use the POPULATION slider to select the number of people you want to exist in the social network.

    The SETUP button provides a starting point for the network (two people connected by a link).

    Click the CREATE-NETWORK button to allow the preferential attachment network to fully form. It will stop when the POPULATION number of people is reached, resetting ticks to 0 and releasing the button.

    The LAYOUT? switch controls whether or not the layout procedure is run. This procedure intends to make the network structure easier to see by moving the nodes around. You can also use the REDO-LAYOUT button to fix the layout after the network is created.

    The RESIZE-NODES button will make the people take on a physical size that represents their degree distribution. The larger the person, the higher the degree. Press the button again to return the nodes to equal size.

    TRENDY people are open to changing their trend by default, but if the STUBBORN? switch is turned on, people will only follow the first meme successfully spread to them.

    II. Spreading the Meme

    The MEDIA? switch controls whether or not the meme-spreading procedure will use media as a factor. If the switch is turned on, use the MEDIA-FREQUENCY and MEDIA-INFLUENCE sliders. A patch will become a TV every MEDIA-FREQUENCY ticks and its success at spreading the trend increases as MEDIA-INFLUENCE does.

    Use the SEED-TREND button to randomly create TREND-SETTERs, the people who create the memes.

    Press the SPREAD TREND button to spread the trend across the network. You can stop and start the process by pressing the button, or it will automatically end once all people follow a meme.

    The POPULARITY OF TREND-SETTER monitor displays the POPULARITY, or degree, of the person who started the meme in the SEED-TREND command.

    III. Recoloring the View

    You can recolor the view in four different ways:

    DEFAULT: [ color item (trend-category + 1) base-colors ] = following the meme; Gray = not following the meme.

    TREND-SOURCE: Red = followed the meme from a friend; Yellow = followed the meme from the media; Blue = not following the meme.

    TIMES-HEARD: Lighter = more times heard; Darker = fewer times heard.

    POPULARITY: Lighter = higher popularity; Darker = lower popularity.

    THINGS TO NOTICE

    While the model runs, keep an eye on the monitors and plots in the Interface tab. The first plot and the monitors above it keep track of the percentage of people who are TRENDY and follow the meme over time. They also show the percentage of people who started following the meme because a friend spread it to them, and the percentage who started following it because they learned it from the media.

  • How does varying the MEDIA-FREQUENCY affect this plot?
  • Which influence factor seems to be the most prominent?

    The second plot and the monitors above it display the TREND-CATEGORY of the current meme, as well as the distribution of INTEREST-CATEGORY values of the TRENDY people in the form of a histogram. The histogram plots the number of TRENDY people with each INTEREST-CATEGORY in red, as well as a black marker for the current TREND-CATEGORY for comparison.

  • Notice that when MEDIA? is turned on, there is a larger variance of interests from the TREND-CATEGORY earlier in the run.
  • Generally, in earlier ticks, a larger number of TRENDY turtles tend to have INTEREST-CATEGORY values nearest to the TREND-CATEGORY.
  • If you let the model run to completion, all people will be TRENDY; therefore, this histogram will become the distribution of INTEREST-CATEGORY values of all people.

    THINGS TO TRY

    Try creating networks with different POPULATION numbers of people (with the LAYOUT? switch turned on). Does this affect the network shape, or does the degree distribution appear to be the same across all population sizes?

    Try varying the MEDIA-FREQUENCY slider to see how the "Number of Trendy People" plot is affected.

    Explore the different color modes. See if you can find any similarities between the TIMES-HEARD and the TRENDY status of a person. Does the TREND-SOURCE view reveal anything interesting about the distribution of TRENDY turtles? What about POPULARITY?

    EXTENDING THE MODEL

    As the model currently stands, the media has a uniform level of influence with the entire population. The model could be expanded to have the media's influence vary between people. Furthermore, the media could have preferences for which memes to spread, which people to target, etc. How would this affect the media's influence on the spread of a meme?

    It would be quite interesting to see how a meme changes over time. Could a meme mutate as it gets farther and farther away from the source? Could it start shifting to fit other INTEREST-CATEGORY values, and therefore appeal to different people over time?

    NETLOGO FEATURES

    People are turtle agents and the relationships between people are link agents. The model uses the ONE-OF primitive to choose a random link, as well as the BOTH-ENDS primitive to select the two people attached to that link. It also uses BOTH-ENDS to color the link between the people a certain color if both people sharing the link are TRENDY, visually showing the path of the meme.

    The ONE-OF primitive is also used to randomly seed the TREND-SETTER, as well as for each person to choose which of its neighbors it wants to spread the meme to at each tick.

    The LAYOUT method, incorporated from the "Preferential Attachment" sample NetLogo model, uses the layout-spring primitive to place the nodes as if the links are springs and the people are repelling each other. This makes the network much easier to visualize and examine.

    NetLogo provides a network extension that comes with many network primitives. It is not used in this model, but it is a great tool for analyzing network features.

    RELATED MODELS

    This model uses the network-building technique found in the "Preferential Attachment" example in the "Networks" folder of the "Sample Models".

    This model is similar to the "Rumor Mill" sample model in the "Social Sciences" folder, a model in which patches are the primary agents working to spread a rumor spatially across the view.

    CREDITS AND REFERENCES

    This model and additional related files can be found at its page on the Modeling Commons website: http://modelingcommons.org/browse/one_model/4424

    Wilensky, U. (2005). NetLogo Preferential Attachment model. http://ccl.northwestern.edu/netlogo/models/PreferentialAttachment. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.

    Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.

  • Comments and Questions

    Please start the discussion about this model! (You'll first need to log in.)

    Click to Run Model

    globals [color-mode pop] ;; 0 = default, 1 = source, 2 = times heard, 3 = popularity
    
    turtles-own [popularity trendy? trend-setter? interest-category trend-category trend-source times-heard]
    ;; popularity is a number value representing the degree of each turtle
    ;; trendy? is a boolean that is true if the person follows the trend
    ;; trend-setter? is a boolean that is true if the person is seeded the trend (i.e. the overall trend-starter)
    ;; interest-category is an integer representing the type of things the person is interested in
    ;; trend-category is an integer that represents the inherent type of thing a trend is
    ;; (corresponds with same values as interest-category) if the person is carrying a trend.
    ;; trend-source tells whether the turtle followed a trend from a friend, from the media, or both.
    ;; times-heard counts how many times a turtle has heard a meme
    
    patches-own [category]
    ;; category is an integer that represents the inherent type of thing a trend is
    ;; (corresponds with same values as trend-category of a person)
    
    ;; Create people and links.
    
    to setup
      ca
      set color-mode 0 ;; default
      set-default-shape turtles "person"
      make-node nobody ;; first node, unattached
      make-node turtle 0 ;; second node, attached to first node
      ask patches [
        set category -1 ;; -1 corresponds with "no trend", i.e. this patch is not a TV
      ]
      reset-ticks
    end 
    
    ;;;;;;;;;;;;;;;;;;;;;;;;
    ;;;Network Procedures;;;
    ;;;;;;;;;;;;;;;;;;;;;;;;
    
    ;; Network and layout procedures incorporated from Preferential Attachment example model
    
    to create-network
      make-node find-partner ;; find partner and use it as attachment
      tick
      if layout? [layout]
      if count turtles = population [ ;; We want the network to have POPULATION turtles, as set by the slider
        reset-ticks ;; reset the ticks at 0 so we can observe them for the meme-spreading section
        stop
      ]
    end 
    
    ;; used for creating a new node
    
    to make-node [old-node]
      crt 1
      [
        set color gray ;; default "no-trend" color is gray
        set interest-category random 10 ;; an "interest type" category corresponding to one of 0-9
        set trend-category -1 ;; -1 corresponds with "no trend"
        set times-heard 0
        if old-node != nobody
          [ create-link-with old-node
            ;; position new node near its partner
            move-to old-node
            fd 8
          ]
      ]
    end 
    
    ;; Main preferential attachment mechanism. The more connections a node already has, the more likely
    ;; it is to gain another connection.
    
    to-report find-partner
      report [one-of both-ends] of one-of links
    end 
    
    ;;;;;;;;;;;;;;;;;;;;;;;
    ;;;Layout Procedures;;;
    ;;;;;;;;;;;;;;;;;;;;;;;
    
    ;; resize nodes, change back and forth from size based on degree to a size of 1
    
    to resize-nodes
      ifelse all? turtles [size <= 1]
      [
        ;; a node is a circle with diameter determined by
        ;; the SIZE variable; using SQRT makes the circle's
        ;; area proportional to its degree
        ask turtles [set size sqrt count link-neighbors ]
      ]
      [
        ask turtles [set size 1]
      ]
    end 
    
    to layout
      ;; the number 3 here is arbitrary; more repetitions slows down the
      ;; model, but too few gives poor layouts
      repeat 3 [
        ;; the more turtles we have to fit into the same amount of space,
        ;; the smaller the inputs to layout-spring we'll need to use
        let factor sqrt count turtles
        ;; numbers here are arbitrarily chosen for pleasing appearance
        layout-spring turtles links (1 / factor) (7 / factor) (1 / factor)
        display  ;; for smooth animation
      ]
      ;; don't bump the edges of the world
      let x-offset max [xcor] of turtles + min [xcor] of turtles
      let y-offset max [ycor] of turtles + min [ycor] of turtles
      ;; big jumps look funny, so only adjust a little each time
      set x-offset limit-magnitude x-offset 0.1
      set y-offset limit-magnitude y-offset 0.1
      ask turtles [ setxy (xcor - x-offset / 2) (ycor - y-offset / 2) ]
    end 
    
    to-report limit-magnitude [number limit]
      if number > limit [ report limit ]
      if number < (- limit) [ report (- limit) ]
      report number
    end 
    
    ;;;;;;;;;;;;;;;;;;;;;
    ;;;Meme Procedures;;;
    ;;;;;;;;;;;;;;;;;;;;;
    
    ;; seed a trend to one random person
    
    to seed-trend
      ask turtles [
        set popularity count my-links
      ]
      ask n-of meme-count turtles [
        set color item (interest-category + 1) base-colors
        set trendy? true
        set trend-setter? true
        set trend-category interest-category ;; trend is given a "type" corresponding to the turtle's interest
        set times-heard 1
        set size 1.5 ;; distinguish the trend-setter
      ]
    end 
    
    ;; run the model
    
    to go
      ask turtles with [trendy? = true][ ;; ask the trendy turtles to spread the trend
        spread-trend
      ]
      ;; if media is turned on, every  ticks a TV will flash in a patch with a turtle on it.
      if media?[
        ;; a TV will appear once every MEDIA-FREQUENCY ticks
        if ticks mod (media-frequency / 2) = 0 [
          ask one-of patches with [count turtles-here > 0] [
            media-trend
          ]
        ]
        ;; reset TV patches to black
        if ticks mod media-frequency = 0 [
          ask patches with [pcolor = white][
            set category -1
            set pcolor black
          ]
        ]
      ]
      ;; fit to the chosen color-mode
         recolor
      ;; if all of the turtles now follow the trend, stop. The model is over.
      if all? turtles [trendy? = true] [stop]
      tick
    end 
    
    ;; spreading the trend
    
    to spread-trend
      ;; turtles try to spread the trend to one of their linked neighbors
      let target nobody
      set target one-of link-neighbors
      if target != nobody [
        ask target [
          ; when stubborn is on and the target is trendy, the only effect of asking the target will be to increment times heard
          ifelse stubborn? and member? self (turtles with [trendy? = true])  [ set times-heard times-heard + 1 ] [
          ;; diff represents the difference between the turtle's interest category and the category of the trend.
          ;; the smaller the difference, the higher the probability that the trend will be passed to that turtle.
          ;; (i.e. if difference = 0, random number is chosen between 0 and 9. if difference = 9, random number is chosen between 0 and 99
          let diff (interest-category - [trend-category] of myself)
            if 0 = random (10 * (1 + (abs diff))) [
              set color [color] of myself
              set trendy? true
              ;; if the turtle has already adopted the trend from media,
              ;; leave it be. otherwise, set its source to "friend"
              if trend-source != "media" [
                set trend-source "friend"
              ]
              set trend-category [trend-category] of myself
            ]
            set times-heard times-heard + 1
          ]
        ]
        ;; if a trend spreads between 2 turtles, turn the link between them red
        ;; (or blue or green-83 depending on the color-mode)
        ask links [
          if all? both-ends [trendy? = true]
            [ ifelse color-mode = 0 or color-mode = 1
              [set color red]
              [ifelse color-mode = 2
                [set color blue]
                [set color 83]
              ]
            ]
        ]
      ]
    end 
    
    ;; when media? is true, patches run this procedure, representing TV-watching.
    ;; assume that a turtle will accept a trend regardless of category with media exposure
    
    to media-trend
      set pcolor white ;; the turtle watches TV
      ;; the TV broadcasts the current trend
      set category [trend-category] of one-of turtles with [trend-setter? = true]
      ;; the media will try to influence one of the turtles on the TV patch
      let watcher one-of turtles-here
      if watcher != nobody [
        ask watcher[
          set times-heard times-heard + 1
          if random 10 <= media-influence [
          set color item ([category] of myself + 1) base-colors
          set trendy? true
          ;; if the turtle has already adopted the trend from a friend,
          ;; leave it be. otherwise, set its source to "media"
          if trend-source != "friend" [
            set trend-source "media"
          ]
          ;; they now follow the trend, therefore housing the same TREND-CATEGORY as every other TRENDY? turtle
          set trend-category [category] of myself
          ]
        ]
      ]
    end 
    
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;;;Recoloring Procedures;;;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;
    
    ;; procedure to recolor to the default scheme -- color-mode = 0
    ;; not blue = trendy, blue = not trendy
    
    to recolor-default
      ask turtles [
        ifelse trendy? = true
          [set color item (trend-category + 1) base-colors]
          [set color gray]
      ]
      ask patches with [category = -1] [set pcolor black]
      ask links with [color = 83 or color = blue] [set color red]
    end 
    
    ;; procedure to recolor to show source (friend vs media) -- color-mode = 1
    ;; "friend" = red, "media" = yellow, "not trendy" = blue
    
    to recolor-by-source
      ask patches with [category = -1] [set pcolor black]
      ask turtles with [trend-source = "media"] [set color yellow]
      ask turtles with [trend-source = "friend"] [set color red]
      ask turtles with [trend-source = 0] [set color blue]
      ask links with [color = 83 or color = blue] [set color red]
    end 
    
    ;; procedure to recolor to display the number of times heard -- color-mode = 2
    ;; lighter = more times heard, darker = fewer times heard
    
    to recolor-by-times-heard
      ask patches with [category = -1] [set pcolor 3]
      ask turtles [set color scale-color green times-heard 0 world-width * 2]
      ask links with [color = red or color = 83] [set color blue]
    end 
    
    ;; procedure to recolor to show popularity levels -- color-mode = 3
    ;; lighter = higher popularity (i.e. degree), darker = lower popularity
    
    to recolor-by-popularity
      ask patches with [category = -1] [set pcolor 3]
      ask turtles [set color scale-color violet popularity 0 world-width * 2]
      ask links with [color = red or color = blue] [set color 83]
    end 
    
    ;; procedure to recolor according to interest-category of meme
    
    to recolor-by-trend
    end 
    
    ;; procedure to recolor while the "go" function is running
    
    to recolor
      ifelse color-mode = 0
        [recolor-default]
        [ ifelse color-mode = 1
          [recolor-by-source]
          [ifelse color-mode = 2
            [recolor-by-times-heard]
            [recolor-by-popularity]
          ]
        ]
    end 
    
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;;;   Plot Reporters    ;;;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;
    
    to-report current-trends
      show [trend-category] of n-of meme-count turtles with [trend-setter? = true]
    end 
    
    to-report fads
      report n-values meme-count [ i -> i = [trend-category] of turtles with [trend-setter? = true] ]
    end 
    

    There are 7 versions of this model.

    Uploaded by When Description Download
    Sean Dalton over 2 years ago Added multiple memes and media influence. Added to info tab. Download this version
    Sean Dalton over 2 years ago Reverted to older version Download this version
    Sean Dalton over 2 years ago Added multiple memes and media influence. Download this version
    Kristen Amaddio almost 9 years ago Added citations to info tab Download this version
    Kristen Amaddio almost 9 years ago Added in more information, comments, experiments Download this version
    Kristen Amaddio almost 9 years ago Added information to Info tab Download this version
    Kristen Amaddio almost 9 years ago Finalized code and interface, made network preferential attachment Download this version

    Attached files

    File Type Description Last updated
    372 Final Poster.pdf pdf Final Poster almost 9 years ago, by Kristen Amaddio Download
    Amaddio_Kristen_ProjectReport_300-level.pdf pdf Final Paper almost 9 years ago, by Kristen Amaddio Download
    Amaddio_Kristen_Slam.pdf pdf Poster Slam Slides (6/4/15) almost 9 years ago, by Kristen Amaddio Download
    The Spread of a Meme Across a Social Network.png preview Preview Image for Model almost 9 years ago, by Kristen Amaddio Download

    Parent: Trendsetting

    This model does not have any descendants.

    Graph of models related to 'The Spread of a Meme Across a Social Network'