Skip to contents

Non-linear fits of different models to the decomposition trajectory of one cohort (as in typical litterbag studies) data. Models range from very simple (and easy to fit with limited data) to more complex.

Usage

fit_litter(
  time,
  mass.remaining,
  model = c("neg.exp", "weibull", "discrete.parallel", "discrete.series", "cont.quality",
    "neg.exp.limit"),
  iters = 500,
  upper = NULL,
  lower = NULL,
  ...
)

Arguments

time

time since decomposition began, that is, ti-t0

mass.remaining

proportional mass loss, that is, mi/m0

model

there are five models currently implemented (see below)

iters

Number of random starts for the fitting. Use higher numbers for models with larger numbers of parameters and for models that inherently tend to be less identifiable.

upper, lower

Optional user specified values for the upper and lower bounds used by optim in the fitting procedure. Use with care, only minimal sanity checking is currently implemented.

...

Additional arguments passed to optim

Value

returns a litfit object with the following elements:

  • optimFit: a list generated by the optim function

  • logLik: the log-likelihood of the model

  • time: vector of time (same as input)

  • mass: vector os mass remaining (same as input)

  • predicted: predicted values from the model for each of the points within time

  • model: name of the model

  • nparams: number of fit parameters in the model

  • AIC: AIC of the model fit

  • AICc: AICc of the model fit

  • BIC: BIC of the model fit

  • and some other potentially useful things

Details

the model likelihood is maximized using methods available in optim. Optimization methods to be used within optim can be specified through the control object (i.e., control$method). The default method is L-BFGS-B with bounds specific to each model. Each model

  • weibull The Weibull residence time model--two parameters (Frechet 1927)

  • discrete.parallel Two pools in parallel with a term for the fraction of initial mass in each pool--three parameter (Manzoni et al. 2012)

  • discrete.series A three parameter model in which there is the possibility of two sequential pools (Manzoni et al. 2012)

  • cont.quality (Ågren and Bosatta 1996, see also Manzoni et al. 2012)

Warning: difficulty in finding the optimal solution is determined by an interaction between the nature and complexity of the likelihood space (which is both data- and model-dependent) as well as the optimization methods. There is can never be a guarantee that the optimal solution is found, but using many random starting points will increase these odds. It should be noted that there is significant variation among models in identifiability, with some models inherently less identifiable likely due to a tendency to form for flat ridges in likelihood space. The confidence in the fit should be very low in these cases (see Cornwell and Weedon 2013). A number of random starting points are used in optimization and are given through the iters. The function checks whether the the top 10 optimizations have converged on the same likelihood, and if they have not this function will return a warning.

References

  • Ågren, G. and Bosatta, E. (1996) Quality: a bridge between theory and experiment in soil organic matter studies. Oikos, 76, 522–528.

  • Cornwell, W. K., and J. T. Weedon. (2013). Decomposition trajectories of diverse litter types: a model selection analysis. Methods in Ecology and Evolution.

  • Frechet, M. (1927) Sur la loi de probabilite de lecart maximum. Ann de la Soc polonaise de Math, 6, 93–116.

  • Manzoni, S., Pineiro, G., Jackson, R. B., Jobbagy, E. G., Kim, J. H., & Porporato, A. (2012). Analytical models of soil and litter decomposition: Solutions for mass loss and time-dependent decay rates. Soil Biology and Biochemistry, 50, 66-76.

  • Olson, J.S. (1963) Energy storage and the balance of producers and decomposers in ecological systems. Ecology, 44, 322–331.

Author

Will Cornwell and James Weedon

Examples

data(pineneedles)
fit<-fit_litter(time=pineneedles$Year,mass.remaining=pineneedles$Mass.remaining,
model='neg.exp',iters=1000)
#> Number of successful fits:  984  out of 1000