Project 4: Diversity profile

Overview

At the end of the last practical we looked at the diversity of a population using a variety of different diversity measures. We now want to be able to do that more easily so that we can examine the diversity profile of a population.

Background

Instead of looking at individual diversity measures, we can instead look at the diversity profile of a population. This is a plot of the effective number of species against \(q\), the parameter of this family of diversity measures. You should have observed in the previous exercise that the effective number of species drops as \(q\) increases, and you may remember that I said that this is because \(q\) is a measure of how much we care about evenness of the species abundances. At \(q = 0\), we don’t care at all, and the rarest species counts as much as the most common; at \(q = \infty\) we care only about evenness, and not about the actual number of species present. When we plot \(D_q\) against \(q\), profiles which drop away quickly are indicative of uneven distributions of species, whereas profiles which are less sensitive to \(q\) show more evenly distributed species (none much more abundant than any other).

Tasks

We want to plot \(D_q\) against \(q\) for a variety of values of \(q\) – say from 0 to 10 in small steps. First call your general diversity function with a vector of values for \(q\) instead of a single value. You will probably get a warning message, and in any event you will only get a single result, whereas you wanted a result for each value of \(q\). This is because the raise-to-the-power function ^ does not understand that you want to raise each species proportion to the first power, then each to the second power, and so on in turn and instead raises the first proportion to the first power, the second to the second, and so on. Instead we need to write a loop to iterate over the different values of \(q\).

First, you probably want to copy your existing functions again. You will edit these functions (renaming them as you go along) to create final, definitive diversity functions that do everything we want.

Final diversity functions for a single value of q

Add a test in the general diversity function that checks that there is only one value of \(q\) and stop()s if there is more than one – now we have identified a problem in our code, we want to avoid it happening again! We will stop worrying about the specific (e.g. species richness) functions now, as it’s boring to keep on rewriting them!

Function to create a diversity profile from multiple qs

Now write a completely new function to calculate a series of diversity measures for a vector of values of \(q\) given as a second argument (e.g. c(0, 0.1, 3.4, 7, 15) or 0:20, etc.). In the function, you should just loop over all of the values of \(q\) given to it as an argument (just like your original diversity function took one value of \(q\) as an argument) and then just call your single-q-value function with each value of \(q\) (and the population) in turn. We want to reuse our code from the last exercise as much as possible to avoid making new mistakes! It should then combine all of the results and return a vector of diversity measures that corresponds to the vector of values of \(q\) that it has been given. Remember that if we have a vector of values (called Dqs.so.far), and want to add a new value Dq to the end, then we can do that with just c(Dqs.so.far, Dq).

Running the code

Check that the first diversity function now correctly rejects more than one value of \(q\). Then calculate the diversity profiles of the datasets, and plot them all on a graph. You can display however you like, but in the simplest case you can use plot(qs, Dqs) for the first graph, and lines(qs, Dqs) for subsequent graphs while changing the colours (col=) or line types (lty=), etc.

Demo

Write a demo that calculates diversity profiles for each dataset, plots them against each other, and comments on the differences between the results.