Skip to content

networkDynamic for panel of larger networks #9

Open

Description

@ThomasKraft

In the current form, the function networkDynamic() is prohibitively slow for converting a list of panel networks of moderate to large size to a dynamicNetwork object (for example, a list of 2 networks with ~8000 nodes and 16k edges is taking on the order of hours). As far as I can tell, this issue stems from the implementation of a for-loop through all edges of the network here:

for (i in seq_len(nrow(edge.data))) {
.

Based on the comments in the code, I am wondering if tergm or anything else already has a different way of taking on this task that is more efficient. I'm having trouble figuring out where exactly tergm does this, but I think it must do something similar when simulating. Perhaps an operation performed on a stack of sparse sociomatrices would be applicable here?

Activity

  1. martinamorris commented on Jul 19, 2021

    @martinamorris
    Member

    @chad-klumb given your recent work on tergm and tergmLite do you have any thoughts on this?

  2. chad-klumb commented on Jul 20, 2021

    @chad-klumb
    Contributor

    I would be surprised if tergmLite really required storing a network list (in typical use cases).

    Looping over (a large number of) inputs and growing the output at each iteration can be slow as growing often means copying (in R). It is sometimes possible to rewrite the code in such a way that repeated copying is avoided.

    tergm applies changes to the networkDynamic using this function:

    https://github.com/statnet/tergm/blob/b13a3a47c778eb325233073be62795fa5dd14309/R/stergm.utils.R#L153-L232

  3. martinamorris commented on Jul 21, 2021

    @martinamorris
    Member

    @ThomasKraft are you using networkDynamic outside of the tergm or tergmLite contexts? e.g. for network movies via ndtv?

  4. ThomasKraft commented on Jul 21, 2021

    @ThomasKraft
    Author

    I am using networkDynamic outside of the tergm context, specifically working with a list of networks that are output from EpiModel simulations with duration = 1 (which unlike longer durations does not store a networkDynamic object). Converting to networkDynamic class is useful both for creating movies with ndtv as well as analyzing distributions of tie duration and other dynamic network properties.

    From the link @chad-klumb sent, I see now why the tergm case is different than the post-hoc conversion of the list of networks. So it seems like I'd need to tweak the networkDynamic code originally linked for it to be more efficient?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions