Inference for weighted, hierarchical stochastic block models

Hello Tiago and community,

I have a network that I'd like to infer a hierarchical SBM from, but it has
weighted edges.

After reading the weighted SBM paper [1] and looking at the graph-tool
docs, I think I might be able to use `*minimize_nested_blockmodel_dl*` and
pass the `*BlockState*` `*eweight*` argument via `*state_args*`. The
weights are discrete and non-negative, so maybe I also need to specify "
discrete-geometric" via `*rec_types`*. The edge weights could also be seen
as multiple edges in a multigraph.

1]: https://arxiv.org/pdf/1708.01432.pdf

After searching through old mailing list posts, here is my current attempt
for the weighted case:

g = Graph()

# Add vertices here

# Add edges here

edge_weights = g.new_edge_property('int')

# Specify edge weights here

state = minimize_nested_blockmodel_dl(g,
                                      state_args=dict(eweight=edge_weights,

rec_types=['discrete-geometric']) )

Am I on the right track? And would it be better to specify the edge
weights via the `*BlockState*` `*recs*` parameter instead of using `
*eweight*`?

Thank you,

Alexander

Alexander T. J. Barron
https://cogentmentat.github.io/academic/

attachment.html (2.24 KB)

Am I on the right track?

Yes, the command seems right to me, assuming your edge weights are
non-negative integers.

And would it be better to specify the edge
weights via the `*BlockState*` `*recs*` parameter instead of using
`*eweight*`?

No, the “eweight” parameter refers to edge multiplicities, not the
covariates.