Chapter 5 PSPMequi: evolutionary analysis
5.1 Theoretical and computational background
The analysis of evolutionary fixed points of non-linear PSPMs focuses on the question how the value of a particular model parameter would change if mutations would generate variability in this parameter value and selection would act on this variability. Adaptive dynamics (Metz et al. 1996; Geritz et al. 1998) constitutes an approach to answer such questions, while carefully taking into account the feedback of populations on their environment. The central function in the theory of adaptive dynamics is the long-term population growth of a mutant type in an environment that is completely dominated and hence determined by a resident population. This quantity is usually referred to with the symbol \(s_x(y)\), in which \(x\) refers to the type of the resident population and \(y\) refers to the type of the mutant. Not surprisingly, when the mutant is identical to the resident it has a population growth rate \(0\), since the resident is assumed to persist indefinitely (Notice that this does no require the population to be in equilibrium). Therefore: \[s_x(y)|_{y=x}=0\] Furthermore, the partial derivative \(\partial s_x(y)/\partial y\) equals the selection gradient, indicating whether a mutation-selection process will lead to larger or smaller values of the trait \(x\). If
\[\begin{equation} \dfrac{\partial s_x(y)}{\partial y}\biggl|_{y=x}>0\tag{5.1} \end{equation}\]
a mutant with a trait value \(y\) larger than the resident trait value \(x\) will have a positive long-term growth rate and hence will be able to invade, while the opposite holds for when the partial derivative is negative. An evolutionary singular point, which will be indicated with \(x^*\), now occurs where \[\dfrac{\partial s_x(y)}{\partial y}\biggl|_{y=x^*}=0\] Furthermore, The second-order partial derivatives \[\dfrac{\partial^2 s_x(y)}{\partial x^2}\biggl|_{y=x^*}\qquad\mathrm{and}\qquad\dfrac{\partial^2 s_x(y)}{\partial y^2}\biggl|_{y=x^*}\] determine whether the evolutionary singular point is a convergent stable strategy (CSS), an evolutionary repellor (ERP) or an evolutionary branching point (EBP) (Geritz et al. 1998).
In the bifurcation analysis of PSPMs the equilibrium of a structured population is determined by the condition \[R_0-1=0\] in which \(R_0\) is the expected number of offspring produced by a single individual of the structured population during its entire life. \(R_0\) is not the same as the long-term population growth rate, but the condition \(R_0-1\) is sign-equivalent with the population growth rate: the sign of \(R_0-1\) and the population growth rate are always the same and when \(R_0-1\) equals \(0\), the population growth rate is \(0\) as well. According to the theory of adaptive dynamics (Metz et al. 1996; Geritz et al. 1998) the function \(R_0-1\) can therefore be used for the analysis of evolutionary fixed points of PSPMs.
In the context of the PSPMs the traits \(x\) and \(y\) will refer to the resident and mutant value, respectively, of one of the model parameters. The value of such a parameter will influence the expected number of offspring produced by a single individual of the structured population during its entire life, \(R_0\), if the parameter represents a life history characteristic. On the other hand, \(R_0\) is also influenced by the environment in which the individual lives. A key element of PSPMs is that this environment itself is influenced by the structured population to such an extent that the equilibrium value of the environment is determined by the population. The equilibrium value of the environment is hence also a function of the model parameters and we can write the equilibrium condition of the structured population more appropriately as: \[R_0(y, \tilde{E}(x))|_{y=x}-1 = 0\] In this condition \(x\) refers to the value of one of the model parameters in the PSPM of the resident type of individual that dominates the structured population and hence determines the equilibrium value of the environment variables \(\tilde{E}(x)\), whereas \(y\) refers to the value of that same parameter for a mutant type, which invades the population at low density. The partial derivatives of the function \(R_0(y, \tilde{E}(x))-1\) can therefore be used to classify a computed equilibrium in a PSPM as an evolutionary fixed point and determine whether it is a convergent stable strategy (CSS), an evolutionary repellor (ERP) or an evolutionary branching point (EBP) (Geritz et al. 1998). Since the constant 1 in this function is irrelevant for the partial derivatives, the quantities of interest are:
\[\begin{align*} {R_0}_x&:=\;\dfrac{\partial R_0(y, \tilde{E}(x))}{\partial y}\biggl|_{y=x^*}\\[3ex] {R_0}_{xx}&:=\;\dfrac{\partial^2 R_0(y, \tilde{E}(x))}{\partial x^2}\biggl|_{y=x^*}\\[3ex] {R_0}_{yy}&:=\;\dfrac{\partial^2 R_0(y, \tilde{E}(x))}{\partial y^2}\biggl|_{y=x^*} \end{align*}\]
During an equilibrium computation with the PSPMequi script the program can check for every computed equilibrium point the value of \({R_0}_x\). This test is, however, only performed when the option "popEVO" is set to a valid value, that is in the range \(0\) to POPULATION_NR-1. The value of this option identifies the index of the structured population, for which to carry out the evolutionary fixed point analysis. As default the option "popEVO" is not defined and the test of the evolutionary properties of the equilibrium is skipped, as was the case in the model analyzed in section 3.4. When the software detects a sign change in this quantity, it attempts to locate the exact position of the evolutionary fixed point by solving for the equilibrium of the PSPM with the additional condition \({R_0}_x=0\). When successful the software computes the second-order partial derivatives \({R_0}_{xx}\) and \({R_0}_{yy}\) to classify the evolutionary fixed point. The computation of these partial derivatives is done entirely numerically using a central-differencing approach. Unless it fails to compute one of the partial derivatives properly, the software will report whether a convergent stable strategy (CSS), an evolutionary repellor (ERP) or an evolutionary branching point (EBP) has been detected.
Once an evolutionary fixed point is detected, the software allows for 2 further steps of analysis of the evolutionary fixed point. The first type of analysis that can be carried out is that the evolutionary fixed point can be computed for a range of values of a second model parameter. More precisely, the condition \({R_0}_x=0\) is added as supplementary condition to the system of equations determining the equilibrium of the PSPM and because of this additional condition one more unknown quantity, the value of a second model parameter, has to be solved for. This type of computations is referred to with the acronym "ESS". They yield curves that show the evolutionary stable value of the evolutionary parameter as a function of the first bifurcation parameter.
The software is in fact sufficiently general to allow for continuation of curves with multiple model parameters having their evolutionary stationary value. These curves are all indicated with the acronym "ESS". For each evolutionary parameter the corresponding condition \({R_0}_x=0\) is added to the system of equations to solve. For each parameter at its evolutionary stationary value the vector of initial estimates of a solution point (the third argument to the function PSPMequi) should contain a value close to this evolutionary stationary value. In addition, the fifth argument to the function PSPMequi (see section 3.4.2) has to be extended with a set of 4 values for each parameter at its evolutionary stationary value, specifying the index of the population that the parameter pertains to, the index of the parameter in the model and its allowable minimum and maximum value. As discussed in section 3.4.2 this fifth argument to the function PSPMequi should for "ESS" computations contain at least 7 values, the first 3 values for the bifurcation parameter and the following 4 values for the model parameter that is fixed at its evolutionary stationary value, but it can be extended with more sets of 4 values in case the "ESS" curve is characterized by multiple parameters at their evolutionary stationary value. The number of sets of 4 values for evolutionary parameters should match the number of initial estimates for these parameters in the third argument to the function PSPMequi.
In case their is only a single model parameter at its evolutionary stationary value the current version of the software computes the second-order partial derivatives \({R_0}_{xx}\) and \({R_0}_{yy}\) and writes these second-order derivatives to the output file. These derivatives provide a classification of the evolutionary stationary point in terms of convergent stable, evolutionary repellor or evolutionary branching point (Geritz et al. 1998). In the multi-dimensional case, when computing curves of evolutionary stationary points with multiple life history traits evolving, the situation is more complicated. During such multi-dimensional ESS continuations, the program does not report the quantities R0_xx and R0_yy, but instead provides as output the dominant eigenvalues of the Jacobian and Hessian matrices of the canonical equation, the dominant eigenvalue of the symmetric part of the Jacobian matrix, as well as the quantity \(z^TC_{01} z\), which determines whether or not evolutionary branching can occur at an evolutionary stationary state that is attracting, but not evolutionary stable. In this expression \(z\) is the dominant eigenvector of the Hessian matrix and \(C_{01}=J-H\), the matrix with cross-derivatives of the canonical equation with respect to the mutant and the resident traits. For more details, see Leimar (2005) and Geritz, Metz, and Rueffler (2016). However, in these multi-dimensional cases these quantities are only computed if all parameters at their ESS value pertain to the same structured population. When ESS parameters pertain to different structured populations (i.e. co-evolutionary studies) these second-order derivatives are not computed and hence not written to the output file.
The second type of analysis that can be performed is the computation of the pairwise invasibility plot (or PIP; for an explanation see Geritz et al. (1998)) starting from the evolutionary fixed point. This type of computation is indicated with the acronym "PIP" and is carried out by supplementing the system of equations determining the equilibrium of the PSPM with the condition \(R_0(y, \tilde{E}(x))=1\). Because of this extension, one more unknown variable has to be solved for, which in this case is the mutant value of the model parameter \(y\). The first and second bifurcation parameter in this case have the same index in the array of parameter values, but the first bifurcation parameter refers to the resident value \(x\) of this parameter, while the second bifurcation parameter refers to the mutant value \(y\). The result of such a computation is a curve in the parameter space spanned by \(x\) and \(y\), where the growth rate of a mutant with parameter value \(y\) in an equilibrium environment determined by a resident population with parameter value \(x\) has a zero population growth rate. PIPs are plots of such curves and these plots can be used for inferring various evolutionary consequences (Geritz et al. 1998).
While performing computations of the type "ESS" and "PIP" the software continuously computes the value of the second order partial derivatives \({R_0}_{xx}\) and \({R_0}_{yy}\) and writes these values to the output file (with extension .out). Inspection of the output file can hence also indicate whether an evolutionary fixed point changes its type, for example from CSS to EBP or vice versa. Automatic detection and processing of such type changes is, however, (currently) not implemented in the software.
5.2 An example model for the analysis of evolutionary fixed points
The analysis of evolutionary fixed points of PSPMs will be illustrated using a model for a size-structured consumer population feeding on a resource \(R\). Individual consumers are assumed to be born at size \(s_b\) and forage on the resource at a rate proportional to an allometric function of their size, \(s^q\). They are furthermore assumed to have a linear functional response, such that their ingestion rate equals \(\gamma(s, R)=I_{max}Rs^q\). Ingested energy is assimilated with a constant conversion efficiency \(\sigma\). Maintenance costs are also assumed to follow an allometric relation of body size, \(Ts^p\).
Juvenile individuals spend all their net energy production on growth in body size and hence have a somatic growth rate \(\sigma\gamma(s, R)-Ts^p\). Above a body size threshold \(s=s_j\), referred to as the maturation size, individuals decrease the fraction of their net-energy production that they invest in somatic growth and use the remainder for investments in reproduction. The function \(\kappa(s)\) indicates the fraction of net-energy production invested in somatic growth. \(\kappa(s)\) is a cubic function of size that decreases smoothly and continuously from a value of 1 at \(s=s_j\) to a value \(0\) at \(s=s_m\). The size threshold \(s=s_m\) hence represents the maximum body size individual consumers can possibly reach. The energy invested into reproduction is converted into offspring with size \(s=s_b\). No further conversion losses are assumed to occur during somatic growth and reproduction, the conversion efficiency \(\sigma\) is assumed to include all such losses. The somatic growth rate hence equals \(g(s, R)=\kappa(s)(\sigma\gamma(s, R)-Ts^p)\), while the fecundity is given by \(\beta(s, R)=(1-\kappa(s))(\sigma\gamma(s, R)-Ts^p)/s_b\). Consumers experience a constant, size-independent mortality. Finally, in the absence of consumers the resource follows semi-chemostat dynamics with turn-over rate \(\delta\) and maximum resource density \(R_{max}\).
The model dynamics can now be described by the following system of partial and ordinary differential equations for the resource density \(R\) and the consumer size distribution \(n(t,s)\):
\[\begin{align*} &\dfrac{\partial n(t, s)}{\partial t}\:+\:\dfrac{\partial\left(g(s, R) n(t, s)\right)}{\partial s}\;=\;-\mu\,n(t,s)\qquad\qquad\qquad\\[2ex] &g(s_b, R)\,n(t, s_b)\;=\;\int_{s_b}^{s_m} \beta(s, R)\,n(t,s)\,ds\\[2ex] &\dfrac{dR}{dt}\;=\;\delta\left(R_{max}-R\right)\;-\;\int_{s_b}^{s_m} \gamma(s, R)\,n(t, s)\,ds \end{align*}\]
As discussed above the individual life history functions representing food ingestion, somatic growth, fecundity and the fraction of net-energy production allocated to somatic growth are given by:
\[\begin{align*} &\gamma(s, R)\;=\;I_{max}\,R\,s^q\\[1ex] &g(s, R)\;=\;\kappa(s)\left(\sigma\gamma(s, R)\,-\,T\,s^p\right)\\[1ex] &\beta(s, R)\;=\;\dfrac{\left(1-\kappa(s)\right)\left(\sigma\gamma(s, R)\,-\,T\,s^p\right)}{s_b}\\[1ex] &\kappa(s)\;=\; \begin{cases} 1&\textrm{if $s\leq s_j$}\\ 1\,-\,3\left(\dfrac{s-s_j}{s_m-s_j}\right)^2\,+\,2\left(\dfrac{s-s_j}{s_m-s_j}\right)^3\qquad&\textrm{otherwise} \end{cases} \end{align*}\]
The evolutionary fixed point analysis will focus on the parameter \(q\), the allometric scaling exponent of ingestion rate with body size \(s\). Default values of the other parameters are: \(\delta=0.1\), \(R_{max}=2.0\), \(I_{max}=1.0\), \(T=0.1\), \(p=1.0\), \(s_b=0.05\), \(s_j=1.0\), \(s_m=2.0\) and \(\sigma=0.5\). The background mortality experienced by consumers is assumed to equal \(\mu=0.01\).
The model is implemented in the model-specific file Indet_growth.h, which can be opened by executing the command showpspm("Indet_growth.h")
. The implementation of the model follows the guidelines as presented for the PNAS model in section 3.2 and will therefore not be discussed in detail. The reader is encouraged to inspect the file Indet_growth.h and work out the translation of the mathematical formulation given above into the necessary C-code elements required for analysis.
5.3 Model analysis
The analysis can be performed by executing the demo "Indet_growth", which is included with this R package (execute it using demo("Indet_growth", echo = FALSE)
). Below 3 commands will be discussed that are executed by the demo script "Indet_growth" and that illustrate the possibilities to use the software for evolutionary fixed point analysis. The demo script "Indet_growth" furthermore performs some plotting of the output data generated by the computational module.
The analysis starts out by computing the equilibrium of the consumer-resource model as a function of the parameter \(q\), the allometric scaling exponent of ingestion with body size \(s\). This parameter has index 6 in the parameter array defined in the model-specific file Indet_growth.h (see line 50–80 in that file). The computation starts from an equilibrium point at \(q=1.0\), computing the equilibrium for decreasing values of \(q\) in the range \(0.5\leq q\leq 2.0\). Hence, the fourth and fifth argument of the PSPMequi function, which specify the step size along the equilibrium curve and the index of the bifurcation parameter plus the limits to its range for the computation, respectively, are taken equal to -0.1 and c(6,0.5,2.0).
The initial point for the computations is a rather crude estimate of the equilibrium state for \(q=1\), for which parameter value all rates are linear in body mass \(s\). Per unit biomass the net-production rate of new biomass, either through somatic growth or through fecundity, then equals \(\sigma I_{max}R-T\), while the loss rate per unit biomass equals the mortality rate \(\mu\). Equating these two rates to each other, yields the equilibrium resource density \(\tilde{R}=(T+\mu)/(\sigma I_{max})=0.22\). The initial estimate for the population birth rate in equilibrium is especially crude, as it is taken equal to \(0\). Despite that the initial point is not close to the equilibrium solution for \(q=1\) the computations easily converge as can be seen in the R command box below.
Furthermore, the computations are carried out with the default parameter values, such that the 6th argument of the function PSPMequi is left undefined (NULL). The last argument of the function PSPMequi is the option vector, in which the option "popEVO" is set equal to "0". Defining this option instructs the program to compute the selection gradient in the evolutionary parameter during equilibrium continuations (Curve type "EQ"). The evolutionary parameter can be any of the parameters in the parameter vector by assigning the index of the particular parameter to the option "parEVO" in the option vector. However, only when the option "parEVO" is set equal to the bifurcation parameter or left unspecified (in which case parEVO defaults to the bifurcation parameter) is it possible to assess whether or not a computed equilibrium is an evolutionary fixed point. Below the option "popEVO" identifies the structured population with index 0 as the population for which to carry out the evolutionary analysis (obviously, as it is the only population in this problem).
Command box 6.3.A
> output1 <- PSPMequi("Indet_growth","EQ",c(1.0,0.22,0.0),-0.1,c(6,0.5,2.0),NULL,c("popEVO","0"))
Building executable Indet_growthequi.so ...
<...compilation output lines suppressed in this box...>
1.00000000E+00, 2.20000000E-01, 3.55373787E-02
9.98043762E-01, 2.19653632E-01, 3.45381701E-02
9.96005285E-01, 2.19313094E-01, 3.35389579E-02
<...output lines suppressed in this box...>
9.44570226E-01, 2.15621677E-01, 1.85536239E-02
9.38263361E-01, 2.15592978E-01, 1.75885671E-02 **** CSS #0 ****
9.38034889E-01, 2.15593014E-01, 1.75557539E-02
<...output lines suppressed in this box...>
5.18672353E-01, 2.40531837E-01, 7.04499110E-03
5.09283848E-01, 2.41208400E-01, 7.01122420E-03
4.99855836E-01, 2.41890186E-01, 6.97858797E-03
> cat(output1$curvedesc)
#
# Executing : PSPMequi("Indet_growth", "EQ", c(1, 0.22, 0), -0.1, c(6, 0.5, 2), NULL, c("popEVO", "0"))
#
# Parameter values :
#
# Delta : 0.1 Rmax : 2 Sb : 0.05
# Sj : 1 Sm : 2 Imax : 1
# q : 1 Sigma : 0.5 T : 0.1
# p : 1 Mu : 0.01
#
# Index and name of bifurcation parameter #1 : 6 (q)
# Index of parameter for computation of selection gradient : 6
# Index of structured population selection gradient belongs to : 0
#
# 1:q 2:E[0] 3:b[0] 4:I[0][0] 5:I[0][1] 6:I[0][2] ....
> output1$curvepoints
q E[0] b[0] I[0][0] I[0][1] I[0][2] R0[0] R0_x[6] RHS norm
[1,] 1.0000000 0.2200000 0.03553738 0.1780000 0.53230236 0.2767885 1.0000000 -4.144555e+01 9.579106e-09
[2,] 0.9980438 0.2196536 0.03453817 0.1780346 0.52939068 0.2798577 1.0000000 -3.894615e+01 3.294274e-08
[3,] 0.9960053 0.2193131 0.03353896 0.1780687 0.52628792 0.2831152 1.0000000 -3.648053e+01 3.052791e-08
<...output lines suppressed in this box...>
[18,] 0.9445702 0.2156217 0.01855362 0.1784378 0.43178150 0.3792995 1.0000000 -2.091709e+00 1.618872e-08
[19,] 0.9382634 0.2155930 0.01758857 0.1784407 0.41943590 0.3916582 1.0000000 -9.063882e-11 7.983139e-09
[20,] 0.9380349 0.2155930 0.01755575 0.1784407 0.41899094 0.3921031 1.0000000 7.059485e-02 8.044140e-09
<...output lines suppressed in this box...>
[56,] 0.5186724 0.2405318 0.00704499 0.1759468 0.10149399 0.6982643 1.0000000 6.421252e+00 1.465988e-09
[57,] 0.5092838 0.2412084 0.00701122 0.1758792 0.09943055 0.7000202 1.0000000 6.322922e+00 2.255060e-09
[58,] 0.4998558 0.2418902 0.00697859 0.1758110 0.09742641 0.7017144 1.0000000 6.227017e+00 1.991225e-09
> output1$bifpoints
q E[0] b[0] I[0][0] I[0][1] I[0][2] R0[0] R0_x[6] RHS norm
[1,] 0.9382634 0.215593 0.01758857 0.1784407 0.4194359 0.3916582 1 -9.063882e-11 7.983139e-09
> output1$biftypes
[1] "CSS #0"
As can be seen in the command box above an evolutionary fixed point is detected at \(q^*=0.938266\). On the basis of the second-order partial derivatives, which are not reported explicitly by the program during this computation, the fixed point is classified as a convergent stable strategy. It occurs (self-evidently in this model) in the structured population with index \(0\). The output element output1$biftypes therefore consists of the single string "CSS #0".
Because the program is instructed to assess the evolutionary properties of the computed equilibrium points, the output matrix output1$curvepoints produced by the call to PSPMequi, has an additional column of output compared to the columns of output discussed in section 3.4, labeled R0_x[0] (column 8). This is the derivative of the \(R_0\) value, the expected number of offspring produced by an individual during its entire life, with respect to the bifurcation parameter \(q\) for the population with index \(0\). Inspection of this column shows that this derivative is negative for \(q\)-values larger than \(q^*\) and positive for \(q\)-values smaller than this evolutionary fixed point value. This implies that for \(q>q^*\) a mutation-selection process will select for smaller values of the trait \(q\), while larger \(q\)-values will be selected for when \(q<q^*\). The evolutionary fixed point \(q^*\) is therefore convergent. The demo script "Indet_growth" illustrates this computation by plotting the equilibrium resource density and the equilibrium consumer biomass as a function of the parameter \(q\). At the CSS the equilibrium resource density reaches a minimum value.
In the next step of the analysis the detected evolutionary fixed point is used as starting point for a computation of its value as a function of a second model parameter, \(p\), the allometric scaling exponent of the maintenance rate with body size. The acronym of this type of computation is "ESS", which is supplied as the second argument to the PSPMequi function in the next R command box. Such "ESS" computations always use a parameter that is not defined to have its evolutionary stationary value as (first) bifurcation parameter. The evolutionary parameters are added as additional variables to the problem, which are following all values for the environmental variable(s) and population birth rate(s). Since the default parameter value for \(p\) is 1.0, the initial point of the "ESS" computation below is specified as c(1.0,output1$bifpoints[c(2,3,1)]), given that the second, third and first element of the array bdata1 represent the equilibrium resource density, equilibrium birth rate and the evolutionary stationary value \(q\)-value in the evolutionary fixed point, respectively.
The fifth argument to the function PSPMequi, specifying the indices and range limits of the variable parameters in the computation, now has to contain as first triplet the index, minimum and maximum value of the bifurcation parameter \(p\) in the problem. This initial triplet is followed by a set of 4 values specifying the index of the population that the ESS parameter pertains to, plus the index, minimum and maximum value of the parameter \(q\), which is assumed to have its evolutionary stationary value. Because there is only a single population in this model, the evolutionary computations focus on the \(R_0\) value of the structured population with index \(0\). Furthermore, the parameter \(p\) has index 9 in the parameter array defined in the model-specific file Indet_growth.h (see line 50–80 in that file) and for the computation its value is restricted to the interval \(0.5\leq p\leq 2.0\). The array c(9,0.5,2.0,0,6,0.5,2.0) is therefore passed as 5th argument to the PSPMequi function.
Command box 6.3.B
> output2 <- PSPMequi("Indet_growth","ESS",c(1.0,output1$bifpoints[c(2,3,1)]),-0.1,c(9,0.5,2.0,0,6,0.5,2.0))
Dynamic library file Indet_growthequi.so is up-to-date
1.00000000E+00, 2.15592978E-01, 1.75885671E-02, 9.38263361E-01
9.52112206E-01, 2.15270182E-01, 1.68344054E-02, 8.93418030E-01
9.02584076E-01, 2.14960684E-01, 1.61012822E-02, 8.46885465E-01
<...output lines suppressed in this box...>
5.46566010E-01, 2.13317616E-01, 1.20009255E-02, 5.08772277E-01
5.39357300E-01, 2.13292903E-01, 1.19355247E-02, 5.01872554E-01
5.32149192E-01, 2.13268473E-01, 1.18707128E-02, 4.94971646E-01
> cat(output2$curvedesc)
#
# Executing : PSPMequi("Indet_growth", "ESS", c(1, 0.215593, 0.0175886, 0.938263), -0.1, c(9, 0.5, ....
#
# Parameter values :
#
# Delta : 0.1 Rmax : 2 Sb : 0.05
# Sj : 1 Sm : 2 Imax : 1
# q : 0.938263 Sigma : 0.5 T : 0.1
# p : 1 Mu : 0.01
#
# Index and name of bifurcation parameter #1 : 9 (p)
# Index and name of parameter #1 at ESS value : 6 (q)
# Index of the population that parameter #1 pertains to : 0
#
# 1:p 2:E[0] 3:b[0] 4:q 5:I[0][0] 6:I[0][1] ....
> output2$curvepoints
p E[0] b[0] q .. R0[0] R0_x[9] R0_xx[0] R0_yy[0] RHS norm
[1,] 1.0000000 0.2155930 0.01758857 0.9382634 .. 1 -1.5738698 309.7485 -309.7484 1.835198e-07
[2,] 0.9521122 0.2152702 0.01683441 0.8934180 .. 1 -1.4786767 315.4750 -315.4750 1.667893e-09
[3,] 0.9025841 0.2149607 0.01610128 0.8468855 .. 1 -1.3850836 321.1646 -321.1645 1.915999e-09
<...output lines suppressed in this box...>
[44,] 0.5465660 0.2133176 0.01200093 0.5087723 .. 1 -0.8414241 355.0860 -355.0859 7.337919e-10
[45,] 0.5393573 0.2132929 0.01193552 0.5018725 .. 1 -0.8324827 355.6522 -355.6522 6.843518e-10
[46,] 0.5321492 0.2132685 0.01187071 0.4949716 .. 1 -0.8236145 356.2138 -356.2138 6.314061e-10
(Notice that some of the intermediate columns of output have been suppressed in the R command box above to keep the displayed output within the page width).
The most important quantities to observe in the output above are the columns in the data matrix output2$curvepoints labeled R0_xx and R0_yy, which represent the second-order partial derivatives of the \(R_0\) value with respect to the resident and mutant value of the parameter \(q\), respectively. As discussed in section 5.1 these second-order partial derivatives classify the evolutionary fixed point as a convergent stable strategy, an evolutionary repellor or an evolutionary branching point (see Geritz et al. (1998) for details). The output shown above indicates that the evolutionary fixed point remains a convergent stable strategy over the entire range of parameters for which the curve is computed, because R0_xx is always larger than R0_yy.
The graphical illustration produced by the demo script "Indet_growth" for this computation consists of the curve of the evolutionary fixed point value of \(q\) (column 4 in the data matrix output2$curvepoints) as a function of the bifurcation parameter \(p\) (column 1 in the data matrix output2$curvepoints).
Notice that the quantities R0_xx and R0_yy are only relevant in the 1-dimensional case, that is if only a single life history is assumed to adopt its evolutionary stationary value in the ESS continuation. In the multi-dimensional case, when computing curves of evolutionary stationary points with multiple life history traits evolving, the situation is more complicated. During such multi-dimensional ESS continuations, the program does not report the quantities R0_xx and R0_yy, but instead provides as output the dominant eigenvalues of the Jacobian and Hessian matrices of the canonical equation, the dominant eigenvalue of the symmetric part of the Jacobian matrix, as well as the quantity \(z^TC_{01} z\), which determines whether or not evolutionary branching can occur at an evolutionary stationary state that is attracting, but not evolutionary stable. In this expression \(z\) is the dominant eigenvector of the Hessian matrix and \(C_{01}=J-H\), the matrix with cross-derivatives of the canonical equation with respect to the mutant and the resident traits. For more details, see Leimar (2005) and Geritz, Metz, and Rueffler (2016).
The last step in the analysis of the evolutionary fixed point is to construct the pairwise invasibility plot or PIP, starting from the detected evolutionary fixed point. The type of computation is now specified as "PIP". The third argument in the call to the function PSPMequi, representing the starting point of the computation, equals c(output1$bifpoints[c(1,2,3,1)]), which array contains in addition to the resident value of the parameter \(q\), the equilibrium resource density and the equilibrium population birth rate the mutant value of the parameter \(q\). In the detected evolutionary fixed point this mutant parameter value equals the resident value. Because the resident and mutant parameter are two values of the same model parameter the two triplets that make up the fifth argument to the function PSPMequi are identical. This argument hence equals c(6,0.5,2.0,6,0.5,2.0). The function is moreover called twice, once with a positive step size of \(0.1\) and once with a negative step size of -0.1, to compute the boundary in the PIP that radiates out from the evolutionary fixed point in two directions.
Command box 6.3.C
> output3 <- PSPMequi("Indet_growth","PIP",c(output1$bifpoints[c(1,2,3,1)]),0.1,c(6,0.5,2.0,6,0.5,2.0),
NULL,c("popEVO","0"))
Dynamic library file Indet_growthequi.so is up-to-date
9.38263361E-01, 2.15592978E-01, 1.75885671E-02, 9.38263361E-01
9.44757539E-01, 2.15623452E-01, 1.85841314E-02, 9.31442086E-01
9.50520830E-01, 2.15706603E-01, 1.95802106E-02, 9.24768527E-01
<...output lines suppressed in this box...>
1.05716677E+00, 2.40976089E-01, 8.16044924E-02, 5.12503885E-01
1.05797640E+00, 2.41437453E-01, 8.23722257E-02, 5.06112752E-01
1.05878535E+00, 2.41902720E-01, 8.31366955E-02, 4.99682821E-01
> cat(output3$curvedesc)
#
# Executing : PSPMequi("Indet_growth", "PIP", c(0.938263, 0.215593, 0.0175886, 0.938263), 0.1, c(6, ....
#
# Parameter values :
#
# Delta : 0.1 Rmax : 2 Sb : 0.05
# Sj : 1 Sm : 2 Imax : 1
# q : 0.938263 Sigma : 0.5 T : 0.1
# p : 1 Mu : 0.01
#
# Index and name of bifurcation parameter #1 : 6 (q)
# Index of structured population for PIP construction : 0
#
# 1:q 2:E[0] 3:b[0] 4:q' 5:I[0][0] 6:I[0][1] ....
> output3$curvepoints
q E[0] b[0] q' I[0][0] I[0][1] I[0][2] R0[0] R0[1] RHS norm
[1,] 0.9382634 0.2155930 0.01758857 0.9382634 0.1784407 0.4194359 0.3916582 1 1 1.461957e-07
[2,] 0.9447576 0.2156234 0.01858414 0.9314420 0.1784377 0.4321497 0.3789306 1 1 7.201710e-10
[3,] 0.9505209 0.2157066 0.01958022 0.9247685 0.1784293 0.4434929 0.3675496 1 1 4.059613e-09
<...output lines suppressed in this box...>
[74,] 1.0571668 0.2409761 0.08160450 0.5125038 0.1759024 0.5976217 0.2019346 1 1 9.543894e-12
[75,] 1.0579764 0.2414375 0.08237223 0.5061127 0.1758562 0.5984558 0.2008908 1 1 1.001310e-11
[76,] 1.0587853 0.2419027 0.08313670 0.4996828 0.1758097 0.5992899 0.1998452 1 1 1.059525e-11
> output4 <- PSPMequi("Indet_growth","PIP",c(output1$bifpoints[c(1,2,3,1)]),-0.1,c(6,0.5,2.0,6,0.5,2.0),
NULL,c("popEVO","0"))
Dynamic library file Indet_growthequi.so is up-to-date
9.38263361E-01, 2.15592978E-01, 1.75885671E-02, 9.38263361E-01
9.30859739E-01, 2.15628722E-01, 1.65937720E-02, 9.45282229E-01
9.22302915E-01, 2.15749164E-01, 1.56001138E-02, 9.52519962E-01
<...output lines suppressed in this box...>
5.13692391E-01, 2.40890414E-01, 7.02691795E-03, 1.05701558E+00
5.04283181E-01, 2.41569728E-01, 6.99375967E-03, 1.05820714E+00
4.94836123E-01, 2.42254153E-01, 6.96170670E-03, 1.05939152E+00
> cat(output4$curvedesc)
#
# Executing : PSPMequi("Indet_growth", "PIP", c(0.938263, 0.215593, 0.0175886, 0.938263), -0.1, c(6, ....
#
# Parameter values :
#
# Delta : 0.1 Rmax : 2 Sb : 0.05
# Sj : 1 Sm : 2 Imax : 1
# q : 0.938263 Sigma : 0.5 T : 0.1
# p : 1 Mu : 0.01
#
# Index and name of bifurcation parameter #1 : 6 (q)
# Index of structured population for evolutionary analysis : 0
#
# 1:q 2:E[0] 3:b[0] 4:q' 5:I[0][0] 6:I[0][1] ....
> output4$curvepoints
q E[0] b[0] q' I[0][0] I[0][1] I[0][2] R0[0] R0[1] RHS norm
[1,] 0.9382634 0.2155930 0.01758857 0.9382634 0.1784407 0.41943589 0.3916582 1.0000001 1.0000001 1.461915e-07
[2,] 0.9308597 0.2156287 0.01659377 0.9452822 0.1784371 0.40513181 0.4059461 1.0000000 1.0000000 2.399669e-10
[3,] 0.9223029 0.2157492 0.01560011 0.9525200 0.1784251 0.38897904 0.4220441 1.0000000 1.0000000 9.012954e-09
<...output lines suppressed in this box...>
[38,] 0.5136924 0.2408904 0.00702692 1.0570156 0.1759110 0.10039086 0.6992044 1.0000000 1.0000001 1.027277e-07
[39,] 0.5042832 0.2415697 0.00699376 1.0582071 0.1758430 0.09835927 0.7009272 1.0000000 1.0000001 1.015844e-07
[40,] 0.4948361 0.2422542 0.00696171 1.0593915 0.1757746 0.09638602 0.7025894 1.0000000 1.0000001 1.184842e-07
The commands and output in the box above do not need further explanation, except that the first and the fourth column are the value of the resident and the mutant value of the parameter \(q\), respectively. From the 8th and 9th column it can be verified that both the resident and the mutant type indeed attain \(R_0=1\) in the equilibrium states computed. The demo script "Indet_growth" uses the first and fourth output columns, corresponding to the two bifurcation parameters, from the data matrices output3$curvepoints and output4$curvepoints that result from the first and second call to the function PSPMequi in the command box above to construct the pairwise invasibility plot (PIP).