osdsm extracts the backbone of a bipartite projection using the Ordinal Stochastic Degree Sequence Model.
osdsm( B, alpha = 0.05, trials = NULL, signed = FALSE, mtc = "none", class = "original", narrative = FALSE, progress = TRUE )
An ordinally weighted bipartite graph, as: (1) an incidence matrix in the form of a matrix or sparse
real: significance level of hypothesis test(s)
integer: the number of bipartite graphs generated to approximate the edge weight distribution. If NULL, the number of trials is selected based on
boolean: TRUE for a signed backbone, FALSE for a binary backbone (see details)
string: type of Multiple Test Correction to be applied; can be any method allowed by
string: the class of the returned backbone graph, one of c("original", "matrix", "Matrix", "igraph", "edgelist").
If "original", the backbone graph returned is of the same class as
boolean: TRUE if suggested text & citations should be displayed.
boolean: TRUE if the progress of Monte Carlo trials should be displayed.
osdsm function compares an edge's observed weight in the projection
B*t(B) to the distribution of weights
expected in a projection obtained from a random bipartite network where both the rows and the columns contain
approximately the same number of each value. The edges in
B must be integers, and are assumed to represent an
ordinal-level measure such as a Likert scale that starts at 0.
signed = FALSE, a one-tailed test (is the weight stronger) is performed for each edge with a non-zero weight. It
yields a backbone that perserves edges whose weights are significantly stronger than expected in the chosen null
signed = TRUE, a two-tailed test (is the weight stronger or weaker) is performed for each every pair of nodes.
It yields a backbone that contains positive edges for edges whose weights are significantly stronger, and
negative edges for edges whose weights are significantly weaker, than expected in the chosen null model.
NOTE: Before v2.0.0, all significance tests were two-tailed and zero-weight edges were evaluated.
The p-values used to evaluate the statistical significance of each edge are computed using Monte Carlo methods. The number of
trials performed affects the precision of these p-values, and the confidence that a given p-value is less than the
alpha level. Because these p-values are proportions (i.e., the proportion of times an edge is weaker/stronger
in the projection of a random bipartite graphs), evaluating the statistical significance of an edge is equivalent to
comparing a proportion (the p-value) to a known proportion (alpha). When
trials = NULL, the
is used to estimate the required number of trials to make such a comparison with a
alpha type-I error rate, (1-
and when the riskiest p-value being evaluated is at least 5% smaller than
alpha. When any
mtc correction is applied,
for simplicity this estimation is based on a conservative Bonferroni correction.
alpha != NULL: Binary or signed backbone graph of class
alpha == NULL: An S3 backbone object containing (1) the weighted graph as a matrix, (2) upper-tail p-values as a
matrix, (3, if
signed = TRUE) lower-tail p-values as a matrix, (4, if present) node attributes as a dataframe, and
(5) several properties of the original graph and backbone model, from which a backbone can subsequently be extracted
package: Neal, Z. P. (2022). backbone: An R Package to Extract Network Backbones. PLOS ONE, 17, e0269137. doi: 10.1371/journal.pone.0269137
osdsm: Neal, Z. P. (2017). Well connected compared to what? Rethinking frames of reference in world city network research. Environment and Planning A, 49, 2859-2877. doi: 10.1177/0308518X16631339
#A weighted binary bipartite network of 20 agents & 50 artifacts; agents form two communities B <- rbind(cbind(matrix(sample(0:3, 250, replace = TRUE, prob = ((1:4)^2)),10), matrix(sample(0:3, 250, replace = TRUE, prob = ((4:1)^2)),10)), cbind(matrix(sample(0:3, 250, replace = TRUE, prob = ((4:1)^2)),10), matrix(sample(0:3, 250, replace = TRUE, prob = ((1:4)^2)),10))) P <- B%*%t(B) #An ordinary weighted projection... plot(igraph::graph_from_adjacency_matrix(P, mode = "undirected", weighted = TRUE, diag = FALSE)) #...is a dense hairball bb <- osdsm(B, alpha = 0.05, narrative = TRUE, #An oSDSM backbone... class = "igraph", trials = 100) plot(bb) #...is sparse with clear communities
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.