# The Spread of a Meme Across a Social Network

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:

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.

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.

## 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

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.

## Attached files

File | Type | Description | Last updated | |
---|---|---|---|---|

372 Final Poster.pdf | Final Poster | about 8 years ago, by Kristen Amaddio | Download | |

Amaddio_Kristen_ProjectReport_300-level.pdf | Final Paper | about 8 years ago, by Kristen Amaddio | Download | |

Amaddio_Kristen_Slam.pdf | Poster Slam Slides (6/4/15) | about 8 years ago, by Kristen Amaddio | Download | |

The Spread of a Meme Across a Social Network.png | preview | Preview Image for Model | about 8 years ago, by Kristen Amaddio | Download |

**Parent:** Trendsetting

This model does not have any descendants.