Skip to contents

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 and yin_etal_2011 models.

Q_upper

Upper light intensity limit for estimating Rd using kok_1956 and yin_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

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

# }