PDI: Paired Differences Index

Description Usage Arguments Details Value Note Author(s) References See Also Examples


Computes the Paired Differences Index


PDI(web, normalise=TRUE, log=FALSE)



A bipartite interaction web, i.e.~a matrix with higher (cols) and lower (rows) trophic levels.


Logical; divides for each species by the maximum of interactions. Thereby species can be compared among each other and values range between 0 and 1. Defaults to TRUE, which differs from Poisot et al. (2011a). Note that Tim Poisot also recommends the normalised computation as default.


logical; since number of interactions is often highly skewed, the log yields a more even spread of PDI-values across species. Defaults to FALSE.


There are many ways to skin a cat. This is a more recent addition proposed by Poisot et al. (2011a) and used for mutualistic network analysis by Poisot et al. (2011b). This function can be used alone or through specieslevel.

If P is interaction strength (typically interaction frequency or proportion depending on argument normalized), then PDI for this species is computed as:

sum(P1 - Pi) /(H-1),

where P1 is the highest number of interactions in a link, while Pi are the remaining values. H is the number of potential interactors (e.g. plant species if the target species is a pollinator).


Returns a vector with PDI values between 0 (perfect generalist) and 1 (perfect specialist).


  1. When a binary web is fed to this function (e.g. PDI(web>0)) this function returns Poisot et al.'s (2012) “resource range”. Resource range has a value of 0 when all resources are used, and a value of 1 when only one resource is used. It is thus more an “unused resource range”.

  2. This index was originally proposed for performance estimates with standardized resource frequency. It aims to characterize the performance decay as an organism moves away from its optimal resource. As such, it is strongly influenced by the performance on the optimal resource (by its absolute value with option normalised=FALSE and by its relative value in relation to the sum of all performances with normalised=TRUE). It is less clear what this index means for resource use data with variation in resource availability. In typical plant-flower visitor webs, PDI values may be close to 1 simply due to highly skewed plant abundance distributions.

  3. When interaction strength is estimated by a count variable (interaction frequency), PDI and many other indices are problematic for species with only one observation (singletons). In this case P1 is 1 (all interactions are on one plant species), all Pi are 0 and hence PDI is 1 - independent of the species' specialization. For a singleton we cannot estimate specificity, only discrimination (i.e. whether it happens to visit a common or rare plant species), as is done by d' (implemented in dfun).


Carsten F. Dormann <carsten.dormann@biom.uni-freiburg.de>


Dormann, C.F. (2011) How to be a specialist? Quantifying specialisation in pollination networks. Network Biology 1, 1–20

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

Poisot, T., E. Canard, N. Mouquet, and M. E. Hochberg. 2012. A comparative study of ecological specialization estimators. Methods in Ecology and Evolution 3, 537–544. doi: 10.1111/j.2041-210X.2011.00174.x.

See Also

See also specieslevel.


PDI(Safariland) # for pollinators
PDI(t(Safariland), log=TRUE) # for plants

Search within the bipartite package
Search all R packages, documentation and source code

Questions? Problems? Suggestions? or email at ian@mutexlabs.com.

Please suggest features or report bugs with the GitHub issue tracker.

All documentation is copyright its authors; we didn't write any of that.