statnet / ergm.multi

Fit, Simulate and Diagnose Exponential-Family Models for Multiple or Multilayer Networks
Other
14 stars 1 forks source link

combine_networks() -> simulate() -> uncombine_network() produces incorrect results #20

Closed krivit closed 1 year ago

krivit commented 1 year ago

Subnet cache is a critical optimisation, but currently uncombining networks loses the new edge values.

library(ergm.multi)
data(samplk)

### Without subnet cache

samplks <- combine_networks(list(samplk1, samplk2, samplk3))
# Old value
summary(samplks~edges)
#> edges 
#>   168
# Simulate
sim <- simulate(samplks~edges, coef=-2, constraints=~blockdiag(".NetworkID"))
# New number of edges
summary(sim~edges)
#> edges 
#>   126
# Ditto
sum(summary(uncombine_network(sim)~edges))
#> [1] 126

### With subnet cache

samplks <- combine_networks(list(samplk1, samplk2, samplk3), subnet.cache=TRUE)
# Old value
summary(samplks~edges)
#> edges 
#>   168
# Simulate
sim <- simulate(samplks~edges, coef=-2, constraints=~blockdiag(".NetworkID"))
# New number of edges
summary(sim~edges)
#> edges 
#>   115
# Still old number of edges
sum(summary(uncombine_network(sim)~edges))
#> [1] 168

Created on 2022-11-22 with reprex v2.0.2

krivit commented 1 year ago

This is related to statnet/ergm.multi-private#2.