── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.4
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 3.4.4 ✔ tibble 3.2.1
✔ lubridate 1.9.3 ✔ tidyr 1.3.0
✔ purrr 1.0.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(igraph) # This is the package to analyze the network
Attaching package: 'igraph'
The following objects are masked from 'package:lubridate':
%--%, union
The following objects are masked from 'package:dplyr':
as_data_frame, groups, union
The following objects are masked from 'package:purrr':
compose, simplify
The following object is masked from 'package:tidyr':
crossing
The following object is masked from 'package:tibble':
as_data_frame
The following objects are masked from 'package:stats':
decompose, spectrum
The following object is masked from 'package:base':
union
library(visNetwork) # Creates visualizations of the networklibrary(DT)library(plotly)
Attaching package: 'plotly'
The following object is masked from 'package:igraph':
groups
The following object is masked from 'package:ggplot2':
last_plot
The following object is masked from 'package:stats':
filter
The following object is masked from 'package:graphics':
layout
library(broom) # includes some of our regression functions
friendships <-read_csv("friendships.csv")
Rows: 6972 Columns: 4
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
dbl (4): nominator, nominated, score, expected_score
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Rows: 84 Columns: 2
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
dbl (2): id, name
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Below you will find the data tables with scores for nominator and nominated. The first is labeled “Nominator Group Mean Scores”
friendships |>group_by(nominator) |>summarize(Mean =round(mean(score), 1)) |>arrange(-Mean) |>datatable(rownames = F,caption ='Friendships Analysis: Nominator Group Mean Scores')
This is the second table titled: Nominated Group Mean Score
friendships |>group_by(nominated) |>summarize(Mean =round(mean(score), 1)) |>arrange(-Mean) |>datatable(rownames = F,caption ='Friendships Analysis: Nominated Group Mean Scores')
Below you can see the scores and the expected_scores with an added regression line.
friendship_model <-lm(expected_score ~ score, data = friendships)tidy(friendship_model)
friendships %>%plot_ly(x =~ score, y =~ expected_score) |>add_markers() %>%add_lines(y =fitted(friendship_model))
A network object was created with the degree function. Below is that data table in which individuals identified themselves as a friend, how many of their classmates identified them as a friend, and their relative popularity.
Below you will see a histogram indicating the number of friends that students named.
friendship_nodes |>mutate(named_friends =degree(friend_network), mode ="out")|>mutate(named_by_others=degree((friend_network), mode ="in")) |>plot_ly(x =~ named_friends) %>%add_histogram() %>%layout(title ="How Many Friends Students Named")
Below is the the reciprocity in the network. This indicates that 53% of friendships named for classmates were reciprocated.
reciprocity(friend_network, mode ="ratio")
[1] 0.527088
Below is a new network using only best friends. This is a network of best friendships for classmates. The size of the nodes are larger based on the label of best friend. Communities of best friends are indicated by color.