## ----libs, warning=FALSE,message=FALSE---------------------------------------- library(igraph) library(netrankr) library(magrittr) ## ----plot,fig.height=5,fig.width=5,fig.align='center'------------------------- data("florentine_m") # Delete Pucci family (isolated) florentine_m <- delete_vertices(florentine_m, which(degree(florentine_m) == 0)) # plot the graph (label size proportional to wealth) set.seed(111) plot(florentine_m, vertex.label.cex = V(florentine_m)$wealth * 0.01, vertex.label.color = "black", vertex.color = "white", vertex.frame.color = "gray" ) ## ----cent--------------------------------------------------------------------- cent.df <- data.frame( degree = degree(florentine_m), betweenness = betweenness(florentine_m), closeness = closeness(florentine_m), eigenvector = eigen_centrality(florentine_m)$vector, subgraph = subgraph_centrality(florentine_m) ) # most central family according to the 5 indices V(florentine_m)$name[apply(cent.df, 2, which.max)] ## ----cent_new----------------------------------------------------------------- # odd subgraph centrality sc_odd <- florentine_m %>% indirect_relations(type = "walks", FUN = walks_exp_odd) %>% aggregate_positions(type = "self") # family with highest score V(florentine_m)$name[which.max(sc_odd)] ## ----ni----------------------------------------------------------------------- P <- neighborhood_inclusion(florentine_m) ## ----ni_comp------------------------------------------------------------------ comparable_pairs(P) ## ----dom_graph,fig.height=5,fig.width=5,fig.align='center'-------------------- d <- dominance_graph(P) V(d)$name <- V(florentine_m)$name set.seed(113) plot(d, vertex.label.color = "black", vertex.color = "white", vertex.frame.color = "gray", edge.arrow.size = 0.5 ) ## ----rk_inter,fig.align='center',fig.width=5,fig.height=5--------------------- plot(rank_intervals(P)) ## ----probs-------------------------------------------------------------------- res <- exact_rank_prob(P) ## ----likely_most_central------------------------------------------------------ top_rank_prob <- res$rank.prob[, 15] names(top_rank_prob) <- V(florentine_m)$name round(top_rank_prob[top_rank_prob > 0.1], 3) ## ----medici_strozzi,eval=TRUE------------------------------------------------- id_strozzi <- which(V(florentine_m)$name == "Strozzi") id_medici <- which(V(florentine_m)$name == "Medici") res$relative.rank[id_strozzi, id_medici] ## ----exp_rank,echo=FALSE------------------------------------------------------ tab <- data.frame(Name = V(florentine_m)$name, Expected = round(res$expected.rank, 2)) tab <- tab[order(tab[, 2], decreasing = TRUE), ] knitr::kable(tab, row.names = F) ## ----closeness_vs_wealth------------------------------------------------------ # Closeness c_C <- florentine_m %>% indirect_relations(type = "dist_sp") %>% aggregate_positions(type = "invsum") cor(c_C, V(florentine_m)$wealth, method = "kendall") ## ----harmclos_wealth---------------------------------------------------------- # harmonic closeness c_HC <- florentine_m %>% indirect_relations(type = "dist_sp", FUN = dist_inv) %>% aggregate_positions(type = "sum") # residual closeness (Dangalchev,2006) c_RC <- florentine_m %>% indirect_relations(type = "dist_sp", FUN = dist_2pow) %>% aggregate_positions(type = "sum") # integration centrality (Valente & Foreman, 1998) dist_integration <- function(x) { x <- 1 - (x - 1) / max(x) } c_IN <- florentine_m %>% indirect_relations(type = "dist_sp", FUN = dist_integration) %>% aggregate_positions(type = "sum") c( cor(c_HC, V(florentine_m)$wealth, method = "kendall"), cor(c_RC, V(florentine_m)$wealth, method = "kendall"), cor(c_IN, V(florentine_m)$wealth, method = "kendall") ) ## ----distalpha_wealth,warning=FALSE------------------------------------------- # generalized closeness (Agneessens et al.,2017) (alpha>0) sum(dist^-alpha) alpha <- c(seq(0.01, 0.99, 0.01), seq(1, 10, 0.1)) scores <- sapply(alpha, function(x) { florentine_m %>% indirect_relations(type = "dist_sp", FUN = dist_dpow, alpha = x) %>% aggregate_positions(type = "sum") }) cors_gc <- apply( scores, 2, function(x) cor(x, V(florentine_m)$wealth, method = "kendall") ) res_gc <- c(max(cors_gc), alpha[which.max(cors_gc)]) # decay centrality (Jackson, 2010) (alpha in [0,1]) sum(alpha^dist) alpha <- seq(0.01, 0.99, 0.01) scores <- sapply(alpha, function(x) { florentine_m %>% indirect_relations(type = "dist_sp", FUN = dist_powd, alpha = x) %>% aggregate_positions(type = "sum") }) cors_dc <- apply( scores, 2, function(x) cor(x, V(florentine_m)$wealth, method = "kendall") ) res_dc <- c(max(cors_dc), alpha[which.max(cors_dc)]) ## ----pos_dom_hetero----------------------------------------------------------- D <- florentine_m %>% indirect_relations(type = "dist_sp") %>% positional_dominance(benefit = F) comparable_pairs(D) ## ----pos_dom_homo------------------------------------------------------------- D <- florentine_m %>% indirect_relations(type = "dist_sp") %>% positional_dominance(benefit = F, map = T) comparable_pairs(D) ## ----plot dist_dom,fig.align="center",fig.height=5,fig.width=5,echo=F--------- d <- dominance_graph(D) V(d)$name <- V(florentine_m)$name x <- V(florentine_m)$wealth x[9] <- x[9] - 50 x[14] <- x[14] - 50 y <- colSums(D) el <- get.edgelist(d, names = F) E(d)$color <- "gray" col <- apply(el, 1, function(x) V(florentine_m)$wealth[x[1]] > V(florentine_m)$wealth[x[2]]) # wrong:41 E(d)$color[col] <- "indianred" plot(d, layout = cbind(x, y), vertex.label.cex = 0.75, vertex.label.color = "black", vertex.color = "white", vertex.frame.color = "gray", edge.arrow.size = 0.4 ) ## ----rk_inter_dist,fig.align='center',fig.width=5,fig.height=5---------------- plot(rank_intervals(D)) ## ----dist_probs--------------------------------------------------------------- res <- exact_rank_prob(D) ## ----dist_probs_lat----------------------------------------------------------- res <- exact_rank_prob(D, only.results = FALSE) ## ----all_rankings------------------------------------------------------------- all_ranks <- get_rankings(res) dim(all_ranks) ## ----all_cors----------------------------------------------------------------- dist_cor <- apply( all_ranks, 2, function(x) cor(V(florentine_m)$wealth, x, method = "kendall") ) c(max_cor = max(dist_cor), mean_cor = mean(dist_cor)) ## ----cor_deg------------------------------------------------------------------ cor(degree(florentine_m), V(florentine_m)$wealth, method = "kendall")