Load libraries and set working directory.
# R markdown link: http://rpubs.com/jasohosk/1432621
# Load libraries
packages <- c("ideanet", "kableExtra", "tidyverse", "psych", "purrr")
installed <- packages %in% rownames(installed.packages())
if (any(!installed)) {
install.packages(packages[!installed])
}
lapply(packages, library, character.only = TRUE)
# Set working directory
setwd(
"/Users/jasonhoskin/Library/CloudStorage/OneDrive-IndianaUniversity/faith"
)
Read in Network Canvas data.
dir.create("networkcanvas-merged", showWarnings = FALSE)
nc_merge("networkcanvas-data", "networkcanvas-merged")
networks <- nc_read(
path = "networkcanvas-merged")
# Exclude ego_id = 1 (missing data, excluded from analysis)
networks$egos <- networks$egos |> filter(ego_id != 1)
networks$alters <- networks$alters |> filter(ego_id != 1)
networks$alter_edgelists <- networks$alter_edgelists |> filter(ego_id != 1)
res <- ego_netwrite(networks$egos,
ego_id = "ego_id",
networks$alters,
alter_id = "alter_id",
alter_ego = "ego_id",
max_alters = Inf,
alter_alter = networks$alter_edgelists,
aa_ego = "ego_id",
i_elements = "from",
j_elements = "to")
Prepare for descriptive tables.
# Find ego IDs for the smallest and largest networks by network size
ego_ids_in_igraph <- sapply(res$igraph_objects, \(x) x$ego)
smallest_ego_id <- res$summaries |> slice_min(network_size, n = 1) |> pull(ego_id)
largest_ego_id <- res$summaries |> slice_max(network_size, n = 1) |> pull(ego_id)
idx_smallest <- which(ego_ids_in_igraph == smallest_ego_id)
idx_largest <- which(ego_ids_in_igraph == largest_ego_id)
smallest_n <- res$summaries |> filter(ego_id == smallest_ego_id) |> pull(network_size)
largest_n <- res$summaries |> filter(ego_id == largest_ego_id) |> pull(network_size)
# Descrptive tables
summary_vars <- res$summaries |>
select(ego_id, network_size, mean_degree, density, effective_size)
alter_vars_cont <- res$alters |>
select(ego_id, alter_id, alterage)
alterrel_cols <- paste0("alterrel_", 1:23)
alter_vars_cat <- res$alters |>
select(ego_id, alter_id, altersex, alterrace)
alterrel <- res$alters |>
select(ego_id, alter_id, all_of(alterrel_cols)) |>
pivot_longer(
cols = all_of(alterrel_cols),
names_to = "alterrel_type",
values_to = "marked"
) |>
filter(marked) |>
mutate(alterrel_type = as.integer(str_remove(alterrel_type, "alterrel_"))) |>
select(ego_id, alter_id, alterrel_type)
Create descriptive tables and plot smallest and largest networks.
psych::describe(summary_vars |> select(-ego_id)) |>
as.data.frame() |>
select(n, mean, sd, median, min, max, skew)
## n mean sd median min max skew
## network_size 42 15.9285714 8.2444153 14.000000 4.0000000 40.000 1.0026508
## mean_degree 42 9.2258694 5.1432445 8.585714 2.1818182 25.000 1.3719184
## density 42 0.6666072 0.2335067 0.664591 0.2181818 1.000 0.1008816
## effective_size 42 6.7027021 5.4539546 5.114286 1.0000000 21.875 0.8968624
alterrel |> count(alterrel_type) |> mutate(prop = n / sum(n))
## # A tibble: 19 × 3
## alterrel_type n prop
## <int> <int> <dbl>
## 1 1 17 0.0184
## 2 2 14 0.0151
## 3 3 83 0.0897
## 4 4 90 0.0973
## 5 6 48 0.0519
## 6 7 7 0.00757
## 7 8 30 0.0324
## 8 9 99 0.107
## 9 10 48 0.0519
## 10 11 48 0.0519
## 11 12 245 0.265
## 12 13 8 0.00865
## 13 14 2 0.00216
## 14 15 13 0.0141
## 15 16 5 0.00541
## 16 20 4 0.00432
## 17 21 74 0.08
## 18 22 62 0.0670
## 19 23 28 0.0303
alter_vars_cat |>
count(altersex) |>
mutate(prop = n / sum(n))
## altersex n prop
## 1 1 230 0.343796712
## 2 2 435 0.650224215
## 3 3 4 0.005979073
alter_vars_cat |>
count(alterrace) |>
mutate(prop = n / sum(n))
## alterrace n prop
## 1 1 2 0.002989537
## 2 2 584 0.872944694
## 3 3 17 0.025411061
## 4 4 53 0.079222720
## 5 5 13 0.019431988
psych::describe(alter_vars_cont |> select(-ego_id, -alter_id)) |>
as.data.frame() |>
select(n, mean, sd, median, min, max, skew)
## n mean sd median min max skew
## alterage 669 49.16442 19.91749 51 1 89 -0.4073565
# Plot side by side
plot(
res$igraph_objects[[idx_smallest]]$igraph_ego,
main = paste0("Ego ", smallest_ego_id, " — Smallest (n = ", smallest_n, ")")
)
plot(
res$igraph_objects[[idx_largest]]$igraph_ego,
main = paste0("Ego ", largest_ego_id, " — Largest (n = ", largest_n, ")")
)
# Create CSV file
res$summaries |>
select(ego_id, network_size, mean_degree, density, effective_size) |>
write_csv("faith-network-summaries.csv")
```