Runs the metabolism model specified by the specs argument. Returns a
fitted model.
Arguments
- specs
A list of model specifications and parameters for a model. Although this may be specified manually (it's just a list), it is easier and safer to use
specs()to generate the list, because the set of required parameters and their defaults depends on the model given in themodel_nameargument tospecs. The help file forspecs()lists the necessary parameters, describes them in detail, and gives default values.- data
A data frame or tibble of input data at the temporal resolution of raw observations (unit-value). Columns must have the same names, units, and format as the default. The solar.time column must also have a timezone code ('tzone' attribute) of 'UTC'. See the 'Formatting
data' section below for a full description.- data_daily
A data frame or tibble containing inputs with a daily timestep. See the 'Formatting
data_daily' section below for a full description.- info
Any information, in any format, that you would like to store within the metab_model object.
Value
An object inheriting from metab_model and containing the fitted
model. This object can be inspected with the functions in the
metab_model_interface().
Formatting data
Unit-value model inputs passed via the data argument should
be formatted as a data.frame with column names and values that
depend on the model type, as follows.
(If all columns are optional, data may equal NULL.)
mleornightcolname class units need solar.time POSIXct,POSIXt required DO.obs numeric mgO₂ L⁻¹ required DO.sat numeric mgO₂ L⁻¹ required depth numeric m required temp.water numeric °C required light numeric µmol m⁻² s⁻¹ required discharge numeric m³ s⁻¹ optional Example:
solar.timeDO.obsDO.satdepthtemp.waterlightdischarge2050-03-14 15:10:0010.114.20.521.8300.99bayescolname class units need solar.time POSIXct,POSIXt required DO.obs numeric mgO₂ L⁻¹ required DO.sat numeric mgO₂ L⁻¹ required depth numeric m required temp.water numeric °C required light numeric µmol m⁻² s⁻¹ required discharge numeric m³ s⁻¹ optional Example:
solar.timeDO.obsDO.satdepthtemp.waterlightdischarge2050-03-14 15:10:0010.114.20.521.8300.99Kmodelcolname class units need solar.time POSIXct,POSIXt optional discharge numeric m³ s⁻¹ optional velocity numeric m s⁻¹ optional Example:
solar.timedischargevelocity2050-03-14 15:10:0092simcolname class units need solar.time POSIXct,POSIXt required DO.obs numeric mgO₂ L⁻¹ optional DO.sat numeric mgO₂ L⁻¹ required depth numeric m required temp.water numeric °C required light numeric µmol m⁻² s⁻¹ required Example:
solar.timeDO.obsDO.satdepthtemp.waterlight2050-03-14 15:10:0010.114.20.521.8300.9
Formatting data_daily
Daily-value model inputs passed via the data_daily argument should
be formatted as a data.frame with column names and values that
depend on the model type, as follows.
(If all columns are optional, data_daily may equal NULL.)
nightNULLmlecolname class units need date Date optional K600.daily numeric d⁻¹ optional init.GPP.daily numeric gO₂ m⁻² d⁻¹ optional init.Pmax numeric gO₂ m⁻² d⁻¹ optional init.alpha numeric gO₂ s d⁻¹ µmol⁻¹ optional init.ER.daily numeric gO₂ m⁻² d⁻¹ optional init.ER20 numeric gO₂ m⁻² d⁻¹ optional init.K600.daily numeric d⁻¹ optional Example:
dateK600.dailyinit.GPP.dailyinit.Pmaxinit.alphainit.ER.dailyinit.ER20init.K600.daily2050-03-14105101e-04-10-1010bayescolname class units need date Date optional discharge.daily numeric m³ s⁻¹ optional Example:
datedischarge.daily2050-03-149Kmodelcolname class units need date Date required K600.daily numeric d⁻¹ required K600.daily.lower numeric d⁻¹ optional K600.daily.upper numeric d⁻¹ optional discharge.daily numeric m³ s⁻¹ optional velocity.daily numeric m s⁻¹ optional Example:
dateK600.dailyK600.daily.lowerK600.daily.upperdischarge.dailyvelocity.daily2050-03-14104.515.692simcolname class units need date Date optional discharge.daily numeric m³ s⁻¹ optional DO.mod.1 numeric mgO₂ L⁻¹ optional K600.daily numeric d⁻¹ optional GPP.daily numeric gO₂ m⁻² d⁻¹ optional Pmax numeric gO₂ m⁻² d⁻¹ optional alpha numeric gO₂ s d⁻¹ µmol⁻¹ optional ER.daily numeric gO₂ m⁻² d⁻¹ optional ER20 numeric gO₂ m⁻² d⁻¹ optional err.obs.sigma numeric mgO₂ L⁻¹ optional err.obs.phi numeric optional err.proc.sigma numeric gO₂ m⁻² d⁻¹ optional err.proc.phi numeric optional Example:
datedischarge.dailyDO.mod.1K600.dailyGPP.dailyPmaxalphaER.dailyER20err.obs.sigmaerr.obs.phierr.proc.sigmaerr.proc.phi2050-03-1497.5105101e-04-10-100.01050
Examples
dat <- data_metab(num_days='3')
# fit a basic MLE model
mm <- metab(specs(mm_name('mle')), data=dat, info='my info')
predict_metab(mm)
#> # A tibble: 3 × 10
#> date GPP GPP.lower GPP.upper ER ER.lower ER.upper msgs.fit warnings
#> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
#> 1 2012-09-18 2.81 2.44 3.19 -2.10 -2.41 -1.80 " … ""
#> 2 2012-09-19 3.28 2.87 3.69 -2.47 -2.81 -2.13 " W … ""
#> 3 2012-09-20 2.58 2.31 2.85 -1.71 -1.91 -1.50 " … ""
#> # ℹ 1 more variable: errors <chr>
get_info(mm)
#> [1] "my info"
get_fitting_time(mm)
#> user system elapsed
#> 0.763 0.000 0.763
# with chaining & customization
library(dplyr)
#>
#> Attaching package: ‘dplyr’
#> The following objects are masked from ‘package:stats’:
#>
#> filter, lag
#> The following objects are masked from ‘package:base’:
#>
#> intersect, setdiff, setequal, union
mm <- mm_name('mle', ode_method='euler') |>
specs(init.GPP.daily=40) |>
metab(data=dat)
predict_metab(mm)
#> # A tibble: 3 × 10
#> date GPP GPP.lower GPP.upper ER ER.lower ER.upper msgs.fit warnings
#> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
#> 1 2012-09-18 2.81 2.40 3.22 -2.10 -2.43 -1.77 " W … ""
#> 2 2012-09-19 3.27 2.84 3.70 -2.46 -2.82 -2.11 " W … ""
#> 3 2012-09-20 2.57 2.29 2.85 -1.70 -1.91 -1.48 " W … ""
#> # ℹ 1 more variable: errors <chr>
plot_DO_preds(predict_DO(mm))
plot_DO_preds(predict_DO(mm), y_var = "pctsat", style = "dygraphs")