Assignment Description

In this project, you will examine the three types of generators in ego-centric networks:

As part of this project (as guided by the instructor), you will generate the appropriate questionnaires and surveys, collect the data in a repository (database – refer to Topic 8 in CST-425), and analyze it. The instructor will guide you further on the scope and expectation of the analysis and visualization.


Material Explanation

What is an ego-centric network?

“Full or complete network studies ideally examine all specific ties between the full population of interest (e.g., the students in a class or the members of a work team), whereas egocentric network studies often follow the standards of conventional representative sample surveys and examine the immediate network neighborhood of a random sample of the population, usually by asking respondents to identify individuals to whom they have specific ties” (Social Network Analysis: Methods and Examples, 27).

There are three ways to pose questions concerning a respondent’s ego-centric network. The most common instruments are name generators, but resource generators and positional generators can be used as well (Social Network: Methods and Examples, 28).

An example of each of these generators will be shown in this project.


Data Used

Target Population and Inference

“The target population for a survey is the entire set of units for which the survey data are to be used to make inferences.” -http://methods.sagepub.com/reference/encyclopedia-of-survey-research-methods/n571.xml

The target population for the survey in this report is my family, the Segneris. This is going to be an egocentric network study, which normally means that this study will follow the standards of conventional representative sample surveys and examine the immediate network neighborhood of a random sample of the population. In this case, there will not be a random sample, as the entire population will be surveyed.

The questions is as follows: Who do the people in my immediate family seek out to talk about important things? My immediate family will be defined as my parents and siblings, and they will all be surveyed for this report.

A dataframe containing my family members that will be analyzed can be seen below.

family.nodes = read.csv("familyData/familyNodes.csv", check.names = FALSE, header = TRUE)

kable(family.nodes)
id firstname relation_to_connor
f1 Connor self
f2 Jason father
f3 Christine mother
f4 Emma sister
f5 Sara sister

Boundary Specifications

The boundary of a network is the cut-off for connections between nodes to take place. For example, a boundary for a network examining the management hierarchy within a workplace would cut off ties to any nodes that exist outside of that workplace.

The boundary for this network only includes my parents and my siblings. Anyone outside of this group will not be counted.

Sampling Approach

There are three main approaches to social network sampling.

  1. Positional Approach
    • “In the positional approach, researchers sample from among the occupants of a formally defined position—the criteria are thus some form of formal membership” (Social Network Analysis: Methods and Examples, 31).
  2. Reputational Approach
    • “The reputational approach can be applied as part of either a more nominalist or a more realist strategy. In the former case, researchers ask a set of experts to nominate important actors to be included in the study, and then they sample from that list (or study all of the nominated actors). In the more often applied realist strategy, the researchers will start by asking some actors for other important actors; for example, a study of a physician network will start with a few prominent physicians in a city, asking each of them to nominate other well-known physicians in that city, who then may be asked to nominate others as well. Those nominations are used to compile the list of physicians to be studied” (Social Network Analysis: Methods and Examples, 31-32).
  3. Event-based Approach
    • “The event-based approach uses actors’ participation in certain events to establish the inclusion in the network” (Social Network Analysis: Methods and Examples, 34).

The approach analyzed in this report is repuational. This is because the the reputation held by each of my family members about every other family member is being analyzed.


Name Generator

“Name generators are used in social surveys to capture data on a respondent’s immediate network neighborhood. Individual respondents, also called”egos" or “focal actors,” are asked questions to elicit a roster of alters with whom they have a specific relation " (Social Network Analysis: Methods and Examples, 35-36).

Data Collection

For this generator, I made a survey and sent it to each of my family members (I also surveyed myself). The survey stated: “With whom in our immediate family have you discussed important matters to within this past year?”

From this survey I received a list of answers from each family member, and I constructed their responses into a directed adjacency matrix:

family.nameG.links = read.csv("familyData/nameFamilyLinks.csv", row.names = 1, check.names = FALSE)

kable(family.nameG.links)
f1 f2 f3 f4 f5
f1 0 0 1 0 0
f2 1 0 1 1 1
f3 1 1 0 1 1
f4 0 1 1 0 1
f5 1 1 1 1 0

Analysis and Visualization

Below is a visualization of the network derived from the adjacency matrix in the previous section.

family.nameG.graph = graph_from_adjacency_matrix(as.matrix(family.nameG.links))

relationColors = c("#C0392B", "#2ECC71", "#3498DB", "#8E44AD")[family.nodes$relation_to_connor]
plot(family.nameG.graph,
     vertex.label = family.nodes$firstname,
     vertex.label.color = relationColors,
     edge.arrow.size = 0.8,
     edge.color = "gray85",
     vertex.shape = "none",
     vertex.label.font = 2,
     vertex.label.cex = 1.25)
legend(x= -2.0, y= -1.0,
       unique(family.nodes$relation_to_connor),
       pt.bg = unique(relationColors),
       pch = 21,
       pt.cex = 2)

Conclusions

Below is the count of all of the outgoing edges from every node in the network. This represents the total amount of people that each person in my family discusses important things with.

This is found with the outgoing degree formula:

\[k_{i}^{out}=\sum_{j}a_{ji}\]

i = row number in the adjacency matrix

j = column number in the adjacency matrix

k = total number of connections

family.nameG.degOUT = as.data.frame(degree(family.nameG.graph, mode = "out"))
colnames(family.nameG.degOUT) = c("degree_out")
family.nameG.degOUT$firstname = family.nodes$firstname
kable(family.nameG.degOUT)
degree_out firstname
f1 1 Connor
f2 4 Jason
f3 4 Christine
f4 3 Emma
f5 4 Sara

Jason, Sara, and Christine all speak to everyone else in our family about important matters. It seems that only Emma and I don’t speak with everyone. In fact, I’m the outlier here, only speaking with my mother about important issues.

Below is the count of all of the incoming edges from every node in the network. This represents the total amount of family members that discuss important things with each member.

This is found with the incoming degree formula:

\[k_{i}^{in}=\sum_{j}a_{ij}\]

i = row number in the adjacency matrix

j = column number in the adjacency matrix

k = total number of connections

family.nameG.degIN = as.data.frame(degree(family.nameG.graph, mode = "in"))
colnames(family.nameG.degIN) = c("degree_in")
family.nameG.degIN$firstname = family.nodes$firstname
kable(family.nameG.degIN)
degree_in firstname
f1 3 Connor
f2 3 Jason
f3 4 Christine
f4 3 Emma
f5 3 Sara

Christine is the only family member that is spoken with about important matters with every other family member. Everyone else comes in one after her though, and are all one short of having everyone else in the family discuss with them.


Positional Generator

“Positional generators are a way to measure the social resources an ego can draw on through her contacts to facilitate her actions” (Lin & Dumin, 1986; Marsden & Lin, 1982). “The underlying assumption for studies involving positional generators is often that individuals can use the resources available to their contacts through the latter’s formal position” (Social Network Analysis: Methods and Examples, 40).

Data Collection

For this generator, I wrote another survey to distribute to my family members. This time the survey said: “State the job title for the members of your immediate family.”

All of the survey results matched, and I created a dataframe containing the labels associated with each family member’s job:

family.nodes$occupation = c("data scientist", "ceo of SIG", "accountant", "student", "student")
kable(family.nodes)
id firstname relation_to_connor occupation
f1 Connor self data scientist
f2 Jason father ceo of SIG
f3 Christine mother accountant
f4 Emma sister student
f5 Sara sister student

Analysis and Visualization

Below is a visualization of the network derived from an adjacency matrix with every node connected to every other node. This network aims to show the titles that everyone in my family is connected to that are within my family. Everyone is connected to everyone, so the plot mainly displays the occupations held within my family.

family.posG.links = read.csv("familyData/positionalFamilyLinks.csv", check.names = FALSE, row.names = 1)
family.posG.graph = graph_from_adjacency_matrix(as.matrix(family.posG.links))
plot(family.posG.graph,
     vertex.label = paste(family.nodes$firstname, "\n", family.nodes$occupation, sep=""),
     vertex.label.color = relationColors,
     edge.arrow.size = 0.0,
     edge.color = "gray85",
     vertex.shape = "none",
     vertex.label.font = 2,
     vertex.label.cex = 1.25)
legend(x= -2.0, y= -1.0,
       unique(family.nodes$relation_to_connor),
       pt.bg = unique(relationColors),
       pch = 21,
       pt.cex = 2)

Conclusions

There is not much to conclude in this section. The above plot simply displays the connections that my family has access to in terms of the occupations held by members in that family. We all have access to each other, so we all have access, in some way or another, to all of these occupations.


Resource Generator

“A resource generator captures an ego‘s social resources more directly by asking for contacts who can provide certain forms of facilitation” (Social Network Analysis: Methods and Examples, 41).

Data Collection

For the resource generator I made a very simple survey that asks one main question that has three parts. The survey is: “Out of the four other members of your family, label them into one of the these three categories: Provider (makes money that you use), Dependee (uses money that you make), or Neutral.” This survey was created to analyze the monetary forms of facilitation for each member of my family.

From this survey I created a network for every one of my family members with edges connected to every other family member with their relationships labelled according to the survey. Here is an example of the network created from my response to the survey:

family.resG.connor.nodes = family.nodes
family.resG.connor.nodes$resource = c("self", "provider", "provider", "neutral", "neutral")
kable(family.resG.connor.nodes)
id firstname relation_to_connor occupation resource
f1 Connor self data scientist self
f2 Jason father ceo of SIG provider
f3 Christine mother accountant provider
f4 Emma sister student neutral
f5 Sara sister student neutral

Analysis and Visualization

Below is a visualization of networks for each individual survey response I got, with each member of my family being the ego of their own network.

First are my mom and dad:

par(mfrow = c(1, 2))

family.resG.jason.nodes = family.nodes
family.resG.jason.nodes$resource = c("dependee", "self", "neutral", "dependee", "dependee")
family.resG.jason.links = read.csv("familyData/jasonLinks.csv", check.names = FALSE, row.names = 1)

family.resG.christine.nodes = family.nodes
family.resG.christine.nodes$resource = c("dependee", "neutral", "self", "dependee", "dependee")
family.resG.christine.links = read.csv("familyData/christineLinks.csv", check.names = FALSE, row.names = 1)

jasonColors = c("#E74C3C", "#F1C40F", "#2980B9")[as.factor(family.resG.jason.nodes$resource)]

christineColors = c("#E74C3C", "#F1C40F", "#2980B9")[as.factor(family.resG.christine.nodes$resource)]

family.resG.jason.graph = graph_from_adjacency_matrix(as.matrix(family.resG.jason.links))
plot(family.resG.jason.graph,
     vertex.label = family.nodes$firstname,
     vertex.label.color = jasonColors,
     edge.arrow.size = 0.0,
     edge.color = "gray85",
     vertex.shape = "none",
     vertex.label.font = 2,
     vertex.label.cex = 1.25)
legend(x= -2.0, y= -1.0,
       unique(family.resG.jason.nodes$resource),
       pt.bg = unique(jasonColors),
       pch = 21,
       pt.cex = 2)

family.resG.christine.graph = graph_from_adjacency_matrix(as.matrix(family.resG.christine.links))
plot(family.resG.christine.graph,
     vertex.label = family.nodes$firstname,
     vertex.label.color = christineColors,
     edge.arrow.size = 0.0,
     edge.color = "gray85",
     vertex.shape = "none",
     vertex.label.font = 2,
     vertex.label.cex = 1.25)
legend(x= -2.0, y= -1.0,
       unique(family.resG.christine.nodes$resource),
       pt.bg = unique(christineColors),
       pch = 21,
       pt.cex = 2)

Next are my sisters:

par(mfrow = c(1, 2))

family.resG.emma.nodes = family.nodes
family.resG.emma.nodes$resource = c("neutral", "provider", "provider", "self", "neutral")
family.resG.emma.links = read.csv("familyData/emmaLinks.csv", check.names = FALSE, row.names = 1)

family.resG.sara.nodes = family.nodes
family.resG.sara.nodes$resource = c("neutral", "provider", "provider", "neutral", "self")
family.resG.sara.links = read.csv("familyData/saraLinks.csv", check.names = FALSE, row.names = 1)

emmaColors = c("#F1C40F", "#27AE60", "#2980B9")[as.factor(family.resG.emma.nodes$resource)]

saraColors = c("#F1C40F", "#27AE60", "#2980B9")[as.factor(family.resG.sara.nodes$resource)]

family.resG.emma.graph = graph_from_adjacency_matrix(as.matrix(family.resG.emma.links))
plot(family.resG.emma.graph,
     vertex.label = family.nodes$firstname,
     vertex.label.color = emmaColors,
     edge.arrow.size = 0.0,
     edge.color = "gray85",
     vertex.shape = "none",
     vertex.label.font = 2,
     vertex.label.cex = 1.25)
legend(x= -2.0, y= -1.0,
       unique(family.resG.emma.nodes$resource),
       pt.bg = unique(emmaColors),
       pch = 21,
       pt.cex = 2)

family.resG.sara.graph = graph_from_adjacency_matrix(as.matrix(family.resG.sara.links))
plot(family.resG.sara.graph,
     vertex.label = family.nodes$firstname,
     vertex.label.color = saraColors,
     edge.arrow.size = 0.0,
     edge.color = "gray85",
     vertex.shape = "none",
     vertex.label.font = 2,
     vertex.label.cex = 1.25)
legend(x= -2.0, y= -1.0,
       unique(family.resG.sara.nodes$resource),
       pt.bg = unique(saraColors),
       pch = 21,
       pt.cex = 2)

Finally, me:

par(mfrow = c(1, 1))

connorColors = c("#F1C40F", "#27AE60", "#2980B9")[as.factor(family.resG.connor.nodes$resource)]

family.resG.connor.links = read.csv("familyData/connorLinks.csv", check.names = FALSE, row.names = 1)
family.resG.connor.graph = graph_from_adjacency_matrix(as.matrix(family.resG.connor.links))
plot(family.resG.connor.graph,
     vertex.label = family.nodes$firstname,
     vertex.label.color = connorColors,
     edge.arrow.size = 0.0,
     edge.color = "gray85",
     vertex.shape = "none",
     vertex.label.font = 2,
     vertex.label.cex = 1.25)
legend(x= -2.0, y= -1.0,
       unique(family.resG.connor.nodes$resource),
       pt.bg = unique(connorColors),
       pch = 21,
       pt.cex = 2)

Conclusions

The above plots aim to show the monetary resources available in my family based on who provides for whom. The basic outcome to pull from these plots is that the parents of the family provide for the children, which is to be expected.


References

Math Insight. (n.d.). Retrieved February 04, 2018, from https://mathinsight.org/degree_distribution

Target Population. (n.d.). Retrieved February 04, 2018, from http://methods.sagepub.com/reference/encyclopedia-of-survey-research-methods/n571.xml

Yang, S., Keller, F., & Zheng, L. (2017). Social network analysis: methods and examples. Los Angeles: Sage.