gpp {flux} | R Documentation |
Model GPP from CO2 closed chamber flux data
Description
Model GPP from closed chamber flux data under consideration of ecosystem respiration. Four different methods are available: Providing one global Reco model, providing several Reco models, providing estimated Reco fluxes via function
gpp
or extracting Reco fluxes from real measurements via gpp2
. Timestamps are used to assign Reco data to the respective NEE data. In the latter case they have to be provided alongside the Reco fluxes.
Usage
gpp(NEE, PAR, ts.NEE, PAR.Temp, Reco.m, ts.Reco = NULL,
method = "Michaelis-Menten", units = "30mins", allow.offset = FALSE,
virtual = FALSE, start.par = max(PAR), ...)
gpp2(NEE, PAR, ts.NEE, oot, oot.id = c("D", "T"),
method = "Michaelis-Menten", allow.offset = FALSE,
virtual = FALSE, start.par = max(PAR), ...)
Arguments
NEE |
Numeric vector with |
PAR |
Numeric vector of mean irradiation during |
ts.NEE |
POSIXlt vector holding the timestamp of the |
PAR.Temp |
Either numeric vector of mean recorded temperature readings during |
Reco.m |
Model structure obtained from running |
ts.Reco |
POSIXlt vector holding the timestamp of the |
method |
The function knows several equations to model the relationship between gpp and irradiation. At the moment |
units |
Character string specifying how |
allow.offset |
Logical. Shall GPP values other than 0 be allowed at zero irradiation? See details. |
virtual |
Logical. If |
start.par |
Numeric between 0 and |
... |
Any arguments passed to |
oot |
Vector of length = |
oot.id |
Vector of length 2 that specifies which of the flux values derive from opaque (first value, i.e. |
Details
The function models the relationship between uptake by plants (gross primary production, GPP) and irradiation using one out of 4 methods (Falge et al. 2001). Per default the Michaelis-Menten kinetic (e.g., Schmitt et al. 2010) is used. The following models can be fitted to the data:
(Michaelis-Menten)
(Falge)
(Smith)
(Misterlich)
with PAR
the incoming light (irradiation). Note, that irradiation can be given in PAR
or in PPFD although the equation states PAR
. GPmax
and alpha
are the parameters that are fitted. GPmax
refers to the maximum gross primary production at saturating or optimum light whereas alpha refers to the ecosystem quantum yield and gives the starting slope of the model.
Transparent closed chamber measurements in the field typically capture net ecosystem exchange (NEE
), which is the sum of the two opposing processes ecosystem respiration () and GPP. Therefore, it is necessary to subtract modeled
from the measured
NEE
to obtain GPP that can be used for the modelling against irradiance.
Real at the time of the
NEE
measurement is typically unkown because dark and light measurements cannot be taken at the same spot at the same time. Therefore, has to be modelled based on dark chamber or nighttime measurements (see
reco
). For modelling GPP from NEE
chamber measurements, gpp
just needs measured NEE
, the associated irradiance (PAR
) and temperature (PAR.Temp
) values and the model(s) (
Reco.m
). The model(s) can derive from a longer period of time than the
NEE
data, which is often better to get more reliable models. In contrast, gpp2
extracts fluxes from actual measurements.
Approaches to assigning values:
Approach 1: Extract corresponding fluxes from the provided data that are assigned to corresponding NEE values via their timestamp: For this approach
NEE
has to contain both NEE and fluxes.
oot
has to be specified as a vector that indicates whether the respective fluxes were measured as NEE
(transparent chamber) or Reco
(opaque chamber or low PAR). In addition oot.id
may have to be changed accordingly. gpp2
is used for fitting the models.
Approach 2: If Reco.m
is specified as a vector containing modelled values these are used to calculate GPP = NEE + Reco. The correct
values are assigned to the appropriate
NEE
values by rounding the timestamp of the latter (given in ts.NEE
) according to the time lapse of the values and then merging both on the respective timestamps. Therefore
ts.Reco
has to be specified while PAR.Temp
is ignored.
Approach 3: If just one model is provided as an object of class
"reco"
resulting from running reco
this is used to predict at the times of the
NEE
measurements with the temperatures provided in PAR.Temp
as new.data
. PAR.Temp
has to be specified as a vector of length = length(NEE). ts.Reco
must not be specified.
Approach 4: If several models are provided as an object of class
"breco"
resulting from running reco.bulk
these are used to predict at the times of the
NEE
measurements with the temperatures provided in PAR.Temp
as new.data
. PAR.Temp
has to be provided as a data.frame with all temperature variables that were used when obtaining the models via
reco.bulk
with ncol(PAR.Temp)
= length(NEE)
. The appropriate temperatures are assigned using the parameter which.Temp
that is reported with each model in an object of class "breco"
. ts.Reco
must not be specified.
The Michaelis Menten fit to the GPP
/PAR
relationship presumes that plants (at least C3 plants) do not take up when there is no irradiance. However, sometimes the
model gives quite unrealistic
estimates for the times of NEE measurements leading to an alleged considerable uptake of
under no or very low light conditions. This in turn leads to unrealistic and not well fitted GPP models. Therefore, it is possible to correct the model by not allowing an offset:
allow.offset = FALSE
(default). The offset is determined automatically by constructing a linear model using the data points until PAR
= start.par
and predicting GPP at PAR
= 0. The offset is then subtracted from all GPP values and is later automatically added when doing the diagnostic plots.
The start parameters for the non-linear fit (via nls
) are derived from the data itself. For alpha (initial slope of the model) the slope of the linear model of GPP against PAR
constructed from the data points until PAR
= start.par
is used. For GPmax
the mean of the five highest GPP values is taken.
It is advisable to test various configurations regarding the model and testing the effect of allowing the offset. ATTENTION: The offset is not added back to the predicted GPP data but it is returned as part of the output (see value section). Therefore, if the model parameters and model formula are used to predict GPP fluxes, the offset has to be added manually.
Value
The function returns an object of class gpp
(for ts.Reco
!= NULL
) or of class gpp2
(for ts.Reco
= NULL
). It is a list with the following components.
mg |
The gpp model. A |
mr |
The Reco model used. A |
data |
Either a three entry list (with |
dat |
|
offset |
Numeric value giving the offset. |
start |
List with the start values for the |
PAR.Temp |
Numeric vector with the |
The data.frame
in dat
contains the following columns:
NEE |
|
GPP |
Corresponding |
Reco |
Corresponding |
PAR |
Corresponding |
timestamp |
Corresponding timestamps. |
mins |
Temporal distance to next reco value. Always 0 but reported for consistency with |
Reco |
Numeric vector of corresponding |
Author(s)
Gerald Jurasinski, gerald.jurasinski@uni-rostock.de
References
Falge E, Baldocchi D, Olson R, Anthoni R, et al. 2001. Gap filling strategies for defensible annual sums of net ecosystem exchange. Agricultural and Forest Meteorology, 107:43-69.
Schmitt M, Bahn M, Wohlfahrt G, Tappeiner U, Cernusca A. 2010. Land use affects the net ecosystem CO2 exchange and its components in mountain grasslands. Biogeosciences, 7:2297-2309.
See Also
Examples
## load data
data(tt.flux)
## make timestamp
tt.flux$timestamp <- strptime(paste(tt.flux$date, tt.flux$time),
format="%Y-%m-%d %H:%M:%S")
## model reco with Arrhenius type model
# extract data and omit estimated fluxes with both the nrmse
# and the r2 flag set to 0
ttf <- tt.flux[!(tt.flux$CO2.r2.f + tt.flux$CO2.nrmse.f) == 0, ]
# extract table with flux data for reco modeling
ttf4reco <- subset(ttf, kind > 4)
# omit CO2 fluxes below zero
ttf4reco <- ttf4reco[ttf4reco$CO2.flux >= 0,]
# plot reco data
plot(CO2.flux ~ t.air, data=ttf4reco)
# check for the best temperature for reco modelling
temps <- c("t.air", "t.soil2", "t.soil5", "t.soil10")
sapply(temps, function(x) lapply(reco(ttf4reco$CO2.flux,
ttf4reco[,x], method="arr"), AIC))
# take the temperature in soil 2 cm
reco.m <- reco(ttf4reco$CO2.flux, ttf4reco$t.soil2, method="arr")
# inspect
reco.m
## model gpp
# extract table with flux data for gpp modeling
ttf4gpp <- subset(ttf, kind < 4)
# do a single gpp model for a measurement day using data of spot 2
tmp <- ttf4gpp[(ttf4gpp$date=="2011-05-11") & (ttf4gpp$spot==2),]
gpp.m1 <- gpp(tmp$CO2.flux, tmp$PAR, tmp$timestamp, tmp$t.soil2,
reco.m[[1]])
# check diagnostic plot
plot(gpp.m1)
# same for spot 3
tmp <- ttf4gpp[(ttf4gpp$date=="2011-05-11") & (ttf4gpp$spot==3),]
gpp.m2 <- gpp(tmp$CO2.flux, tmp$PAR, tmp$timestamp, tmp$t.soil2,
reco.m[[1]])
# check diagnostic plot
plot(gpp.m2)
# same with all three spots
tmp <- ttf4gpp[(ttf4gpp$date=="2011-05-11"),]
gpp.m3 <- gpp(tmp$CO2.flux, tmp$PAR, tmp$timestamp, tmp$t.soil2,
reco.m[[1]])
# check diagnostic plot
plot(gpp.m3)