Hi Tiago/all,
I am working with a bipartite graph with signed edges (+/- 1), which I treat as edge covariates for estimating a nested LayeredBlockState model:
state = gt.minimize_nested_blockmodel_dl(
g,
state_args=dict(
base_type=gt.LayeredBlockState,
clabel = clabel, # impose hard bipartite constraint
pclabel= clabel,
state_args=dict(ec=g.ep.weight, # in {-1, 1}
layers= False,
deg_corr= True,
overlap = True,
)))
It works excellently in the non-overlapping case and fings ~150 blocks at the lowest level, so I know the graph construction is good. But when I run the overlapping case with the hard bipartite constraint I get odd results: every half-edge is only classified in one of two blocks {1,0}
, which map to the two node types of the network. Running it without the constraint (clabel = pclabel = None
) yields much more intuitive results – many overlapping blocks – but takes longer to converge and does not guarantee fully bipartite blocks, so it seems non-optimal.
Any ideas on what might be causing this? Thanks very much.
Best,
Galen Hall