Plot shared favourability for two competing species

[This article was first published on modTools, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

The sharedFav function below implements the graphical analyses of Acevedo et al. (2010, 2012) on biogeographical interactions. It takes two vectors of favourability values at different localities for, respectively, a stronger and a weaker competing species (or two equally strong competitors), and plots their favourableness or shared favourability to assess potential competitive interactions.

sharedFav <- function(strong_F, weak_F, conf = 0.95, main = "Shared favourability") { stopifnot(length(strong_F) == length(weak_F)) opar <- par(no.readonly = T) par(mar = c(4, 4, 2, 4.5)) F_intersection <- fuzzyOverlay(cbind(strong_F, weak_F), op = "intersection") F_union <- fuzzyOverlay(cbind(strong_F, weak_F), op = "union") Fovl <- sum(F_intersection, na.rm = TRUE) / sum(F_union, na.rm = TRUE) brks <- seq(0, 1, by = 0.1) bins <- 1:10 bin <- cut(F_intersection, breaks = brks, labels = bins) strong_mean <- tapply(strong_F, INDEX = bin, FUN = mean) weak_mean <- tapply(weak_F, INDEX = bin, FUN = mean) strong_ci <- tapply(strong_F, INDEX = bin, FUN = function(x) t.test(x, conf.level = conf, na.action = na.pass)$conf.int) weak_ci <- tapply(weak_F, INDEX = bin, FUN = function(x) t.test(x, conf.level = conf)$conf.int) strong_ci[names(Filter(is.null, strong_ci))] <- NA weak_ci[names(Filter(is.null, weak_ci))] <- NA strong_ci_up <- unlist(lapply(strong_ci, `[`, 2)) strong_ci_dn <- unlist(lapply(strong_ci, `[`, 1)) weak_ci_up <- unlist(lapply(weak_ci, `[`, 2)) weak_ci_dn <- unlist(lapply(weak_ci, `[`, 1)) bin_size <- table(bin) names(bin_size) <- names(bins) props <- bin_size / length(bin) bin <- as.integer(bin) bar_plot <- barplot(rep(NA, length(bins)), ylim = c(0, 1), xlab = "Favourability intersection", ylab = "Mean favourability", names.arg = brks[-1], main = main) col_bar <- "grey50" col_ci <- "grey" poly_left <- mean(bar_plot[2:3]) poly_right <- mean(bar_plot[8:9]) polygon(x = c(poly_left, poly_left, poly_right, poly_right), y = c(0, 1, 1, 0), col = "lightgrey", border = NA, density = 25, angle = -45) par(new = TRUE) barplot(props, col = col_bar, border = FALSE, xaxt = "n", yaxt = "n", add = TRUE) axis(side = 4, col = col_bar, col.axis = col_bar, col.ticks = col_bar, col.lab = col_bar) mtext(side = 4, line = 3, "Proportion of localities", col = col_bar) abline(h = 0.8, col = "grey", lty = 3) strong_x <- bar_plot - 0.1 weak_x <- bar_plot + 0.1 arrows(strong_x, strong_ci_dn, strong_x, strong_ci_up, code = 3, length = 0.03, angle = 90, col = col_ci) arrows(weak_x, weak_ci_dn, weak_x, weak_ci_up, code = 3, length = 0.03, angle = 90, col = col_ci) lines(x = strong_x, y = strong_mean, lwd = 2, lty = 1) lines(x = weak_x, y = weak_mean, lwd = 2, lty = 2) points(x = strong_x, y = strong_mean, pch = 20) points(x = weak_x, y = weak_mean, pch = 15, cex = 0.8) par(opar) return(Fovl) }

The function returns the fuzzy overlap index and a shared favourability plot similar to those of Acevedo et al. (2010, 2012). For more details, examples of use and additional references, see the help files of these functions in package fuzzySim >= 2.2, currently available on R-Forge. Special thanks to Pelayo Acevedo and Darío Chamorro for clarifications on how to build the plot!

sharedFav

References

Acevedo P., Ward A.I., Real R. & Smith G.C. (2010) Assessing biogeographical relationships of ecologically related species using favourability functions: a case study on British deer. Diversity and Distributions, 16: 515-528

Acevedo P., Jiménez-Valverde A., Melo-Ferreira J., Real R. & Alves, P.C. (2012) Parapatric species and the implications for climate change studies: a case study on hares in Europe. Global Change Biology, 18: 1509-1519

Richerson P.J. & Lum K. (1980) Patterns of plant species and diversity in California: relation to weather and topography. American Naturalist 116: 504-536

 

To leave a comment for the author, please follow the link and comment on their blog: modTools.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)