gpp | R Documentation |
Model GPP from CO2 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.
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), ...)
NEE |
Numeric vector with CO2 fluxes from measurements of CO2 net ecosystem exchange (NEE). |
PAR |
Numeric vector of mean irradiation during CO2 flux measurements. Can be supplied as photosynthetically active radiation (PAR) or photosynthetic photon flux density (PPFD). |
ts.NEE |
POSIXlt vector holding the timestamp of the |
PAR.Temp |
Either numeric vector of mean recorded temperature readings during CO2 flux measurements or data.frame with several temperature records (if Reco.m is provided as an object resulting from running |
Reco.m |
Model structure obtained from running |
ts.Reco |
POSIXlt vector holding the timestamp of the R_eco values. Has to be specified if R_eco values instead of an R_eco model are given in |
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. R_eco measurements) and which derive from transparent (second value, i.e. NEE measurements) chamber measurements when |
The function models the relationship between CO2 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:
GPP = (GPmax * alpha * PAR)/(alpha * PAR + GPmax) (Michaelis-Menten)
GPP = (alpha * PAR)/(1 - (PAR/2000) + (alpha*PAR/GPmax)) (Falge)
GPP = (alpha * PAR * GPmax)/sqrt(GPmax^2 + (alpha*PAR)^2) (Smith)
GPP = GPmax * (1 - exp((alpha*PAR) / GPmax)) (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 (R_eco) and GPP. Therefore, it is necessary to subtract modeled R_eco from the measured NEE
to obtain GPP that can be used for the modelling against irradiance.
Real R_eco 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, R_eco 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 R_eco model(s) (Reco.m
). The R_eco 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 R_eco fluxes from actual measurements.
Approaches to assigning R_eco values:
Approach 1: Extract corresponding R_eco 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 R_eco 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 R_eco values these are used to calculate GPP = NEE + Reco. The correct R_eco 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 R_eco 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 R_eco model is provided as an object of class "reco"
resulting from running reco
this is used to predict R_eco 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 R_eco models are provided as an object of class "breco"
resulting from running reco.bulk
these are used to predict R_eco 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 R_eco 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 CO2 when there is no irradiance. However, sometimes the R_eco model gives quite unrealistic R_eco estimates for the times of NEE measurements leading to an alleged considerable uptake of CO2 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 R_eco 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.
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 R_eco values. |
PAR |
Corresponding |
timestamp |
Corresponding timestamps. |
mins |
Temporal distance to next reco value. Always 0 but reported for consistency with |
Reco |
Numeric vector of corresponding R_eco values estimated with the R_eco model ( |
Gerald Jurasinski, gerald.jurasinski@uni-rostock.de
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.
reco
, fluxx
## 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)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.