The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Visualization

library(nett)
library(igraph)

In this article, we go through some of the basic visualization functionality in the nett package.

Visualizing a DCSBM

Let us sample a network from a DCSBM:

n = 1500
Ktru = 4
lambda = 15 # expected average degree
oir = 0.1
pri = 1:Ktru

set.seed(1234)
theta <- EnvStats::rpareto(n, 2/3, 3)
B = pp_conn(n, oir, lambda, pri=pri, theta)$B
z = sample(Ktru, n, replace=T, prob=pri)

# sample the adjacency matrix
A = sample_dcsbm(z, B, theta)

We can plot the network using community labels \(z\) to color the nodes:

original = par("mar")

gr = igraph::graph_from_adjacency_matrix(A, "undirected") # convert to igraph object 
par(mar = c(0,0,0,0))
out = nett::plot_net(gr, community = z)


par(mar = original)

We can also plot the degree distribution:

nett::plot_deg_dist(gr)

summary(igraph::degree(out$gr))
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>    1.00   10.00   13.00   14.81   17.00  131.00

A latent variable model

Now consider a latent variable model with \(K\) communities as follows: The adjacency matrix \(A = (A_{ij})\) is generated as a symmetric matrix, with independent Bernoulli entries above the diagonal with \[\begin{align}\label{eq:dclvm:def} \mathbb E [\,A_{ij} \mid x, \theta\,] \; \propto \; \theta_i \theta_j e^{- \|x_i - x_j\|^2} \quad \text{and} \quad x_i = 2 e_{z_i} + \frac34 w_i \end{align}\] where \(e_k\) is the \(k\)th basis vector of \(\mathbb R^d\), \(w_i \sim N(0, I_d)\), \(\{z_i\} \subset [K]^n\) are multinomial labels (similar to the DCSBM labels) and \(d = K\). The proportionality constant in~\(\eqref{eq:dclvm:def}\) is chosen such that the overall network has expected average degree \(\lambda\)

We can generate from this model using the nett::sample_dclvm() function as follows:

d = Ktru
labels = sample(Ktru, n, replace = T, prob = pri)
labels = sort(labels)
mu = diag(Ktru)
x = 2*mu[labels, ] + 0.75*matrix(rnorm(n*d), n)

A = sample_dclvm(x, lambda, theta)

Visualizing the network and its degree distribution goes as before:

original = par("mar")

gr = igraph::graph_from_adjacency_matrix(A, "undirected") # convert to igraph object 
par(mar = c(0,0,0,0))
out = nett::plot_net(gr, community = labels)


par(mar = original)
nett::plot_deg_dist(gr)
#> Warning in nett::plot_deg_dist(gr): There are 0-degree nodes. Omitting them on
#> log scale.

summary(igraph::degree(out$gr))
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>    1.00    6.00   11.00   13.61   18.00  198.00

Visualizing Political Blogs network

Let us compare with Political Blogs network accessible via polblogs.

original = par("mar")

par(mar = c(0,0,0,0))
out = nett::plot_net(polblogs, community = igraph::V(polblogs)$community)


par(mar = original)
nett::plot_deg_dist(polblogs)
#> Warning in nett::plot_deg_dist(polblogs): There are 0-degree nodes. Omitting
#> them on log scale.

summary(igraph::degree(polblogs))
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>    0.00    1.00    8.00   25.62   33.00  468.00

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.