Bipartite provides functions to visualise webs and calculate a series of indices commonly used to describe pattern in (ecological) networks, a.k.a. webs. It focusses on webs consisting of only two levels, e.g. pollinator-visitation or predator-prey webs. Visualisation is important to get an idea of what we are actually looking at, while the indices summarise different aspects of the webs topology.
Please see help page versionlog
for all changes and updates prior to version 2.00. This page will only list most recent changes.
2.16 (release date: 08-Jan-2021)
H2fun
:threw an error when H2_integer=TRUE. Thanks to mxdub for finding and fixing this! (Sorry that I managed to click on ``comment and close'' before ``confirm accept merg''; this github interaction is still somewhat new to me.)
betalinkr
:Now standardization to proportions also works for empty webs as division by zero is avoided. 2. specmx.higher.unique
can now be assessed even for 1-link-networks, as setting drop=FALSE keeps the dimensions of the matrix. Thanks to Benjamin Schwarz for providing these fixes! (And don't ask me why the pull request on github does not show.)
plotPAC
,following a question by Horacio Silva. We can now colour each arrow of the plot individually, although the sequence of colours provided may require some fiddling around.
2.15 (release date: 04-Apr-2020)
sortmatrix
and plotmatrix
,both provided by Rafael Pinheiro and Gabriel Felix from the University of Campinas in Brazil. The functions' scope is to plot interaction networks of nested, modular and mixed topology (Pinheiro et al. 2019). As plotting is not the forte of bipartite so far, and these two functions help to add a bit of plotting facilities. Many thanks for contributing!
robustness
:in my previous updates of the discontinued class
-issues I managed to omit a crucial ``!'' in the code. Thanks to Hanlun Liu and Felix Neff for reporting!
extinction
:for sparse networks, the function sometimes returned a vector rather than a matrix, due to incorrectly dropping a dimension. Thanks to Felix Neff for reporting and providing the solution!
as.one.mode
:in particular the way the weights were computed was not documented at all, as pointed out by Lennart Dittmer. This is now rectified and also the R-code now features in-line comments as to what is happening at each step.
2.14 (release date: 07-Jan-2020)
of betalinkr
-options.
requires discontinuation of class(x) == "y"
-like code (rather using is(x, "y")
or inherits(x, "y")
). Updated accordingly.
requiring identifyModules-Arguments to be labelled slightly differently. Impossible to check without setting up a linux chain, but still reason for CRAN not to accept.
2.13 (release date: 21-May-2019)
e.g. check for binary networks in nullmodel
failed if values < 1 were in the matrix.
illustrating the use of the package.
empty
:something was stupidly wrong for matrices of only one row or column. Spotted by Benjamin Schwarz, thanks!
vaznullexternal
,as wished by Matt Funaki. This is the ``normal'' vaznull
-nullmodel, but now external abundances for either or both groups can be provided. Modelled on r2dexternal
.
webs2array
:name indexing was wrong, so that entries were entered in wrong cells. Also, the function now also accepts a weblist as input.
betalinkr
:it allows comparison of networks and partitioning of network dissimilarity. Based on betalink package/paper by Tim Poisot, but more integrated into the bipartite package, and importantly implements many more features and corrected partitioning approaches. Two more new functions come with it: array2linkmx
, betalinkr_multi
.
decimalr2dtable
:it allows to simulate matrices with the same marginal totals as the input, but for non-negative, non-integer inputs. Doing so, it ``smears'' out the entries over the entire matrix and will hence be meaningless for any index comparison which responds to matrix filling. An attempt to deal with webs composed of rates rather than observed interactions. Useful probably only in a very few cases, as marginal totals are unlikely to be interpretable as abundance-activity, and hence implying a very different kind of null model to nullmodel
s.
2.12 (release date: 11-Mar-2019)
nest.smdm
by Rafael Pinheiro, Gabriel Felix, Marco Mello, and the team of the Ecological Synthesis Lab, University of S<U+00E3>o Paulo, which computes the nestedness measure NODF (as present in vegan) more flexibly, by allowing the matrix to be sorted not only by number of filled cells (think: binary networks), but also by absolute marginal totals. NODF does not work for completely filled matrices, but this version (called NODA) does. Also, nest.smdm
compute nesting within modules, if module identities are provided (e.g. by computeModules
and the new little helper function module2constraints
). All these metrics are computed for binary or weighted networks.
NOS
yields NA when one or more nodes are 0. The original equation allows an alternative way to compute NOS, which has been implemented by tchen98: many thanks!
2.11 (relase date: 12-Jul-2018)
metaComputeModules
, from DormannStrauss to Beckett. Beckett's algorithm is far less variable in its performance, thus I assumed that one would not actually need metaComputeModules
for it at all. However, also Beckett is not foolproof and benefits from a few re-runs with different starting configurations. Now defaults are consistent with computeModules
. Thanks to Laura Burkle for raising the issue.
nested
, which didn't correctly pass through the normalised-argument for index "C score". Also the naming of "C score" (rather than previously "C.score") was changed for consistency with networklevel
. Many thanks to Carlos Zamora-Manzur for reporting!
register
in C++17required attention in the MersenneTwister.h
-code used in computeModules
. Thanks to Brian Ripley, for the R Core Team, for notifying all maintainers using this command in advance of future CRAN-submission problems!
2.10 (release date: 20-Dec-2017)
from CC
, which had no effect on the way sna::closeness
computes the value. Thanks to Thais Zanata for making me aware of this!
of CC
, which did not properly rescale values so that they sum to 1. Thanks to Thais Zanata for making me aware of this!
to the indices available in networklevel
.
as olito2015
; data from dryad (URL given in help page).
2.09 (release date: 30-Jun-2017)
computeModules
,when using method="DormannStrauss", which I had broken after changing the default. Many thanks to Abdul Shakoor for reporting. Also added an error catcher to exclude, from binary webs, species that interact with every other species (i.e. are all 1; all-0 were already excluded).
plotweb
'slow/high.spacing, which now correctly describes its effect on the horizontal space within a level. (Thanks to Jeff Ollerton for reporting.)
2.08 (release date: 30-Mar-2017)
computeModules
.Although the excellent algorithm DIRT_LPA_wb_plus
by Stephen Beckett has been around for a year, I never managed to find the time to put it into bipartite. By now, Stephen has even written a wrapper code so that the output is fully compatible with existing code for plotting (plotModuleWeb
) there was really no argument left to postpone it. Stephen's DIRT_LPA_wb_plus will be the new default, replacing 'QuanBiMo', which remains available under method='DormannStrauss'. While DIRT could be called recursively, thereby making modules-within-modules computable, this is not packaged yet. So currently the much slower DormannStrauss-option is the only way to get recursive modules. Many thanks to Stephen for making this code available!
networklevel
and grouplevel
inconsistentlyreturned different values for secondary extinction, because the former by default purged empty columns/rows, while the latter didn't. It does now. Thanks to Gianalberto Losapio for bringing this to my attention.
2.07 (release date: 08-Nov-2016)
vaznull
,filled the matrix with 1s instead of 0s (although it was a `sophisticated' logical mistake I made, not a simple typo). Thanks to Sandra Bibiana Corea for reporting!
for compatibility with clang. Thanks to Brian Ripley for fixing one of these C++-things that I never will understand! (In this case, the original code (by Miguel Rodr<U+00ED>guez-Giron<U+00E9>s) defined a pointer to "vector", which caused ambiguities in which "vector" should be used during compilation: the such defined pointer, or the std::vector.)
and referencing corrections/additions (e.g. in plotPAC).
2.06b (release date: 10-May-2016)
czvalues
,where a z-value of NA is returned if a species is alone (in its trophic level) in a module. This is due to the way z-values are computed, and not a bug.
nestedcontribution
was not exported in the namespace. Fixed. Thanks to various people reporting this.
2.06 (release date: 29-Sep-2015)
C.score
,which did not compute the maximum number of possible checkerboards correctly, and hence let the normalised C-score to be incorrect. Now it uses a brute-force approach, which works fine but takes its time.
nestedcontribution
was not exported (i.e. not listed in the namespace file). Fixed. Thanks to Wesley D<U+00E1>tillo for reporting.
specieslevel
now correctly described a species' degree as sum of its links. Thanks to Bernhard Hoi<U+00DF> for the correction!
outcommented some unused variables in dendro.h and removed some fprintf-warnings in bmn5.cc
vaznull
:Threw an error when matrix was without 0s. Thanks to Thais Zanata for reporting.
2.05 (release date: 24-Nov-2014)
nestedcontribution
which computes the contribution of each species to the overall nestedness, based on Bascompte et al. 2003 and as used by Saavedra et al. 2011. Many thanks to Daniel Stouffer for contributing this function!
mgen
:this function is based on R-code written by Diego V<U+00E1>zquez (many thanks for sending the code), with a bit of brushing up options by CFD. The function takes a probability matrix generated by whatever mechanism and builds a null model from it. This is a niffty little idea, making null modelling concerned with generating ideas on what makes an interaction probable and leaving the step of producing and integer-network of simulated interactions to this function.
networklevel
``weighted connectance'' was only returned when ``linkage density'' was in ``index'' call; now also available on its own. Also sligthly revised the help file.
nested
with option weighted NODF called the unsorted version of this function,while calling the same index in networklevel
called the sorted. This is not nice (although not strictly wrong). Now both call the sorted version and users have to directly invoke nestednodf
for the unsorted option. Many thanks to Julian Resasco for reporting!
vaznull
:I (CFD) misread the original paper introducing this null model and hence assumed thatvaznull
would constrain marginal totals and connectance. However, this was not intended in Diego V<U+00E1>zquez original implementation and never stated anywhere (except in the help pages of this function here in bipartite). Hence, the help pages were changed to now reflect both intention and actual action of this function. This also means that currently only one null model with constrained marginal totals and connectance is available: swap.web
. Many thanks to Diego for clearing this up!
to adapt to the upcoming/new structure of vegan, which got rid of function commsimulator
(replaced by simulate
). Many thanks to Jari Oksanen for informing me about this!
to function second.extinct
for the case that a user wants to provide an extinction sequence for both trophic levels. There is no obvious way to simulate this across the two groups, and hence it is not implemented. Also added error messages for non-matching vector/web dimensions and alike.
2.04 (release date: 25-Mar-2014)
computeModules
:This bug has been a constant thorn in my side. Somehow the C-code behind computeModules
could only be called once. On second call, it returned an error because somehow it kept some old files in memory. So far, I used a work-around (unloading and re-loading the dynamic library), which only worked on Windows and Mac. I still don't fully understand it, but thanks to Tobias Hegemann (whom I paid for being more competent than myself) we now have a function running bug-free on all platforms. (Deep sigh of relief.)
networklevel
did not work.Fixed this legacy issue, which was due to a confusion created by the index' earlier name of ``functional diversity''.
specieslevel
gave incomplete name for one index:Should be interaction push pull; also the function itself had the ``push pull''-bit messed up. Thanks to Natacha Chacoff for reporting!
Both should be the same and should fit the description in the help file. Thanks to Jimmy O'Donnell for reporting!
2.03 (release date: 15-Jan-2014)
Ghost text deleted. Thanks to Brian Ripley of the R-Team and CRAN for not only reporting the issue but also pointing to its solution!
specieslevel
:Similar to the argument in networklevel
; non-interacting species from the network were always excluded so far; new option FALSE not fully tested yet.
specieslevel
:``pollination support index'' returned ``PSI''; ``PDI'' now referenced correctly as ``paired differences index''.
grouplevel
and correspondingly in networklevel
:Previously, index="generality"
or "vulnerability"
was identical to "effective partners"
with option weighted=TRUE
, but different for weighted=FALSE
(to which only "effective partners"
responded). We reduced this to one index called "generality" or "vulnerability" (depending on the focal group), but which will now give the non-weighted mean if option weighted=FALSE
. It can still be called by "effective partners" for backward compatibility.
grouplevel
used fd
wrongly!Instead of returning the value for rows, it returned the functional diversity for columns (and vice versa). We also used the opportunity to rename the index to its correct name: ``functional complementarity'' and the function to fc
. Help pages for fc
and grouplevel
were adapted accordingly. Thanks to Mariano Devoto for pointing out this mistake!
networklevel
:This index is simply computed as linkage density divided by number of species in the network. Note that using empty.web=TRUE will affect this value (which is intended). Thanks to Becky Morris for suggesting to add this index here.
PDI
corrected.Thanks to Timothy Poisot for reporting some issues in the help page.
2.02 (release date: 30-Sep-2013)
grouplevel
(thus also affecting networklevel
).Networks with only one species in one of the two levels resulted in errors, rather than simply return NA for C-score and secondary extinction computation. Thanks to whoever it was for reporting (at the INTECOL workshop).
specieslevel
:Gave error messages for closeness and betweenness if the network had no shortest path. Now returns a warning and NAs instead. Reported: JF.
networklevel
:Failed to work when an index was listed twice in the function call. Reported: JF.
r2dexternal
:This function is a null model algorithm like Patefields (r2dtable
, but it excepts externally measured abundances to compute the null model-expectation. Experimental.
computeModules
fixed.Because some object was not deleted, memory consumption of this function shot through the roof (with time). Since R has a somewhat weird way of handling memory, I think that also subsequent operations were slower (because the dynamically expanded memory is not being shrunken again, which is a problem if you use the hard drive as RAM). Thanks to Florian Hartig for investing the time to fix it!
2.01 (release date: 28-Jun-2013) This release features smoothing of various glitches that were introduced when we cleaned up the code for version 2.00.
specieslevel
:Computes the nestedness rank (as proposed by Alarcon et al. 2008). Can also be employed directly using the new function nestedrank
with options for weighting for number of interactions per link, normalising the rank and different method to compute the nestedness-arranged matrix.
specieslevel
:Now returns an error message if the index is not recognised, instead of an empty list.
plotweb
received an option to plot additional individuals of a species in different ways. For a host-parasitoid network, some hosts are not parasitised. This data vector can now be interpreted in two ways, making the plotting function a bit more flexible.
degreedistr
can now be invoked for each level separately. Also arguments can be passed to the plotting options.
junker2013
:a nice and large pollination network. Thanks to Robert Junker for providing this data set!
for random extinction sequences. This was so far not possible, because the function did not combine extinction sequences of different lengths. This was simply an oversight, reported by Richard Lance. (Thanks!)
2.00 (release date: 15-Mar-2013)
A new version number usually indicates substantial changes. In this case, we have re-named and re-grouped some of the output of networklevel
and specieslevel
for greater consistency and transparency. Beware! Running the same functions now (2.00 and up) will yield different results to <2.00 (because the same values are now in a different sequence).
We also started carefully renaming indices and re-writing help files. The main reason is that we started this work thinking of pollination networks. Over time, however, other types of ecological networks came into focus, and now also non-ecological networks are on the table. Thus, we started (and shall continue) referring to lower and higher levels, rather than plant and pollinators, hosts and predators or even trophic levels. Thus, in our emerging nomenclature the two levels are referred to as “groups” (their members remain “species” interacting with their “partners” in the other group).
Please read (or at least skim) the help pages before using a function of version 2.00 for the first time.
In function specieslevel
indices can now be computed for levels separately (or together). Few user-visible changes, but complete re-structuring under the hood. Option species number was moved to grouplevel
as number of species.
In the new function grouplevel
we collected all indices that can be computed for each of the two groups (i.e. trophic or other levels). Indices can be computed for each group separately or for both simultaneously. All group-level indices are also accessible through networklevel
!
In the new function linklevel
we collected all indices that can be computed for each cell of the bipartite matrix. Currently, there are few such indices, however.
In function networklevel
we dropped the plotting options. Users wanting to plot degree distributions or extinction slopes are encouraged to use the functions degreedistr
and slope.bipartite
, respectively.
Furthermore, due to licensing issues, we copy-pasted several functions from the package tnet, created and maintained by Tore Opsahl, to bipartite. We have so far called these functions from tnet, but only recently did R start to enforce license compatibility, which caused this step (bipartite being GPL and tnet being CC by-NC 3.0). We are really very grateful to Tore for allowing us to include the following functions: as.tnet
, betweenness_w
, closeness_w
, clustering_tm
, distance_w
, symmetrise_w
, tnet_igraph
.
Here a more detailed list of changes:
networklevel
Function call and output now more consistent in naming and sequence. When higher and lower level indices are given (e.g. extinction slopes, number of shared partners), the first will always be the one referring to the property of the lower level. From a pollinator network perspective, the first value in such a pair describes a plant-level index, the second a pollinator-level index.
Indices mean interaction diversity dropped from networklevel
. We found no reference to this metric and saw little use for it. It is very similar to vulnerability/generality and can easily be computed from the output of specieslevel
as mean(specieslevel(web, index="diversity"))
.
Now also accepts non-integer values as input. The argument H2_integer will then automatically be set to FALSE. Will return NA for those indices that cannot be computed (e.g. Fisher's alpha). As a knock-on effect, H2fun
had to be slightly adapted to round to machine precision when searching for H2min. (A somewhat technical detail, but making H2fun
getting caught sometimes.)
grouplevel
in which we collected indices that can be computed for each of the two groups (i.e. trophic or other levels). Indices can be computed for each group separately or for both simultaneously. All group-level indices are also accessible through networklevel
!
linklevel
in which we collect indices that can be computed for each cell of the bipartite matrix.
PDI
:normalise=FALSE offers the option of using the index as originally proposed, although we prefer to use TRUE and made this the default.
bezerra2009
.Network was actually the transpose of the correct network and hence wrongly had plant species as columns.
endpoint
computes end-point degrees following Barrat et al. (2004); one of the indices computed at linklevel
.
frame2webs
helps organising data into one or more webs.
webs2array
helps organising webs into one array.
specieslevel
gained two new indices (thanks to Jochen Fr<U+00FC>nd): proportional similarity and proportional generality. See help page of that function for details.
npartite
Experimental function to analyse more-than-2-level networks.
visweb
now obeys the label size to make sure labels are always in the plotting area. Thanks to Zachary Grinspan for drawing our attention to this issue.
second.extinct
Function failed for argument participant="both" because I filled the extinction sequence with the wrong number of 0s (to achieve always the same dimensionality of results in repeated runs). Thanks to Carine Emer for reporting!
specieslevel
failed to work for non-matrix data (i.e. data.frames
). It now coerces data.frames
to matrix
as a first step and hence should work also on data.frame
s. Thanks to Marina Wolowski for drawing our attention to this problem.
dfun
:When external abundances were provided with a 0 in it, dfun
could throw up Inf
-values. Reported by Indrani Singh and fixed by Jochen Fr<U+00FC>nd.
nested
are now enshrined in stone. The initial reason was to set only the default for one function (nestedness
) to a faster setting (null.models=FALSE), but then I decided to restrict all settings to the defaults of the functions called (except for this one option).
null.t.test
:Did not work if only one index was given.
Note: We only had three types of bipartite webs in mind when starting this package: seed-disperser, plant-pollinator and host-parasitoid systems. In how far it makes sense to use these functionalities for other systems (or indeed even for these systems) lies in the hands of the user. Please refer to the literature cited for details on the theory behind the indices.
Input for most analyses is an interaction matrix of m nodes (= species) from one group (“higher”) with n nodes (= species) from another group (“lower”), i.e. a n x m matrix, where higher level nodes are in columns, lower level nodes in rows. Column and row names can be provided. This is fundamentally different from “one-mode” networks, which are organised as k x k matrix, i.e. one group of nodes only, in which each node can link (= interact) with each other. Such a format is incompatible with the functions we provide here. (Note, however, that functions as.one.mode
and web2edges
are convenience functions to morph bipartite networks into one-mode webs. Furthermore, some indices build on one-mode networks and are called from bipartite.)
Before you start with the network, you have to get the data into the right shape. The function frame2webs
aims to facilitate this process. Arranging a web, e.g. by size, is supported by sortweb
.
The typical first step is to visualise the network. Two functions are on offer here: one (visweb
) simply plots the matrix in colours depicting the strength of an interaction and options for re-arranging columns and rows (e.g. to identify compartments or nesting). The other function (plotweb
) plots the actual web with participants (as two rows of rectangles) connected by lines (proportional to interaction strength). Both can be customised by many options.
The second step is to calculate indices describing network topography. There are three different levels this can be achieved at: the entire web (using function networklevel
), at the level of each group (also using function networklevel
) or the individual node (= species; thus somewhat inconsistently called specieslevel
). Most other functions in the package are helpers, although some can be called on their own and return the respective result (dfun
, H2fun
and second.extinct
with slope.bipartite
).
The third step is to compare results to null models. Many interaction matrices are very incomplete snapshots of the true underlying network (e.g. a one-week sampling of a pollination network on a patch of 4 x 4 meters). As a consequence, many species were rarely observed, many are singletons (only one recording). To make analyses comparable across networks with different sampling intensity and number of species per group, we need a common yardstick. We suggest that users should use a null model, i.e. an algorithm that randomises entries while constraining some web properties (such as dimensions, marginal totals or connectance). The function nullmodel
provides a few such null models, but this is a wide field of research and we make no recommendations (actually, we do: see Dormann et al. 2009 and Dormann 2011, both shipping in the doc-folder of this package). You can also simulate networks using genweb
or null.distr
.
Finally, bipartite comes with 23 quantitative pollination network data sets taken from the NCEAS interaction webs data base (use data(package="bipartite")
to show their names) and it has a few miscellaneous functions looking at some special features of bipartite networks (such as modularity: computeModules
or potential for apparent competition: PAC
).
See help pages and vignette for details and examples.
For an overview of other computing resources, data, books, journals etc. check out this page: https://github.com/briatte/awesome-network-analysis.
Package: | bipartite |
Type: | Package |
Version: | 2.16 |
Date: | 2021-02-08 |
License: | GPL |
Alarcon, R., Waser, N.M. and Ollerton, J. 2008. Year-to-year variation in the topology of a plant-pollinator interaction network. Oikos 117, 1796--1807
Almeida-Neto, M. and Ulrich, W. (2011) A straightforward computational approach for measuring nestedness using quantitative matrices. Environmental Modelling & Software, 26, 173--178
Bascompte, J., Jordano, P. and Olesen, J. M. (2006) Asymmetric coevolutionary networks facilitate biodiversity maintenance. Science 312, 431--433
Beckett, S.J. 2016. Improved community detection in weighted bipartite networks. Royal Society open science 3, 140536
Bersier, L. F., Banasek-Richter, C. and Cattin, M. F. (2002) Quantitative descriptors of food-web matrices. Ecology 83, 2394--2407
Bl<U+00FC>thgen, N., Menzel, F. and Bl<U+00FC>thgen, N. (2006) Measuring specialization in species interaction networks. BMC Ecology 6, 12
Bl<U+00FC>thgen, N., Menzel, F., Hovestadt, T., Fiala, B. and Bl<U+00FC>thgen, N. (2007) Specialization, constraints, and conflicting interests in mutualistic networks. Current Biology 17, 1--6
Corso G., de Ara<U+00FA>jo A.I.L. and de Almeida A.M. (2008) A new nestedness estimator in community networks. arXiv, 0803.0007v1 [physics.bio-ph]
Dalsgaard, B., A. M. Mart<U+00ED>n Gonz<U+00E1>lez, J. M. Olesen, A. Timmermann, L. H. Andersen, and J. Ollerton. (2008) Pollination networks and functional specialization: a test using Lesser Antillean plant-hummingbird assemblages. Oikos 117, 789--793
Devoto M., Bailey S., Craze P. & Memmott J. (2012) Understanding and planning ecological restoration of plant-pollinator networks. Ecology Letters 15, 319--328
Dormann, C.F., Fr<U+00FC>nd, J., Bl<U+00FC>thgen, N., and Gruber, B. (2009) Indices, graphs and null models: analysing bipartite ecological networks. The Open Ecology Journal 2, 7--24
Dormann, C.F. (2011) How to be a specialist? Quantifying specialisation in pollination networks. Network Biology 1, 1--20
Galeano J., Pastor J.M. and Iriondo J.M. (2008) Weighted-Interaction Nestedness Estimator (WINE): A new estimator to calculate over frequency matrices. arXiv 0808.3397v1 [physics.bio-ph]
Mart<U+00ED>n Gonz<U+00E1>les, A.M., Dalsgaard, B. and Olesen, J.M. (2009) Centrality measures and the importance of generalist species in pollination networks. Ecological Complexity, 7, 36--43
Memmott, J., Waser, N. M. and Price, M. V. (2004) Tolerance of pollination networks to species extinctions. Proceedings of the Royal Society B 271, 2605--2611
Morris, R. J., Lewis, O. T. and Godfray, H. C. J. (2004) Experimental evidence for apparent competition in a tropical forest food web. Nature 428, 310--313
Morris, R. J., Lewis, O. T. and Godfray, H. C. J. (2005) Apparent competition and insect community structure: towards a spatial perspective. Annales Zoologica Fennici 42, 449--462.
M<U+00FC>ller, C. B., Adriaanse, I. C. T., Belshaw, R. and Godfray, H. C. J. (1999) The structure of an aphid-parasitoid community. Journal of Animal Ecology 68, 346--370
Pinheiro, R.B.P. et al. 2019. A new model explaining the origin of different topologies in interaction networks. Ecology 100, 1--30
Poisot, T., Lepennetier, G., Martinez, E., Ramsayer, J., and Hochberg, M.E. (2011a) Resource availability affects the structure of a natural bacteria-bacteriophage community. Biology Letters 7, 201--204
Poisot, T., Bever, J.D., Nemri, A., Thrall, P.H., and Hochberg, M.E. (2011b) A conceptual framework for the evolution of ecological specialisation. Ecology Letters 14, 841--851
Tylianakis, J. M., Tscharntke, T. and Lewis, O. T. (2007) Habitat modification alters the structure of tropical host-parasitoid food webs. Nature 445, 202--205
V<U+00E1>zquez, D. P. and Aizen, M. A. (2004) Asymmetric specialization: A pervasive feature of plant-pollinator interactions. Ecology 85, 1251--1257
V<U+00E1>zquez, D.P., Chacoff, N.,P. and Cagnolo, L. (2009) Evaluating multiple determinants of the structure of plant-animal mutualistic networks. Ecology 90, 2039--2046.
# NOT RUN {
data(Safariland)
plotweb(Safariland)
visweb(Safariland)
networklevel(Safariland)
specieslevel(Safariland)
# }
Run the code above in your browser using DataLab