<BlockState object with 23 blocks (23 nonempty), degree-corrected, for graph <Graph object, directed, with 297 vertices and 2359 edges at 0x...>, at 0x...>
<BlockState object with 6 blocks (6 nonempty), for graph <Graph object, directed, with 23 vertices and 249 edges at 0x...>, at 0x...>
<BlockState object with 2 blocks (2 nonempty), for graph <Graph object, directed, with 6 vertices and 31 edges at 0x...>, at 0x...>
<BlockState object with 1 blocks (1 nonempty), for graph <Graph object, directed, with 2 vertices and 4 edges at 0x...>, at 0x...>
This means that we can inspect the hierarchical partition just as before:
.. testcode:: celegans
r = levels[0].get_blocks()[42] # group membership of node 42 in level 0
print(r)
r = levels[0].get_blocks()[r] # group membership of node 42 in level 1
print(r)
r = levels[0].get_blocks()[r] # group membership of node 42 in level 2
print(r)
.. testoutput:: celegans
10
6
4
Model selection
+++++++++++++++
As mentioned above, one can select the best model according to the
choice that yields the smallest description length. For instance, in