Best practice in respirometry is almost always to use linear regression on multiple time-series recordings of oxygen concentrations, to derive a slope and thus rate of oxygen use. Technically, an overall rate between any two timepoints can be calculated using only two O2 datapoints if they are accurate recordings, and in the past “closed-bottle” respirometry was common, where only the initial and final oxygen concentrations were recorded. However, in the modern day, there is little excuse for not using continuous data. Using only two values gives no information about how rates of use may have fluctutated, and are also obviously highly sensitive to error and inaccurate recordings. Therefore rates determined using this method are unsafe.

For some applications however, there may be valid reasons for using only two datapoints of oxygen concentration separated by a known time period to calculate a rate. This could be in cases of periodic and irregular oxygen monitoring or sampling in the field, or alternatively where the investigator is not interested in oxygen uptake rates per se, but rather in total oxygen flux over a time period. An example of this is in respirometry studies of sediment communities, where oxygen flux is correlated with transport of other chemicals or nutrients (e.g. Smith Jr. 1987). In such cases, even if continuous data exist, fitting a linear regression to these data may not give the correct information the investigator wants. This is particularly the case where oxygen or oxygen use fluctuates significantly over the time period of the experiment, such as with a diurnal rhythm. In such cases linear regressions may be significantly skewed.

respR has the ability to calculate two-point rates. While we strongly recommend it not be used for analysis of data from any laboratory based studies looking at organismal metabolic rates, we have kept the functionality intact for the above use-cases, and for analysis of historical closed-bottle respirometry data.

Two-point data

Simple two-point data can be entered into calc.rate in a 2x2 data frame (here created via typical R syntax):

two_pt_data <- data.frame(time = c(0, 10), o2 = c(8.5, 6.3))
two_pt_data
#>   time  o2
#> 1    0 8.5
#> 2   10 6.3
two_pt_result <- calc_rate(two_pt_data)
summary(two_pt_result)
#> Summary:
#>    intercept_b0 rate_b1 rsq row endrow time endtime oxy endoxy rowlength
#> 1:          8.5   -0.22   1   1      2    0      10 8.5    6.3         1
#>    timelength rate_twopoint
#> 1:         10         -0.22

The two-point rate can be seen at the end of the summary object. With only two datapoints, it will obviously be equal to the rate in the linear regression method. However, it can be extracted directly:

two_pt_result$rate_2pt
#> [1] -0.22

Processing two-point rates

Two-point rates can be passed to adjust_rate() for background corrections, and convert_rate for conversion to the desired output units. However, if using an object of class calc_rate they must be specifically called using $rate_2pt or, by default, the adjustment or conversion will operate on the linear regression derived rate.

adjust_rate(two_pt_result$rate_2pt, by = -0.001)
#> 
#> Rate adjustments applied. Use print() command for more info.
#> 
#> # adjust_rate # -------------------------
#> Note: please consider the sign of the value while correcting the rate.
#> 
#> Rank/position 1 result shown. To see all results use summary().
#> Input rate: -0.22
#> Adjustment: -0.001
#> Adj. rate: -0.219

convert_rate(two_pt_result$rate_2pt, o2.unit = "mg/L", time.unit = "h", output.unit = "mg/h/g", 
    volume = 25, mass = 0.2)
#> 
#> # convert_rate # ------------------------
#> Rank/position 1 result shown. To see all results use summary().
#> Input:
#> [1] -0.22
#> [1] "mg/L" "hour"
#> Converted:
#> [1] -0.0275
#> [1] "mg/hour/g"

The rate can alternatively be entered manually:

convert_rate(-0.0224, o2.unit = "mg/L", time.unit = "h", output.unit = "mg/h/g", 
    volume = 25, mass = 0.2)
#> 
#> # convert_rate # ------------------------
#> Rank/position 1 result shown. To see all results use summary().
#> Input:
#> [1] -0.0224
#> [1] "mg/L" "hour"
#> Converted:
#> [1] -0.0028
#> [1] "mg/hour/g"

References

Smith Jr, K L. 1987. Food energy supply and demand: A discrepancy between particulate organic carbon flux and sediment community oxygen consumption in the deep ocean. Limnology and Oceanography 32(1).