Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

networkDynamic for panel of larger networks #9

Open
ThomasKraft opened this issue Jul 15, 2021 · 4 comments
Open

networkDynamic for panel of larger networks #9

ThomasKraft opened this issue Jul 15, 2021 · 4 comments

Comments

@ThomasKraft
Copy link

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?

@martinamorris
Copy link
Member

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

@chad-klumb
Copy link
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

@martinamorris
Copy link
Member

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

@ThomasKraft
Copy link
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
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants