Important differences from reference implementation

DivNet and divnet-rs are very similar and use the same algorithms. However, there are some differences. I mention some of the important ones here.

Input & Output files

The input and output files are different. To see how to get files into divnet-rs from R and then back in to R once divnet-rs is finished, see the scripts in the Lee example directory.

Diagonal network only

The only network option is diagonal. Here is an quote from Amy Willis that supports this decision:

I would recommend network="diagonal" for a dataset of this size. This means you're allowing overdispersion (compared to a plugin aka multinomial model) but not a network structure. This isn't just about computational expense -- it's about the reliability of the network estimates. Essentially estimating network structure on 20k variables (taxa) with 50 samples with any kind of reliability is going to be very challenging, and I don't think that it's worth doing here. In our simulations we basically found that overdispersion contributes the bulk of the variance to diversity estimation (i.e. overdispersion is more important than network structure), so I don't think you are going to lose too much anyway.

The whole issue is worth reading.

If you have small enough datasets that the R implemntation of DivNet can handle them, just use that instead...it will let you estimate the network structure of your data!

Bootstrapping

Only the parametric bootstrap is available. You cannot do the nonparametric bootstrap.

Monte-Carlo iterations and burn

The MC iterations must be even, and the MC burn must be 1/2 of the MC iterations. This allows me to do a little trick to cut the overall memory usage by about 1/3.