sdsm {backbone} | R Documentation |

## Extract backbone using the Stochastic Degree Sequence Model

### Description

`sdsm`

extracts the backbone of a bipartite projection using the Stochastic Degree Sequence Model.

### Usage

```
sdsm(
B,
alpha = 0.05,
missing.as.zero = FALSE,
signed = FALSE,
mtc = "none",
class = "original",
narrative = FALSE,
...
)
```

### Arguments

`B` |
An unweighted bipartite graph, as: (1) an incidence matrix in the form of a matrix or sparse |

`alpha` |
real: significance level of hypothesis test(s) |

`missing.as.zero` |
boolean: should missing edges be treated as edges with zero weight and tested for significance |

`signed` |
boolean: TRUE for a signed backbone, FALSE for a binary backbone (see details) |

`mtc` |
string: type of Multiple Test Correction to be applied; can be any method allowed by |

`class` |
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 |

`narrative` |
boolean: TRUE if suggested text & citations should be displayed. |

`...` |
optional arguments |

### Details

The `sdsm`

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 row vertex degrees and column
vertex degrees are *approximately* fixed at their values in `B`

.

When `signed = FALSE`

, a one-tailed test (is the weight stronger?) is performed for each edge. The resulting backbone
contains edges whose weights are significantly *stronger* than expected in the null model. When `signed = TRUE`

, a
two-tailed test (is the weight stronger or weaker?) is performed for each edge. The resulting backbone contains
positive edges for those whose weights are significantly *stronger*, and negative edges for those whose weights are
significantly *weaker*, than expected in the null model.

The bipartite network `B`

may contain some edges that are *required* in the null model (i.e., structural 1s); these edges should
have a weight of 11 (i.e., B_ik = 11). This network may also contain some edges that are *prohibited* in the null model
(i.e., structural 0s); these edges should have a weight of 10 (i.e., B_ik = 10). When `B`

contains required or prohibited edges,
cellwise probabilities are computed using logit following Neal et al. (2024). Otherwise, cellwise probabilities are
computed using the faster and more accurate Bipartite Configuration Model with bicm (Neal et al. 2021).

### Value

If `alpha`

!= NULL: Binary or signed backbone graph of class `class`

.

If `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
using `backbone.extract()`

.

### References

package: Neal, Z. P. (2022). backbone: An R Package to Extract Network Backbones. *PLOS ONE, 17*, e0269137. doi:10.1371/journal.pone.0269137

sdsm: Neal, Z. P. (2014). The backbone of bipartite projections: Inferring relationships from co-authorship, co-sponsorship, co-attendance, and other co-behaviors. *Social Networks, 39*, 84-97. doi:10.1016/j.socnet.2014.06.001

bicm: Neal, Z. P., Domagalski, R., and Sagan, B. (2021). Comparing Alternatives to the Fixed Degree Sequence Model for Extracting the Backbone of Bipartite Projections. *Scientific Reports, 11*, 23929. doi:10.1038/s41598-021-03238-3

logit: Neal, Z. P. and Neal, J. W. (2024). Stochastic Degree Sequence Model with Edge Constraints (SDSM-EC) for Backbone Extraction. *Proceedings of the 12th International Conference on Complex Networks and their Applications*. Springer.

### Examples

```
#A binary bipartite network of 30 agents & 75 artifacts; agents form three communities
B <- rbind(cbind(matrix(rbinom(250,1,.8),10),
matrix(rbinom(250,1,.2),10),
matrix(rbinom(250,1,.2),10)),
cbind(matrix(rbinom(250,1,.2),10),
matrix(rbinom(250,1,.8),10),
matrix(rbinom(250,1,.2),10)),
cbind(matrix(rbinom(250,1,.2),10),
matrix(rbinom(250,1,.2),10),
matrix(rbinom(250,1,.8),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 <- sdsm(B, alpha = 0.05, narrative = TRUE, class = "igraph") #An SDSM backbone...
plot(bb) #...is sparse with clear communities
```

*backbone*version 2.1.4 Index]