We recommend using fit_photosynthesis()
with argument .photo_fun = "r_light"
rather than calling this function directly.
Usage
fit_r_light2(
.data,
.model = "default",
.method = "ls",
Q_lower = NA,
Q_upper = NA,
Q_levels = NULL,
C_upper = NA,
quiet = FALSE,
brm_options = NULL
)
Arguments
- .data
A data frame containing plant ecophysiological data. See
required_variables()
for the variables required for each model.- .model
A character string of model name to use. See
get_all_models()
.- .method
A character string of the statistical method to use: 'ls' for least-squares and 'brms' for Bayesian model using
brms::brm()
. Default is 'ls'.- Q_lower
Lower light intensity limit for estimating Rd using
kok_1956
andyin_etal_2011
models.- Q_upper
Upper light intensity limit for estimating Rd using
kok_1956
andyin_etal_2011
models- Q_levels
A numeric vector of light intensity levels (\(\mu\)mol / mol) for estimating \(R_\mathrm{d}\) from the linear region of the A-C curve using the
walker_ort_2015
model.- C_upper
Upper C (\(\mu\)mol / mol) limit for estimating \(R_\mathrm{d}\) from the linear region of the A-C curve using the
walker_ort_2015
model.- quiet
Flag. Should messages be suppressed? Default is FALSE.
- brm_options
A list of options passed to
brms::brm()
if.method = "brms"
. Default is NULL.
Value
If
.method = 'ls'
: anstats::nls()
orstats::lm()
object.If
.method = 'brms'
: abrms::brmsfit()
object.
Note
Confusingly, \(R_\mathrm{d}\) typically denotes respiration in the light, but you might see \(R_\mathrm{day}\) or \(R_\mathrm{light}\).
Models
Kok (1956)
The kok_1956
model estimates light respiration using the Kok method
(Kok, 1956). The Kok method involves looking for a breakpoint in the
light response of net CO2 assimilation at very low light intensities
and extrapolating from data above the breakpoint to estimate light
respiration as the y-intercept. Rd value should be negative,
denoting an efflux of CO2.
Yin et al. (2011)
The yin_etal_2011
model estimates light respiration according
to the Yin et al. (2009, 2011) modifications of the Kok
method. The modification uses fluorescence data to get a
better estimate of light respiration. Rd values should be negative here to
denote an efflux of CO2.
Walker & Ort (2015)
The walker_ort_2015
model estimates light respiration and
\(\Gamma*\) according to Walker & Ort (2015) using a slope-
intercept regression method to find the intercept of multiple
A-C curves run at multiple light intensities. The method estimates
\(\Gamma*\) and \(R_\mathrm{d}\). If estimated \(R_\mathrm{d}\) is
positive this could indicate issues (i.e. leaks) in the gas exchange
measurements. \(\Gamma*\) is in units of umol / mol and \(R_\mathrm{d}\)
is in units of \(\mu\)mol m\(^{-2}\) s\(^{-1}\) of respiratory flux.
If using \(C_\mathrm{i}\), the estimated value is technically \(C_\mathrm{i}\)*.
You need to use \(C_\mathrm{c}\) to get \(\Gamma*\) Also note, however,
that the convention in the field is to completely ignore this note.
References
Kok B. 1956. On the inhibition of photosynthesis by intense light. Biochimica et Biophysica Acta 21: 234–244
Walker BJ, Ort DR. 2015. Improved method for measuring the apparent CO2 photocompensation point resolves the impact of multiple internal conductances to CO2 to net gas exchange. Plant Cell Environ 38:2462- 2474
Yin X, Struik PC, Romero P, Harbinson J, Evers JB, van der Putten PEL, Vos J. 2009. Using combined measurements of gas exchange and chlorophyll fluorescence to estimate parameters of a biochemical C3 photosynthesis model: a critical appraisal and a new integrated approach applied to leaves in a wheat (Triticum aestivum) canopy. Plant Cell Environ 32:448-464
Yin X, Sun Z, Struik PC, Gu J. 2011. Evaluating a new method to estimate the rate of leaf respiration in the light by analysis of combined gas exchange and chlorophyll fluorescence measurements. Journal of Experimental Botany 62: 3489–3499
Examples
# \donttest{
# Walker & Ort (2015) model
library(broom)
library(dplyr)
library(photosynthesis)
acq_data = system.file("extdata", "A_Ci_Q_data_1.csv", package = "photosynthesis") |>
read.csv()
fit = fit_photosynthesis(
.data = acq_data,
.photo_fun = "r_light",
.model = "walker_ort_2015",
.vars = list(.A = A, .Q = Qin, .C = Ci),
C_upper = 300,
# Irradiance levels used in experiment
Q_levels = c(1500, 750, 375, 125, 100, 75, 50, 25),
)
# The 'fit' object inherits class 'lm' and many methods can be used
## Model summary:
summary(fit)
#>
#> Call:
#> lm(formula = `(Intercept)` ~ gamma_star, data = .)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -0.218920 -0.136553 0.007685 0.117016 0.249953
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -0.1949 0.1002 -1.945 0.0998 .
#> gamma_star 44.3113 3.2518 13.627 9.7e-06 ***
#> ---
#> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#>
#> Residual standard error: 0.1738 on 6 degrees of freedom
#> Multiple R-squared: 0.9687, Adjusted R-squared: 0.9635
#> F-statistic: 185.7 on 1 and 6 DF, p-value: 9.698e-06
#>
## Estimated parameters:
coef(fit)
#> (Intercept) gamma_star
#> -0.19485 44.31131
## 95% confidence intervals:
## n.b. these confidence intervals are not correct because the regression is fit
## sequentially. It ignores the underlying data and uncertainty in estimates of
## slopes and intercepts with each A-C curve. Use '.method = "brms"' to properly
## calculate uncertainty.
confint(fit)
#> 2.5 % 97.5 %
#> (Intercept) -0.4400221 0.05032205
#> gamma_star 36.3544139 52.26820542
## Tidy summary table using 'broom::tidy()'
tidy(fit, conf.int = TRUE, conf.level = 0.95)
#> # A tibble: 2 × 7
#> term estimate std.error statistic p.value conf.low conf.high
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 (Intercept) -0.195 0.100 -1.94 0.0998 -0.440 0.0503
#> 2 gamma_star 44.3 3.25 13.6 0.00000970 36.4 52.3
## Calculate residual sum-of-squares
sum(resid(fit)^2)
#> [1] 0.1812764
# Yin et al. (2011) model
fit = fit_photosynthesis(
.data = acq_data,
.photo_fun = "r_light",
.model = "yin_etal_2011",
.vars = list(.A = A, .phiPSII = PhiPS2, .Q = Qin),
Q_lower = 20,
Q_upper = 250
)
# The 'fit' object inherits class 'lm' and many methods can be used
## Model summary:
summary(fit)
#>
#> Call:
#> lm(formula = .A ~ x_var, data = .)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -3.8587 -0.4493 0.2041 0.7420 2.2232
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -0.77214 0.39419 -1.959 0.0549 .
#> x_var 0.22661 0.02739 8.274 2.13e-11 ***
#> ---
#> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#>
#> Residual standard error: 1.253 on 58 degrees of freedom
#> Multiple R-squared: 0.5414, Adjusted R-squared: 0.5335
#> F-statistic: 68.46 on 1 and 58 DF, p-value: 2.129e-11
#>
## Estimated parameters:
coef(fit)
#> (Intercept) x_var
#> -0.7721399 0.2266078
## 95% confidence intervals:
confint(fit)
#> 2.5 % 97.5 %
#> (Intercept) -1.5611923 0.01691245
#> x_var 0.1717862 0.28142935
## Tidy summary table using 'broom::tidy()'
tidy(fit, conf.int = TRUE, conf.level = 0.95)
#> # A tibble: 2 × 7
#> term estimate std.error statistic p.value conf.low conf.high
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 (Intercept) -0.772 0.394 -1.96 5.49e- 2 -1.56 0.0169
#> 2 x_var 0.227 0.0274 8.27 2.13e-11 0.172 0.281
## Calculate residual sum-of-squares
sum(resid(fit)^2)
#> [1] 91.04856
# Kok (1956) model
fit = fit_photosynthesis(
.data = acq_data,
.photo_fun = "r_light",
.model = "kok_1956",
.vars = list(.A = A, .Q = Qin),
Q_lower = 20,
Q_upper = 150
)
# The 'fit' object inherits class 'lm' and many methods can be used
## Model summary:
summary(fit)
#>
#> Call:
#> lm(formula = .A ~ .Q, data = .)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -4.1759 -0.4492 0.2077 0.6613 2.3544
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -0.523701 0.396419 -1.321 0.192
#> .Q 0.036347 0.004781 7.602 2.85e-10 ***
#> ---
#> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#>
#> Residual standard error: 1.309 on 58 degrees of freedom
#> Multiple R-squared: 0.4991, Adjusted R-squared: 0.4905
#> F-statistic: 57.79 on 1 and 58 DF, p-value: 2.851e-10
#>
## Estimated parameters:
coef(fit)
#> (Intercept) .Q
#> -0.52370105 0.03634651
## 95% confidence intervals:
confint(fit)
#> 2.5 % 97.5 %
#> (Intercept) -1.3172199 0.26981784
#> .Q 0.0267761 0.04591691
## Tidy summary table using 'broom::tidy()'
tidy(fit, conf.int = TRUE, conf.level = 0.95)
#> # A tibble: 2 × 7
#> term estimate std.error statistic p.value conf.low conf.high
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 (Intercept) -0.524 0.396 -1.32 1.92e- 1 -1.32 0.270
#> 2 .Q 0.0363 0.00478 7.60 2.85e-10 0.0268 0.0459
## Calculate residual sum-of-squares
sum(resid(fit)^2)
#> [1] 99.4385
# }