You have some life-history parameters of some important species in your ecosystem.

sub_rakhine <- readRDS("data/sub_rakhine.rds")
sub_rakhine

The variables we will be interested in are the species name, w_inf the asymptotic size, w_mat the maturity size, beta and sigma the parameters of the log-normal predation kernel, a and b the parameter in the length to weight conversion \(w = a\, l^b\), and k_vb the von Bertalanffy growth curve parameter.

species_params <- sub_rakhine %>% 
    select(commonName, w_inf, w_mat, beta, sigma, w_a, w_b, k_vb) %>% 
    rename(a = w_a, b = w_b, species = commonName)
species_params

For later purposes we also set up some fishing gear. We give one gear to each species and set knife_edge selectivity with a knife_edge_size equal to the maturity size.

species_params <- species_params %>% 
    mutate(gear = species,
           sel_func = "knife_edge",
           knife_edge_size = w_mat)

We want to study these species embedded in a set of background species creating a complete balanced ecosystem. We use a trait-based model for the background species.

params <- newTraitParams(
    min_w_pp = 10^-12,
    no_sp = 16, 
    min_w_inf = 1, 
    max_w_inf = 10^6,
    min_egg = 10^-5,
    min_w_mat = 10^-0.6,
    w_pp_cutoff = 2 * 10^-0.6,
    no_w = 200,
    sigma = 2,
    ks = 2.4,
    bmort_prop = 0.4) %>% 
    steady(t_max = 100) %>% 
    markBackground()
Note: Using f0, h, lambda, kappa and the predation kernel to calculate gamma.
Note: Negative plankton abundances
Note: Negative plankton abundance values overwritten with zeros
Steady state was reached before 30 years.

Note how we used the pipe operator %>% to pipe the result of newTraitParams() into steady() and then the result from that into markBackground(). The mizer functions are pipe-friendly in that their first parameter is always the MizerParams object or the MizerSim object. The call to steady() ran the dynamics with fixed reproductive rate to find the steady state abundances. The call to markBackground() just specifies that these are background species. This has the effect for example that they are grey when plotted:

plotSpectra(params, power = 2, total = TRUE, 
            ylim = c(10^-6, NA), wlim = c(10^-4, NA))

and we will see other consequences below.

We don’t want to fish the background species, so we set their catchability to zero.

params@species_params$catchability[] <- 0

We now add our foreground species with the parameters specified in the data frame species_params and again run to steady state.

params <- addSpecies(params, species_params, initial_effort = 1) %>% 
    steady()
Note: No h provided for some species, so using f0 and k_vb to calculate it.
Note: Using f0, h, lambda, kappa and the predation kernel to calculate gamma.
Steady state was reached before 45 years.
plotSpectra(params, power = 2, total = TRUE, 
            ylim = c(10^-6, NA), wlim = c(10^-4, NA))

We see that addSpecies() adds the new species at a very low abundance compared to the background species. This is on purpose, because at that low abundance there is very little backreaction from the background species, and therefore we are in a regime where we understand the steady-state size distribution of the species analytically. Therefore mizer was able to find initial values for the size distributions that are close to steady state values and so the call to steady() did not have much work to do.

We make a copy of this model for later purposes.

params2 <- params

Now we can increase the abundance of the foreground species.

params <- rescaleAbundance(params, factor = 16)
plotSpectra(params, power = 2, total = TRUE, 
            ylim = c(10^-6, NA), wlim = c(10^-4, NA))

Note how rescaleAbundance() knew to only rescale the foreground species and leave the background species alone. Note also, that the introduction of the foreground species has led to a bulge in the total community spectrum. However the abundance of the background species was originally chosen so that the community abundance would be close to the Sheldon power-law spectrum. We therefore retune their abundance so that again the community spectrum is as close to the Sheldon power-law as possible.

params <- retuneBackground(params)
plotSpectra(params, power = 2, total = TRUE, 
            ylim = c(10^-6, NA), wlim = c(10^-4, NA))

We see that as we introduce the foreground species, the background species become less important.

The above plot does not yet show a steady state. We still need to call steady() to find the steady state.

params <- steady(params)
Steady state was reached before 90 years.
plotSpectra(params, power = 2, total = TRUE, 
            ylim = c(10^-6, NA), wlim = c(10^-4, NA))

Clearly there is some tuning to be done. In particular, the abundances of all species need to be increased and tuned to the observed values and the fishing parameters need to be tuned to produce the observed catches.

Now I want to introduce a very convenient gadget that allows you to tune the parameters of the system interactively. This is not yet very well documented, so I will demonstrate when we have our video chat.

params <- tuneParamsCourse(params)
LS0tCnRpdGxlOiAiQnVpbGQgbW9kZWwiCmF1dGhvcjogIkd1c3RhdiBEZWxpdXMiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpCmxpYnJhcnkoIm1pemVyIikKbGlicmFyeSgidGlkeXZlcnNlIikKc291cmNlKCJ0dW5lUGFyYW1zQ291cnNlLlIiKQpgYGAKCllvdSBoYXZlIHNvbWUgbGlmZS1oaXN0b3J5IHBhcmFtZXRlcnMgb2Ygc29tZSBpbXBvcnRhbnQgc3BlY2llcyBpbiB5b3VyCmVjb3N5c3RlbS4gCmBgYHtyfQpzdWJfcmFraGluZSA8LSByZWFkUkRTKCJkYXRhL3N1Yl9yYWtoaW5lLnJkcyIpCnN1Yl9yYWtoaW5lCmBgYAoKVGhlIHZhcmlhYmxlcyB3ZSB3aWxsIGJlIGludGVyZXN0ZWQgaW4gYXJlIHRoZSBzcGVjaWVzIG5hbWUsIApgd19pbmZgIHRoZSBhc3ltcHRvdGljIHNpemUsIGB3X21hdGAgdGhlIG1hdHVyaXR5IHNpemUsIGBiZXRhYCBhbmQKYHNpZ21hYCB0aGUgcGFyYW1ldGVycyBvZiB0aGUgbG9nLW5vcm1hbCBwcmVkYXRpb24ga2VybmVsLCBgYWAgYW5kIGBiYCB0aGUKcGFyYW1ldGVyIGluIHRoZSBsZW5ndGggdG8gd2VpZ2h0IGNvbnZlcnNpb24gJHcgPSBhXCwgbF5iJCwgYW5kIGBrX3ZiYCB0aGUgdm9uCkJlcnRhbGFuZmZ5IGdyb3d0aCBjdXJ2ZSBwYXJhbWV0ZXIuCmBgYHtyfQpzcGVjaWVzX3BhcmFtcyA8LSBzdWJfcmFraGluZSAlPiUgCiAgICBzZWxlY3QoY29tbW9uTmFtZSwgd19pbmYsIHdfbWF0LCBiZXRhLCBzaWdtYSwgd19hLCB3X2IsIGtfdmIpICU+JSAKICAgIHJlbmFtZShhID0gd19hLCBiID0gd19iLCBzcGVjaWVzID0gY29tbW9uTmFtZSkKc3BlY2llc19wYXJhbXMKYGBgCgpGb3IgbGF0ZXIgcHVycG9zZXMgd2UgYWxzbyBzZXQgdXAgc29tZSBmaXNoaW5nIGdlYXIuIFdlIGdpdmUgb25lIGdlYXIgdG8gZWFjaApzcGVjaWVzIGFuZCBzZXQga25pZmVfZWRnZSBzZWxlY3Rpdml0eSB3aXRoIGEga25pZmVfZWRnZV9zaXplIGVxdWFsIHRvIHRoZQptYXR1cml0eSBzaXplLgpgYGB7cn0Kc3BlY2llc19wYXJhbXMgPC0gc3BlY2llc19wYXJhbXMgJT4lIAogICAgbXV0YXRlKGdlYXIgPSBzcGVjaWVzLAogICAgICAgICAgIHNlbF9mdW5jID0gImtuaWZlX2VkZ2UiLAogICAgICAgICAgIGtuaWZlX2VkZ2Vfc2l6ZSA9IHdfbWF0KQpgYGAKCldlIHdhbnQgdG8gc3R1ZHkgdGhlc2Ugc3BlY2llcyBlbWJlZGRlZCBpbiBhIHNldCBvZiBiYWNrZ3JvdW5kCnNwZWNpZXMgY3JlYXRpbmcgYSBjb21wbGV0ZSBiYWxhbmNlZCBlY29zeXN0ZW0uIFdlIHVzZSBhIHRyYWl0LWJhc2VkIG1vZGVsIGZvcgp0aGUgYmFja2dyb3VuZCBzcGVjaWVzLgpgYGB7cn0KcGFyYW1zIDwtIG5ld1RyYWl0UGFyYW1zKAogICAgbWluX3dfcHAgPSAxMF4tMTIsCiAgICBub19zcCA9IDE2LCAKICAgIG1pbl93X2luZiA9IDEsIAogICAgbWF4X3dfaW5mID0gMTBeNiwKICAgIG1pbl9lZ2cgPSAxMF4tNSwKICAgIG1pbl93X21hdCA9IDEwXi0wLjYsCiAgICB3X3BwX2N1dG9mZiA9IDIgKiAxMF4tMC42LAogICAgbm9fdyA9IDIwMCwKICAgIHNpZ21hID0gMiwKICAgIGtzID0gMi40LAogICAgYm1vcnRfcHJvcCA9IDAuNCkgJT4lIAogICAgc3RlYWR5KHRfbWF4ID0gMTAwKSAlPiUgCiAgICBtYXJrQmFja2dyb3VuZCgpCmBgYApOb3RlIGhvdyB3ZSB1c2VkIHRoZSBwaXBlIG9wZXJhdG9yIGAlPiVgIHRvIHBpcGUgdGhlIHJlc3VsdCBvZgpgbmV3VHJhaXRQYXJhbXMoKWAgaW50byBgc3RlYWR5KClgIGFuZCB0aGVuIHRoZSByZXN1bHQgZnJvbSB0aGF0IGludG8KYG1hcmtCYWNrZ3JvdW5kKClgLiBUaGUgbWl6ZXIgZnVuY3Rpb25zIGFyZSBwaXBlLWZyaWVuZGx5IGluIHRoYXQgdGhlaXIgZmlyc3QKcGFyYW1ldGVyIGlzIGFsd2F5cyB0aGUgTWl6ZXJQYXJhbXMgb2JqZWN0IG9yIHRoZSBNaXplclNpbSBvYmplY3QuClRoZSBjYWxsIHRvIGBzdGVhZHkoKWAgcmFuIHRoZSBkeW5hbWljcyB3aXRoIGZpeGVkIHJlcHJvZHVjdGl2ZSByYXRlIHRvIGZpbmQKdGhlIHN0ZWFkeSBzdGF0ZSBhYnVuZGFuY2VzLgpUaGUgY2FsbCB0byBgbWFya0JhY2tncm91bmQoKWAganVzdCBzcGVjaWZpZXMgdGhhdCB0aGVzZSBhcmUgYmFja2dyb3VuZCBzcGVjaWVzLgpUaGlzIGhhcyB0aGUgZWZmZWN0IGZvciBleGFtcGxlIHRoYXQgdGhleSBhcmUgZ3JleSB3aGVuIHBsb3R0ZWQ6CmBgYHtyfQpwbG90U3BlY3RyYShwYXJhbXMsIHBvd2VyID0gMiwgdG90YWwgPSBUUlVFLCAKICAgICAgICAgICAgeWxpbSA9IGMoMTBeLTYsIE5BKSwgd2xpbSA9IGMoMTBeLTQsIE5BKSkKYGBgCgphbmQgd2Ugd2lsbCBzZWUgb3RoZXIgY29uc2VxdWVuY2VzIGJlbG93LgoKV2UgZG9uJ3Qgd2FudCB0byBmaXNoIHRoZSBiYWNrZ3JvdW5kIHNwZWNpZXMsIHNvIHdlIHNldCB0aGVpciBjYXRjaGFiaWxpdHkgdG8KemVyby4KYGBge3J9CnBhcmFtc0BzcGVjaWVzX3BhcmFtcyRjYXRjaGFiaWxpdHlbXSA8LSAwCmBgYAoKCldlIG5vdyBhZGQgb3VyIGZvcmVncm91bmQgc3BlY2llcyB3aXRoIHRoZSBwYXJhbWV0ZXJzIHNwZWNpZmllZCBpbiB0aGUgZGF0YQpmcmFtZSBgc3BlY2llc19wYXJhbXNgIGFuZCBhZ2FpbiBydW4gdG8gc3RlYWR5IHN0YXRlLgpgYGB7cn0KcGFyYW1zIDwtIGFkZFNwZWNpZXMocGFyYW1zLCBzcGVjaWVzX3BhcmFtcywgaW5pdGlhbF9lZmZvcnQgPSAxKSAlPiUgCiAgICBzdGVhZHkoKQpgYGAKYGBge3J9CnBsb3RTcGVjdHJhKHBhcmFtcywgcG93ZXIgPSAyLCB0b3RhbCA9IFRSVUUsIAogICAgICAgICAgICB5bGltID0gYygxMF4tNiwgTkEpLCB3bGltID0gYygxMF4tNCwgTkEpKQpgYGAKCldlIHNlZSB0aGF0IGBhZGRTcGVjaWVzKClgIGFkZHMgdGhlIG5ldyBzcGVjaWVzIGF0IGEgdmVyeSBsb3cgYWJ1bmRhbmNlCmNvbXBhcmVkIHRvIHRoZSBiYWNrZ3JvdW5kIHNwZWNpZXMuIFRoaXMgaXMgb24gcHVycG9zZSwgYmVjYXVzZSBhdCB0aGF0IGxvdwphYnVuZGFuY2UgdGhlcmUgaXMgdmVyeSBsaXR0bGUgYmFja3JlYWN0aW9uIGZyb20gdGhlIGJhY2tncm91bmQgc3BlY2llcywgYW5kCnRoZXJlZm9yZSB3ZSBhcmUgaW4gYSByZWdpbWUgd2hlcmUgd2UgdW5kZXJzdGFuZCB0aGUgc3RlYWR5LXN0YXRlIHNpemUKZGlzdHJpYnV0aW9uIG9mIHRoZSBzcGVjaWVzIGFuYWx5dGljYWxseS4gVGhlcmVmb3JlIG1pemVyIHdhcyBhYmxlIHRvIGZpbmQKaW5pdGlhbCB2YWx1ZXMgZm9yIHRoZSBzaXplIGRpc3RyaWJ1dGlvbnMgdGhhdCBhcmUgY2xvc2UgdG8gc3RlYWR5IHN0YXRlCnZhbHVlcyBhbmQgc28gdGhlIGNhbGwgdG8gYHN0ZWFkeSgpYCBkaWQgbm90IGhhdmUgbXVjaCB3b3JrIHRvIGRvLgoKV2UgbWFrZSBhIGNvcHkgb2YgdGhpcyBtb2RlbCBmb3IgbGF0ZXIgcHVycG9zZXMuCmBgYHtyfQpwYXJhbXMyIDwtIHBhcmFtcwpgYGAKCk5vdyB3ZSBjYW4gaW5jcmVhc2UgdGhlIGFidW5kYW5jZSBvZiB0aGUgZm9yZWdyb3VuZCBzcGVjaWVzLgpgYGB7cn0KcGFyYW1zIDwtIHJlc2NhbGVBYnVuZGFuY2UocGFyYW1zLCBmYWN0b3IgPSAxNikKcGxvdFNwZWN0cmEocGFyYW1zLCBwb3dlciA9IDIsIHRvdGFsID0gVFJVRSwgCiAgICAgICAgICAgIHlsaW0gPSBjKDEwXi02LCBOQSksIHdsaW0gPSBjKDEwXi00LCBOQSkpCmBgYApOb3RlIGhvdyBgcmVzY2FsZUFidW5kYW5jZSgpYCBrbmV3IHRvIG9ubHkgcmVzY2FsZSB0aGUgZm9yZWdyb3VuZCBzcGVjaWVzIGFuZApsZWF2ZSB0aGUgYmFja2dyb3VuZCBzcGVjaWVzIGFsb25lLiBOb3RlIGFsc28sIHRoYXQgdGhlIGludHJvZHVjdGlvbiBvZiB0aGUKZm9yZWdyb3VuZCBzcGVjaWVzIGhhcyBsZWQgdG8gYSBidWxnZSBpbiB0aGUgdG90YWwgY29tbXVuaXR5IHNwZWN0cnVtLiBIb3dldmVyCnRoZSBhYnVuZGFuY2Ugb2YgdGhlIGJhY2tncm91bmQgc3BlY2llcyB3YXMgb3JpZ2luYWxseSBjaG9zZW4gc28gdGhhdCB0aGUKY29tbXVuaXR5IGFidW5kYW5jZSB3b3VsZCBiZSBjbG9zZSB0byB0aGUgU2hlbGRvbiBwb3dlci1sYXcgc3BlY3RydW0uIFdlCnRoZXJlZm9yZSByZXR1bmUgdGhlaXIgYWJ1bmRhbmNlIHNvIHRoYXQgYWdhaW4gdGhlIGNvbW11bml0eSBzcGVjdHJ1bSBpcyBhcwpjbG9zZSB0byB0aGUgU2hlbGRvbiBwb3dlci1sYXcgYXMgcG9zc2libGUuCmBgYHtyfQpwYXJhbXMgPC0gcmV0dW5lQmFja2dyb3VuZChwYXJhbXMpCnBsb3RTcGVjdHJhKHBhcmFtcywgcG93ZXIgPSAyLCB0b3RhbCA9IFRSVUUsIAogICAgICAgICAgICB5bGltID0gYygxMF4tNiwgTkEpLCB3bGltID0gYygxMF4tNCwgTkEpKQpgYGAKCldlIHNlZSB0aGF0IGFzIHdlIGludHJvZHVjZSB0aGUgZm9yZWdyb3VuZCBzcGVjaWVzLCB0aGUgYmFja2dyb3VuZCBzcGVjaWVzCmJlY29tZSBsZXNzIGltcG9ydGFudC4gCgpUaGUgYWJvdmUgcGxvdCBkb2VzIG5vdCB5ZXQgc2hvdyBhIHN0ZWFkeSBzdGF0ZS4gV2Ugc3RpbGwgbmVlZCB0byBjYWxsCmBzdGVhZHkoKWAgdG8gZmluZCB0aGUgc3RlYWR5IHN0YXRlLgpgYGB7cn0KcGFyYW1zIDwtIHN0ZWFkeShwYXJhbXMpCnBsb3RTcGVjdHJhKHBhcmFtcywgcG93ZXIgPSAyLCB0b3RhbCA9IFRSVUUsIAogICAgICAgICAgICB5bGltID0gYygxMF4tNiwgTkEpLCB3bGltID0gYygxMF4tNCwgTkEpKQpgYGAKCkNsZWFybHkgdGhlcmUgaXMgc29tZSB0dW5pbmcgdG8gYmUgZG9uZS4gSW4gcGFydGljdWxhciwgdGhlIGFidW5kYW5jZXMgb2YgYWxsCnNwZWNpZXMgbmVlZCB0byBiZSBpbmNyZWFzZWQgYW5kIHR1bmVkIHRvIHRoZSBvYnNlcnZlZCB2YWx1ZXMgYW5kIHRoZSBmaXNoaW5nCnBhcmFtZXRlcnMgbmVlZCB0byBiZSB0dW5lZCB0byBwcm9kdWNlIHRoZSBvYnNlcnZlZCBjYXRjaGVzLgoKTm93IEkgd2FudCB0byBpbnRyb2R1Y2UgYSB2ZXJ5IGNvbnZlbmllbnQgZ2FkZ2V0IHRoYXQgYWxsb3dzIHlvdSB0byB0dW5lIHRoZQpwYXJhbWV0ZXJzIG9mIHRoZSBzeXN0ZW0gaW50ZXJhY3RpdmVseS4gVGhpcyBpcyBub3QgeWV0IHZlcnkgd2VsbCBkb2N1bWVudGVkLCBzbwpJIHdpbGwgZGVtb25zdHJhdGUgd2hlbiB3ZSBoYXZlIG91ciB2aWRlbyBjaGF0LgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwYXJhbXMgPC0gdHVuZVBhcmFtc0NvdXJzZShwYXJhbXMpCmBgYAoKCg==