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
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,
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 }