complexNet provides functions to easily generate and iterate complex networks. These networks rely on socially inherited and random connections to members of a population, as presented by Ilany & Akcay (2016). Their modelling framework has been shown to generate realistic networks with a wide range of different clustering, density, and average path length. In Smolla & Akcay (2019) we have used the same algorithms to generate networks and have them dynamically evolve.
# Install release version from CRAN
install.packages("complexNet")
# Install development version from GitHub
::install_github("marcosmolla/complexNet") devtools
The general idea of complex networks (in the sense of this package) is that each individual of a group has a set of parameters that determines its probability to share an edge with certain subsets of the population. The most common version differentiates three subsets: the parent, the direct network neighbours of the parent, and everyone else. The probability to form a connection with the parent is given by the probability \(p_b\). Similarly, \(p_n\) is the probability to have a connection with the neighbours of the parent, and \(p_r\) is the probability to connect to anyone else. Because these probabilities regard different subsets of the population, they do not have to add up to 1. So far, the algorithm is only working for asexual populations (a single parent) but will be extended to also include a two parents version in the future.
To generate a complex network, use the make_bnr()
function. You need to set the number of individuals in the network
n
, and their linking probabilities pb
,
pn
, and pr
(see an example below). To set up a
new network set np=c(0,0)
, which means that there is no ID
set for who the newborn and the parent will be. Take a look at the
vignette (in Articles at the top) to see how these networks can be
iterated to simulate network dynamics and parameter evolution.
# Load library
library(complexNet)
# Create adjacency matrix for a complex network
<- make_bnr(n = 10, np = c(0,0), pb = 1, pn = .2, pr = .02)
ADJM
# Load igraph library
library(igraph)
# Convert adjacency matrix to an igraph network
<- graph_from_adjacency_matrix(ADJM)
G
# Plot network
plot(G)
Below is an example plot of networks generated with
make_bnr()
and for different social inheritance, \(p_n\), and random linking, \(p_r\), probabilities. As the linking
probabilities increase, the networks become more connected.
The following code generates a similar figure to the one shown here.
# Load library
library(complexNet)
library(igraph)
par(mfrow=c(3,3), mar=rep(1.2,4))
apply(X = expand.grid(c(.1,.3,.5), c(0.01,0.03,0.05)), 1, function(p) {
# Create adjacency matrix for a complex network
<- make_bnr(n = 50, np = c(0,0), pb = 1, pn = p[1], pr = p[2])
ADJM # Convert adjacency matrix to an igraph network
<- graph_from_adjacency_matrix(ADJM)
G # Calculate node degree centrality
<- degree(G)
deg # Select node colour based on its degree centrality
V(G)$color <- heat.colors(rev = T, n = 25)[deg+1]
# Plot network
plot(G,
main=paste("p_n: ",p[1],", p_r:",p[2], sep=""),
vertex.label=NA,
vertex.size=10,
edge.arrow.size=0,
vertex.color=V(G)$color)
})
Here is a list of articles that use complex networks:
Ilany, A., & Akcay, E. (2016). Social inheritance can explain the structure of animal social networks. Nature Communications, 7(May), 1–23. https://doi.org/10.1101/026120
Ilany, A., & Akçay, E. (2016). Personality and Social Networks: A Generative Model Approach. Integrative and Comparative Biology, 56(6), 1197–1205. https://doi.org/10.1093/icb/icw068
Smolla, M., & Akçay, E. (2019). Cultural selection shapes network structure. Science Advances, 5(8), eaaw0609. https://doi.org/10.1126/sciadv.aaw0609
> citation("complexNet")
in publications use:
To cite package ‘complexNet’
M (2022). complexNet: Complex Network Generation.
Smolla 0.2.0.
R package version ://CRAN.R-project.org/package=complexNet
https
for LaTeX users is
A BibTeX entry
@Manual{,
= {complexNet: Complex Network Generation},
title = {Marco Smolla},
author = {2022},
year = {R package version 0.2.0},
note = {https://CRAN.R-project.org/package=complexNet},
url }