## **Example applications** ### **Example undirected graph** ```r # Import libraries library(scoredec) library(igraph) # Create a dummy undirected graph set.seed(42) n <- 4 W <- matrix(runif(n^2),n) W[lower.tri(W)] <- t(W)[lower.tri(W)] diag(W) <- 0 # Print adjacency matrix print(W) ``` ``` ## [,1] [,2] [,3] [,4] ## [1,] 0.0000000 0.6417455 0.6569923 0.9346722 ## [2,] 0.6417455 0.0000000 0.7050648 0.2554288 ## [3,] 0.6569923 0.7050648 0.0000000 0.4622928 ## [4,] 0.9346722 0.2554288 0.4622928 0.0000000 ``` ```r # Transform adjacency matrix to graph g <- graph_from_adjacency_matrix(W, mode = "undirected", weighted = TRUE) # Set seed for reproducible plot set.seed(42) plot(g, edge.width=E(g)$weight * 5 # make connection weight lines thicker ) ```

It is clear on Fig. 2 that some connections are stronger than others, having greater connectivity weights. Moreover, the same vertex might has some strong and some weak weights. Therefore, decomposing the graph visually might get hard, especially on larger networks. ```r # Get s-core values s_core_result <- s_coreness(g) print(s_core_result) ``` ``` ## [1] 3 1 2 3 ``` ```r # Plot result from s_coreness # Set seed for reproducibility set.seed(42) plot(g, edge.width = E(g)$weight * 5, # make connection weight lines thicker vertex.size = s_core_result * 10 ) ```

It is shown on Fig. 3 that vertices 1 and 4 have higher coreness compared to all the other vertices, while vertex 2 has the smallest one. Note that for undirected graphs the mode (`"all"`,`"in"` or `"out"`) does not matter: ```r all.equal(s_core_result, s_coreness(g, mode = "in")) ``` ``` ## [1] TRUE ``` ```r all.equal(s_core_result, s_coreness(g, mode = "out")) ``` ``` ## [1] TRUE ``` Therefore, for efficiency reasons, choosing `mode = "in"` or `mode = "out"` is preferred, as long as the sum of adjacency matrix with its transpose for transforming it to undirected is not needed. ### **Example directed graph** ```r # Create a dummy directed graph set.seed(42) n <- 4 W <- matrix(runif(n^2),n) diag(W) <- 0 # Print adjacency matrix print(W) ``` ``` ## [,1] [,2] [,3] [,4] ## [1,] 0.0000000 0.6417455 0.6569923 0.9346722 ## [2,] 0.9370754 0.0000000 0.7050648 0.2554288 ## [3,] 0.2861395 0.7365883 0.0000000 0.4622928 ## [4,] 0.8304476 0.1346666 0.7191123 0.0000000 ``` ```r # Transform adjacency matrix to graph g <- graph_from_adjacency_matrix(W, mode = "directed", weighted = TRUE) # Set seed for reproducible plot set.seed(42) plot(g, edge.width=E(g)$weight * 5, # make connection weight lines thicker, edge.curved = rep(0.4, ecount(g)) # make directions more visible ) ```

As show on Fig. 4, finding coreness with both directions and weights is even harder. Therefore, the use of s-core algorithm is even more cruicial here. In correspondence to the use of in-degree and out-degree strength of vertices used on k-cores ([Csárdi and Nepusz 2006](#ref-csardi2006igraph); [Csárdi et al. 2024](#ref-igraph)), this algorithm is extended in the same way as well. ```r # Get total degree s-core values all_s_core <- s_coreness(g, mode = "all") print(all_s_core) ``` ``` ## [1] 3 3 2 1 ``` ```r # Set seed for reproducibility set.seed(42) plot(g, edge.width = E(g)$weight * 5, # make connection weight lines thicker, edge.curved = rep(0.4, ecount(g)), # make directions more visible vertex.size = all_s_core * 10 ) ```

```r # Get in-degree s-core values in_s_core <- s_coreness(g, mode = "in") print(in_s_core) ``` ``` ## [1] 2 1 4 3 ``` ```r # Set seed for reproducibility set.seed(42) plot(g, edge.width = E(g)$weight * 5, # make connection weight lines thicker, edge.curved = rep(0.4, ecount(g)), # make directions more visible vertex.size = in_s_core * 10 ) ```

```r # Get out-degree s-core values out_s_core <- s_coreness(g, mode = "out") print(out_s_core) ``` ``` ## [1] 3 4 1 2 ``` ```r # Plot result from s_coreness # Set seed for reproducibility set.seed(42) plot(g, edge.width = E(g)$weight * 5, # make connection weight lines thicker, edge.curved = rep(0.4, ecount(g)), # make directions more visible vertex.size = out_s_core * 10 ) ```

## **References** Csárdi, Gábor, and Tamás Nepusz. (2006) “The igraph software package for complex network research.” *InterJournal* Complex Systems: 1695. [https://igraph.org](https://igraph.org). Csárdi, Gábor, Tamás Nepusz, Vincent Traag, Szabolcs Horvát, Fabio Zanini, Daniel Noom, and Kirill Müller. 2024. * igraph: Network Analysis and Visualization in R*. [https://doi.org/10.5281/zenodo.7682609](https://doi.org/10.5281/zenodo.7682609). Eidsaa, M. and Almaas, E. (2013) “s-core network decomposition: A generalization of k-core analysis to weighted networks”,