Aller au contenu principal
Accès ouvert déclaré 2026 software

mizer: Multi-Species Size Spectrum Modelling in R

0Citations signalées, ce qui n’est pas une note de qualité
0Institutions déclarées
0Pays d’affiliation déclarés

Le résumé fourni par la source

The headline change is one you should not be able to feel: MizerParams and MizerSim are now ordinary S3 objects rather than S4 objects. Slot access with @ still works and models saved by earlier versions still load, but extension packages need a version built for this release. The release also changes what getSteadyResidual() measures and takes components registered with setComponent() out of the criterion by which mizer decides whether a model is at steady state. It adds getMeanLength(), reconcileSpeciesParams(), and accessors for extra mortality and encounter rates (other_mort(), other_encounter()), and it fixes bugs in the species parameter setters, in the defaults for gamma and f0, in scaleModel(), in validSim() and in summary() of an array. For an overview see the release announcement on the mizer blog. S4 to S3 conversion MizerParams and MizerSim have been converted from S4 classes to pure S3 classes based on named lists. Backwards compatibility for @ and @<- slot access is fully preserved via S3 @ operator methods, while standard list operations ($, [[]], names()) now work directly on model objects. Legacy S4 objects saved with earlier versions of mizer are automatically upgraded to S3 lists on access. Extension packages now chain using standard S3 class vectors (e.g. c("mizerShelf", "MizerParams")), completely replacing dynamic S4 marker class generation, runtime setClass() calls, and search-path attachment. saveParams() and saveSim() now store the object's complete S3 class vector instead of stripping extension classes before serialisation. readParams() and readSim() still repair the class on legacy files through their normal validation, but no longer need a separate coercion step. The NS_params and NS_sim objects shipped with mizer are now stored as S3 objects, so isS4(NS_params) is FALSE and they no longer go through the legacy-object conversion on first use. Steady state and calibration getSteadyResidual() now reports, for each size class, its contribution to the relative rate of change of its species' biomass, in 1/year, so that rowSums(getSteadyResidual(params)) is the drift (dB_i/dt) / B_i that isSteady(), the summary() line and project(check_steady = TRUE) judge a model by. The array therefore says where a model is unsteady in the same currency that mizer uses to decide whether it is. Pass the experimental measure = "per_capita" for the previous default, (dN/dt)/N (#572, #589). getSteadyResidual() reports every size class, including the ones holding no fish, so only a species with no biomass at all comes back as NA. Under the new default measure a class holding a trace contributes a trace, which is what makes a threshold unnecessary. With measure = "per_capita" the NAs are where they always were (#570, #572). Components registered with setComponent() are no longer folded into the biomass drift that isSteady(), the summary() line, project(check_steady = TRUE), the "convergence" attribute and getStability() judge a model by. Every function that finds a steady state holds the components fixed, so a criterion that included them was one those functions could not satisfy. Components are now reported separately, through attr(getSteadyResidual(params), "other") and on their own lines in summary(); a model can therefore be isSteady() while a component of it is drifting, and projectUntilSettled() is what settles it (#589). Mizer now names the species, resource or component responsible for a model's drift, instead of reporting that "a biomass" is changing and sending the user to look at which species are moving (#589). Fixed: a size class holding a negligible density could stop projectUntilSettled() from ever converging (#570). Above the size where growth stops, the density decays exponentially without ever reaching zero, and distanceSSLogN() counted every class with a positive density, so an infinitesimal trace of 3e-92 g contributed almost the whole distance at every check. It gains a biomass_share_cutoff argument, defaulting to 1e-8: a size class counts only if it holds at least that share of its species' biomass. Nothing changes for a model without such a trace, so existing distance_tol values keep their meaning, and what decides whether a state is a fixed point is unchanged and still integrates over every size class (#570, #574). Fixed: projectUntilSettled() now says so when a run that stopped at t_max nonetheless reached a fixed point. converged = FALSE beside attractor = "fixed_point" is correct — they answer different questions — but read as a contradiction (#570). Fixed: tuneSteadyState() no longer reports that it could not rebalance the resource capacity when the resource dynamics is resource_constant(). A constant resource hands back the abundance it was given, so there is nothing to rebalance. The report is meant for a custom resource dynamics with no balance_ () function, but it fired on every model that switches the built-in resource off, which includes every model of an extension package that supplies its own resources (#591). Fixed: the residual entry of the "convergence" attribute, and the residual column of a MizerScan filled from it, were documented as the largest per-capita rate of change. They hold the largest relative rate of biomass change, which is the quantity residual_tol is a tolerance on and the number rowSums(getSteadyResidual(params)) gives (#572). Fixed: scaleModel() wrote the rescaled R_max and gamma straight into the species parameter table, bypassing the record of the values the user has supplied, so the next recalculation of the species parameters silently undid the rescaling. They are now recorded as given species parameters, as matchGrowth() already did. calibrateBiomass(), calibrateNumber(), matchBiomasses() and matchNumbers() inherit the fix (#599, #602). Species parameters Mizer now reports the length-weight defaults a = 0.01 and b = 3 at info_level = 3 when it fills them in, alongside the other defaults it reports. This matters because a length-based selectivity function converts the lengths in gear_params() to weights through a and b, so a defaulted relationship silently puts the selectivity curve at the wrong weights. The defaults themselves are unchanged, and info_level = 0 silences the report as it does the rest (#576). setFishing() additionally names any species whose gear selects on length while its a or b was defaulted. That is the case in which an invented weight-length relationship changes the dynamics rather than just a diagnostic, so the report is at info_level = 1 and is shown even when calc_selectivity() or setFishing() is called on its own. Whether a gear selects on length is decided from the selectivity function's formals, so a custom sel_func taking species_params is covered too (#576). New reconcileSpeciesParams() makes a model's species_params() a fixed point of mizer's recalculation. Values written straight into the species_params slot are not recorded as given, so mizer used to undo them at the next recalculation without saying so. The function records every value that a recalculation would change — repeating until the parameters reproduce themselves, so that the parameters mizer derives from the hand-set ones are caught too — and leaves the model itself untouched. readParams() now calls it automatically, so a saved model whose species parameters had drifted out of step with its given species parameters keeps the values it holds (#604). Fixed: a species parameter column can be removed by dropping it from the table you assign, with either setter (#578, #582). Mizer takes the column out of given_species_params(), recalculates the parameters it knows how to calculate and removes the ones it does not, so species_params(params)$my_col <- NULL and given_species_params(params)$my_col <- NULL now do what they look like they do. Previously the first silently restored the column from the given table and the second left it in species_params() reported as one mizer had calculated. Removing a col

Ce résumé expose les affirmations des auteurs. BNTIC ne l’interprète pas comme une validation indépendante des résultats.

Le contrôle bibliographique ouvert

La source scientifique ouverte est momentanément indisponible.

BNTIC News n’est pas le producteur de ces données. Les publications sont interrogées à la demande dans Crossref, OpenAIRE, DOAJ, Europe PMC, HAL, DataCite, AfricArXiv, ROR et la Banque mondiale, sans clé d’accès. OpenAlex reste optionnel. Aucun service payant n’est nécessaire et aucune donnée externe n’est enregistrée en base. Consulter les sources et leurs limites.