statnet / ergm

Fit, Simulate and Diagnose Exponential-Family Models for Networks
Other
96 stars 37 forks source link

Drop gw*() terms' cutoff= argument in favour of the term.option? #533

Open krivit opened 1 year ago

krivit commented 1 year ago

This is loosely related to https://github.com/statnet/ergm/issues/532. Since https://github.com/statnet/ergm/issues/485, cutoff= behaviour for gw*() terms when encountering a network whose statistic of interest (degree, SP, etc.) exceeds the cutoff is to stop immediately with an error (as opposed to silently returning incorrect results).

cutoff is set in one of two ways: as an argument to the term, (e.g., gwesp(cutoff=50)) or as a term option, which can, in turn, be set as a control parameter (e.g., control.ergm(term.options=list(gw.cutoff=50))) or as a global option for all subsequent runs (e.g., options(ergm.term=list(gw.cutoff=50))).

I wonder if as a part of a general term cleanup, it might make sense to deprecate cutoff= argument as well, to rely on the global setting. This has two possible benefits:

  1. Cleaner calls, e.g., gwesp(.1, type="OSP") becomes gwesp(.1, "OSP"), though type= is still required if decay is not given (though we could handle that too, if we anted to).
  2. Encouraging to separate "what to fit" from "how to fit it": the model ergm() would actually when the observed or simulated network feature of interest exceeded cutoff were always poorly defined, and now it will refuse to fit them at all, so cutoff is not a part of the model specification but a computational tuning setting like MCMC sample size.

    @drh20drh20 , @handcock , @mbojan , @sgoodreau , @CarterButts , @martinamorris ?

sgoodreau commented 1 year ago

I don't have a strong opinion on this one. I see the benefit of the cleanup, but also the downside of breaking code. That said, in general I lean more than @CarterButts does towards accepting some long-term breaking for the value of cleaning, especially when it involves features that I suspect are not that commonly used.