Introduction

This is an example of a data processing pipeline for compound-specific Gas Chromatography Isotope Ratio Mass Spectrometry (GC-IRMS) carbon isotope measurements. It can be downloaded as a template (or just to see the plain-text code) by following the Source link above. Knitting for stand-alone data analysis works best to HTML rather than the website rendering you see here. To make this formatting change simply delete line #6 in the template file (the line that says rmarkdown::html_vignette:).

Note that all code chunks that contain a critical step towards the final data (i.e. do more than visualization or a data summary) are marked with (*) in the header to make it easier to follow all key steps during interactive use.

This example was run using isoreader version 1.0.11 and isoprocessor version 0.5.8. If you want to reproduce the example, please make sure that you have these or newer versions of both packages installed:

Load packages

library(tidyverse) # general data wrangling and plotting
library(isoreader) # reading the raw data files
library(isoprocessor) # processing the data

This analysis was run using isoreader version 1.0.11 and isoprocessor version 0.5.8.

For use as a data processing template, please follow the Source link above, download the raw file and adapt as needed. Knitting for stand-alone data analysis works best to HTML rather than the in-package default html_vignette.

All code chunks that contain a critical step towards the final data (i.e. do more than visualization or a data summary) are marked with (*) in the header to make it easier to follow all key steps during interactive use.

Load data

Process file info & peak table (*)

# process file information
iso_files <- iso_files_raw %>% 
  # rename key file info columns
  iso_rename_file_info(id1 = `Identifier 1`, id2 = `Identifier 2`) %>% 
  # parse text info into numbers
  iso_parse_file_info(number = Analysis) %>% 
  # process other file information that is specific to the naming conventions
  # of this particular sequence
  iso_mutate_file_info(
    # what is the type of each analysis?
    type = case_when(
      str_detect(id1, "[Zz]ero")      ~ "on_off",
      str_detect(id1, "[Ll]inearity") ~ "lin",
      str_detect(id1, "A5")           ~ "std",
      TRUE                            ~ "sample"
    ),
    # was there seed oxidation?
    seed_oxidation = ifelse(`Seed Oxidation` == "1", "yes", "no"),
    # what was the injection volume based on the AS method name?
    injection_volume = str_extract(`AS Method`, "AS PTV [0-9.]+") %>% 
      parse_number() %>% iso_double_with_units("uL"),
    # what was the concentration? (assuming Preparation = concentration or volume)
    concentration = str_extract(Preparation, "[0-9.]+ ?ng( per |/)uL") %>% 
      parse_number() %>% iso_double_with_units("ng/uL"),
    # or the volume?
    volume = str_extract(Preparation, "[0-9.]+ ?uL") %>% 
      parse_number() %>% iso_double_with_units("uL"),
    # what folder are the data files in? (assuming folder = sequence)
    folder = basename(dirname(file_path))
  ) %>% 
  # add in additional sample metadata (could be any info)
  # note: this would typically be stored in / read from a csv or excel file
  iso_add_file_info(
    tibble::tribble(
      # column names
      ~id1,                           ~sample,          ~fraction,
      # metadata (row-by-row)
      "OG268_CZO-SJER_F1",            "SJER",           "F1",
      "OG271_CZO-CTNA_F1",            "CTNA",           "F1",
      "OG281_CZO-Niwot_Tundra2_F1",   "Niwot_Tundra2",  "F1",
      "OG282_CZO-Niwot_Tundra1_F1",   "Niwot_Tundra1",  "F1"
    ),
    join_by = "id1"
  ) %>% 
  # focus only on the relevant file info, discarding the rest
  iso_select_file_info(
    folder, Analysis, file_datetime, id1, id2, type, sample, 
    seed_oxidation, injection_volume, concentration, volume
  )
#> Info: renaming 2 file info column(s) wherever they exist across 45 isofile(s):
#>  - for 44 file(s): 'Identifier 1'->'id1', 'Identifier 2'->'id2'
#>  - for 1 file(s): 'Identifier 1'->'id1'
#> Info: parsing 1 file info columns for 45 data file(s):
#>  - to number: 'Analysis'
#> Info: mutating file info for 45 data file(s)
#> Info: adding new file information ('sample', 'fraction') to 45 data file(s), joining by 'id1'...
#>  - 'id1' join: 4/4 new info rows matched 4/45 data files
#> Info: keeping 12 file info column(s) wherever they exist across 45 isofile(s):
#>  - for 45 file(s): 'file_id', 'folder', 'Analysis', 'file_datetime', 'id1', 'id2', 'type', 'sample', 'seed_oxidation', 'injection_volume', 'concentration', 'volume'

# set peak table from vendor data table with default isodat template
iso_files <- iso_set_peak_table_from_isodat_vendor_data_table(iso_files) %>% 
  # convert units from mV to V for amplitudes and area
  iso_convert_peak_table_units(V = mV, Vs = mVs)
#> Info: setting peak table from vendor data table with the following renames:
#> - for 45 file(s): 'Nr.'->'peak_nr', 'Is Ref.?'->'is_ref', 'Start'->'rt_start', 'Rt'->'rt', 'End'->'rt_end', 'Ampl 44'->'amp44', 'Ampl 45'->'amp45', 'Ampl 46'->'amp46', 'BGD 44'->'bgrd44_start', 'BGD 45'->'bgrd45_start', 'BGD 46'->'bgrd46_start', 'BGD 44'->'bgrd44_end', 'BGD 45'->'bgrd45_end', 'BGD 46'->'bgrd46_end', 'rIntensity 44'->'area44', 'rIntensity 45'->'area45', 'rIntensity 46'->'area46', 'rR 45CO2/44CO2'->'r45/44', 'rR 46CO2/44CO2'->'r46/44', 'rd 45CO2/44CO2'->'rd45/44', 'rd 46CO2/44CO2'->'rd46/44', 'd 45CO2/44CO2'->'d45/44', 'd 46CO2/44CO2'->'d46/44', 'd 13C/12C'->'d13C', 'd 18O/16O'->'d18O', 'd 17O/16O'->'d17O', 'AT% 13C/12C'->'at13C', 'AT% 18O/16O'->'at18O'
#> Info: converting peak table column units where applicable from 'mV'->'V' and 'mVs'->'Vs' for columns matching 'everything()'

Show file information

Analysis file_datetime id1 id2 type sample seed_oxidation injection_volume [uL] concentration [ng/uL] volume [uL]
2026 2017-10-25 20:22:23 CO2 zero 6V on_off NA no NA NA NA
2030 2017-10-25 20:55:44 Linearity CO2 NA lin NA no NA NA NA
2034 2017-10-26 03:15:48 A5 0.5ul std NA yes 0.5 14 NA
2041 2017-10-26 14:50:38 A5 3ul std NA no 3.0 14 NA
2047 2017-10-26 23:50:04 A5 3ul std NA yes 3.0 14 NA
2061 2017-10-27 19:29:27 OG271_CZO-CTNA_F1 1.5uL sample CTNA yes 1.5 NA 25
2093 2017-10-29 18:32:04 A5 0.5ul std NA yes 0.5 14 NA
2099 2017-10-30 04:33:19 A5 0.5ul std NA yes 0.5 14 NA
2106 2017-10-30 16:25:45 OG281_CZO-Niwot_Tundra2_F1 1.5uL sample Niwot_Tundra2 yes 1.5 NA 150
2114 2017-10-31 04:08:42 A5 1.5ul std NA yes 1.5 14 NA
2132 2017-11-01 12:33:25 A5 conc 1ul std NA yes 1.0 140 NA
2138 2017-11-02 01:48:12 A5 conc 1.5ul std NA yes 1.5 140 NA
2027 2017-10-25 20:30:42 CO2 zero 3V on_off NA no NA NA NA
2031 2017-10-25 22:30:54 A5 0.5ul std NA yes 0.5 14 NA
2035 2017-10-26 04:50:43 A5 1.5ul std NA yes 1.5 14 NA
2044 2017-10-26 18:23:25 A5 4.5ul std NA no 4.5 14 NA
2053 2017-10-27 08:49:22 OG268_CZO-SJER_F1 1.5uL sample SJER yes 1.5 NA 50
2069 2017-10-28 06:37:31 A5 1.5ul std NA yes 1.5 14 NA
2096 2017-10-29 23:48:23 A5 1.5ul std NA yes 1.5 14 NA
2100 2017-10-30 06:08:16 A5 1.5ul std NA yes 1.5 14 NA
2107 2017-10-30 18:00:40 OG282_CZO-Niwot_Tundra1_F1 1.5uL sample Niwot_Tundra1 yes 1.5 NA 150
2115 2017-10-31 05:43:46 A5 3ul std NA yes 3.0 14 NA
2139 2017-11-02 09:13:36 A5 conc 1ul std NA yes 1.0 140 NA
2028 2017-10-25 20:39:02 CO2 zero 1.2V on_off NA no NA NA NA
2032 2017-10-26 00:05:49 A5 1.5ul std NA yes 1.5 14 NA
2036 2017-10-26 06:25:48 A5 3ul std NA yes 3.0 14 NA
2045 2017-10-26 20:40:08 A5 0.5ul std NA yes 0.5 14 NA
2056 2017-10-27 13:34:08 A5 1.5ul std NA yes 1.5 14 NA
2075 2017-10-28 14:27:22 A5 1.5ul std NA yes 1.5 14 NA
2097 2017-10-30 01:23:28 A5 3ul std NA yes 3.0 14 NA
2101 2017-10-30 07:43:23 A5 3ul std NA yes 3.0 14 NA
2116 2017-10-31 07:18:39 A5 conc 1ul std NA yes 1.0 140 NA
2136 2017-11-01 22:38:25 A5 conc 0.5ul std NA yes 0.5 140 NA
2140 2017-11-02 10:48:30 A5 conc 2ul std NA yes 2.0 140 NA
2029 2017-10-25 20:47:22 CO2 zero 0.7V on_off NA no NA NA NA
2033 2017-10-26 01:40:55 A5 3ul std NA yes 3.0 14 NA
2040 2017-10-26 13:07:47 A5 1.5ul std NA yes 1.5 14 NA
2046 2017-10-26 22:15:02 A5 1.5ul std NA yes 1.5 14 NA
2060 2017-10-27 17:54:33 A5 conc 1ul std NA no 1.0 140 NA
2086 2017-10-29 07:58:06 A5 1.5ul std NA yes 1.5 14 NA
2098 2017-10-30 02:58:24 A5 conc 1ul std NA yes 1.0 140 NA
2102 2017-10-30 09:18:16 A5 conc 1ul std NA yes 1.0 140 NA
2113 2017-10-31 02:33:47 A5 0.5ul std NA yes 0.5 14 NA
2117 2017-10-31 08:53:43 A5 conc 3ul std NA yes 3.0 140 NA
2137 2017-11-02 00:13:18 A5 conc 1ul std NA yes 1.0 140 NA

Samples and Standards

Analyte peaks

Calibration

Single analysis calibration (for QA)

Generate calibrations

Determine calibrations fits for all individual standard analyses.

Coefficients

Analysis file_datetime seed_oxidation injection_volume mean_area_identified calib calib_points term estimate SE signif fit_R2 fit_RMSD residual_df
2034 2017-10-26 03:15:48 yes 0.5 1.316609 lm(d13C ~ true_d13C) 15 (Intercept) 11.2671 0.9756 *** (p < 0.001) 0.9870 0.9521 13
2041 2017-10-26 14:50:38 no 3.0 10.728124 lm(d13C ~ true_d13C) 15 (Intercept) 10.3123 3.0026 ** (p < 0.01) 0.8869 9.0195 13
2047 2017-10-26 23:50:04 yes 3.0 13.834178 lm(d13C ~ true_d13C) 15 (Intercept) 11.2081 0.3546 *** (p < 0.001) 0.9983 0.1258 13
2093 2017-10-29 18:32:04 yes 0.5 2.032492 lm(d13C ~ true_d13C) 15 (Intercept) 12.0237 0.6659 *** (p < 0.001) 0.9941 0.4436 13
2099 2017-10-30 04:33:19 yes 0.5 2.497390 lm(d13C ~ true_d13C) 15 (Intercept) 10.3700 0.5911 *** (p < 0.001) 0.9949 0.3495 13
2114 2017-10-31 04:08:42 yes 1.5 5.675072 lm(d13C ~ true_d13C) 15 (Intercept) 11.3763 0.3359 *** (p < 0.001) 0.9984 0.1129 13
2035 2017-10-26 04:50:43 yes 1.5 5.356130 lm(d13C ~ true_d13C) 15 (Intercept) 10.8131 0.4285 *** (p < 0.001) 0.9974 0.1837 13
2096 2017-10-29 23:48:23 yes 1.5 8.855793 lm(d13C ~ true_d13C) 15 (Intercept) 11.2949 0.2081 *** (p < 0.001) 0.9994 0.0433 13
2100 2017-10-30 06:08:16 yes 1.5 9.864856 lm(d13C ~ true_d13C) 15 (Intercept) 11.1531 0.1618 *** (p < 0.001) 0.9996 0.0262 13
2115 2017-10-31 05:43:46 yes 3.0 10.838746 lm(d13C ~ true_d13C) 15 (Intercept) 11.2240 0.1824 *** (p < 0.001) 0.9995 0.0333 13
2139 2017-11-02 09:13:36 yes 1.0 29.445250 lm(d13C ~ true_d13C) 15 (Intercept) 11.2577 0.2570 *** (p < 0.001) 0.9991 0.0661 13
2032 2017-10-26 00:05:49 yes 1.5 5.237014 lm(d13C ~ true_d13C) 15 (Intercept) 11.2381 0.3698 *** (p < 0.001) 0.9981 0.1368 13
2036 2017-10-26 06:25:48 yes 3.0 10.256694 lm(d13C ~ true_d13C) 15 (Intercept) 10.8792 0.3646 *** (p < 0.001) 0.9981 0.1330 13
2045 2017-10-26 20:40:08 yes 0.5 1.786624 lm(d13C ~ true_d13C) 15 (Intercept) 10.8889 0.6412 *** (p < 0.001) 0.9943 0.4113 13
2056 2017-10-27 13:34:08 yes 1.5 14.721991 lm(d13C ~ true_d13C) 15 (Intercept) 11.0069 0.3724 *** (p < 0.001) 0.9981 0.1387 13
2075 2017-10-28 14:27:22 yes 1.5 6.011649 lm(d13C ~ true_d13C) 15 (Intercept) 11.2325 0.3605 *** (p < 0.001) 0.9982 0.1300 13
2097 2017-10-30 01:23:28 yes 3.0 16.704496 lm(d13C ~ true_d13C) 15 (Intercept) 11.3383 0.2171 *** (p < 0.001) 0.9993 0.0472 13
2101 2017-10-30 07:43:23 yes 3.0 19.140429 lm(d13C ~ true_d13C) 15 (Intercept) 11.0189 0.1998 *** (p < 0.001) 0.9994 0.0399 13
2136 2017-11-01 22:38:25 yes 0.5 9.705883 lm(d13C ~ true_d13C) 15 (Intercept) 10.9667 0.1148 *** (p < 0.001) 0.9998 0.0132 13
2140 2017-11-02 10:48:30 yes 2.0 58.566406 lm(d13C ~ true_d13C) 15 (Intercept) 10.7605 0.1660 *** (p < 0.001) 0.9996 0.0276 13
2033 2017-10-26 01:40:55 yes 3.0 9.967239 lm(d13C ~ true_d13C) 15 (Intercept) 11.0859 0.4703 *** (p < 0.001) 0.9969 0.2212 13
2046 2017-10-26 22:15:02 yes 1.5 7.189101 lm(d13C ~ true_d13C) 15 (Intercept) 11.1801 0.4632 *** (p < 0.001) 0.9970 0.2147 13
2060 2017-10-27 17:54:33 no 1.0 34.014913 lm(d13C ~ true_d13C) 15 (Intercept) 11.4129 0.8419 *** (p < 0.001) 0.9904 0.7091 13
2086 2017-10-29 07:58:06 yes 1.5 7.014310 lm(d13C ~ true_d13C) 15 (Intercept) 11.1096 0.1856 *** (p < 0.001) 0.9995 0.0345 13
2102 2017-10-30 09:18:16 yes 1.0 45.260003 lm(d13C ~ true_d13C) 15 (Intercept) 10.7432 0.4240 *** (p < 0.001) 0.9974 0.1798 13
2113 2017-10-31 02:33:47 yes 0.5 1.426427 lm(d13C ~ true_d13C) 15 (Intercept) 11.5001 1.0634 *** (p < 0.001) 0.9846 1.1312 13
2117 2017-10-31 08:53:43 yes 3.0 87.052984 lm(d13C ~ true_d13C) 15 (Intercept) 9.7739 1.1193 *** (p < 0.001) 0.9815 1.2534 13
2137 2017-11-02 00:13:18 yes 1.0 24.517030 lm(d13C ~ true_d13C) 15 (Intercept) 11.3123 0.1869 *** (p < 0.001) 0.9995 0.0350 13
2034 2017-10-26 03:15:48 yes 0.5 1.316609 lm(d13C ~ true_d13C) 15 true_d13C 1.0145 0.0311 *** (p < 0.001) 0.9870 0.9521 13
2041 2017-10-26 14:50:38 no 3.0 10.728124 lm(d13C ~ true_d13C) 15 true_d13C 1.0085 0.0958 *** (p < 0.001) 0.8869 9.0195 13
2047 2017-10-26 23:50:04 yes 3.0 13.834178 lm(d13C ~ true_d13C) 15 true_d13C 1.0137 0.0113 *** (p < 0.001) 0.9983 0.1258 13
2093 2017-10-29 18:32:04 yes 0.5 2.032492 lm(d13C ~ true_d13C) 15 true_d13C 1.0366 0.0213 *** (p < 0.001) 0.9941 0.4436 13
2099 2017-10-30 04:33:19 yes 0.5 2.497390 lm(d13C ~ true_d13C) 15 true_d13C 0.9830 0.0189 *** (p < 0.001) 0.9949 0.3495 13
2114 2017-10-31 04:08:42 yes 1.5 5.675072 lm(d13C ~ true_d13C) 15 true_d13C 1.0121 0.0107 *** (p < 0.001) 0.9984 0.1129 13
2035 2017-10-26 04:50:43 yes 1.5 5.356130 lm(d13C ~ true_d13C) 15 true_d13C 0.9995 0.0137 *** (p < 0.001) 0.9974 0.1837 13
2096 2017-10-29 23:48:23 yes 1.5 8.855793 lm(d13C ~ true_d13C) 15 true_d13C 1.0110 0.0066 *** (p < 0.001) 0.9994 0.0433 13
2100 2017-10-30 06:08:16 yes 1.5 9.864856 lm(d13C ~ true_d13C) 15 true_d13C 1.0066 0.0052 *** (p < 0.001) 0.9996 0.0262 13
2115 2017-10-31 05:43:46 yes 3.0 10.838746 lm(d13C ~ true_d13C) 15 true_d13C 1.0082 0.0058 *** (p < 0.001) 0.9995 0.0333 13
2139 2017-11-02 09:13:36 yes 1.0 29.445250 lm(d13C ~ true_d13C) 15 true_d13C 1.0149 0.0082 *** (p < 0.001) 0.9991 0.0661 13
2032 2017-10-26 00:05:49 yes 1.5 5.237014 lm(d13C ~ true_d13C) 15 true_d13C 1.0118 0.0118 *** (p < 0.001) 0.9981 0.1368 13
2036 2017-10-26 06:25:48 yes 3.0 10.256694 lm(d13C ~ true_d13C) 15 true_d13C 1.0001 0.0116 *** (p < 0.001) 0.9981 0.1330 13
2045 2017-10-26 20:40:08 yes 0.5 1.786624 lm(d13C ~ true_d13C) 15 true_d13C 1.0076 0.0205 *** (p < 0.001) 0.9943 0.4113 13
2056 2017-10-27 13:34:08 yes 1.5 14.721991 lm(d13C ~ true_d13C) 15 true_d13C 1.0071 0.0119 *** (p < 0.001) 0.9981 0.1387 13
2075 2017-10-28 14:27:22 yes 1.5 6.011649 lm(d13C ~ true_d13C) 15 true_d13C 1.0133 0.0115 *** (p < 0.001) 0.9982 0.1300 13
2097 2017-10-30 01:23:28 yes 3.0 16.704496 lm(d13C ~ true_d13C) 15 true_d13C 1.0123 0.0069 *** (p < 0.001) 0.9993 0.0472 13
2101 2017-10-30 07:43:23 yes 3.0 19.140429 lm(d13C ~ true_d13C) 15 true_d13C 1.0020 0.0064 *** (p < 0.001) 0.9994 0.0399 13
2136 2017-11-01 22:38:25 yes 0.5 9.705883 lm(d13C ~ true_d13C) 15 true_d13C 1.0030 0.0037 *** (p < 0.001) 0.9998 0.0132 13
2140 2017-11-02 10:48:30 yes 2.0 58.566406 lm(d13C ~ true_d13C) 15 true_d13C 0.9974 0.0053 *** (p < 0.001) 0.9996 0.0276 13
2033 2017-10-26 01:40:55 yes 3.0 9.967239 lm(d13C ~ true_d13C) 15 true_d13C 1.0076 0.0150 *** (p < 0.001) 0.9969 0.2212 13
2046 2017-10-26 22:15:02 yes 1.5 7.189101 lm(d13C ~ true_d13C) 15 true_d13C 1.0137 0.0148 *** (p < 0.001) 0.9970 0.2147 13
2060 2017-10-27 17:54:33 no 1.0 34.014913 lm(d13C ~ true_d13C) 15 true_d13C 1.0217 0.0269 *** (p < 0.001) 0.9904 0.7091 13
2086 2017-10-29 07:58:06 yes 1.5 7.014310 lm(d13C ~ true_d13C) 15 true_d13C 1.0049 0.0059 *** (p < 0.001) 0.9995 0.0345 13
2102 2017-10-30 09:18:16 yes 1.0 45.260003 lm(d13C ~ true_d13C) 15 true_d13C 0.9978 0.0135 *** (p < 0.001) 0.9974 0.1798 13
2113 2017-10-31 02:33:47 yes 0.5 1.426427 lm(d13C ~ true_d13C) 15 true_d13C 1.0174 0.0339 *** (p < 0.001) 0.9846 1.1312 13
2117 2017-10-31 08:53:43 yes 3.0 87.052984 lm(d13C ~ true_d13C) 15 true_d13C 0.9734 0.0357 *** (p < 0.001) 0.9815 1.2534 13
2137 2017-11-02 00:13:18 yes 1.0 24.517030 lm(d13C ~ true_d13C) 15 true_d13C 1.0120 0.0060 *** (p < 0.001) 0.9995 0.0350 13

Global Calibration with all standards

Generate calibrations (*)

# define a global calibration across all standards
global_calibs <- 
  peak_table_w_stds %>%
  # remove (most) problematic peaks to speed up calibration calculations
  # note: could additionally remove unidentified peaks if they are of no interest
  iso_remove_problematic_peak_mappings(remove_unidentified = FALSE) %>% 
  # prepare for calibration (no grouping to go across all analyses)
  iso_prepare_for_calibration() %>% 
  # run different calibrations
  iso_generate_calibration(
    model = c(
      linear = lm(d13C ~ true_d13C),
      with_area = lm(d13C ~ true_d13C + area44),
      with_area_cross = lm(d13C ~ true_d13C * area44)
    ),
    # specify which peaks to include in the calibration, here:
    # - all std_peaks (this filter should always be included!)
    # - standard peaks between 5 and 100 Vs
    # - only analyses with seed oxidation (same as all the samples)
    use_in_calib = is_std_peak & area44 > iso_double_with_units(5, "Vs") & 
      area44 < iso_double_with_units(100, "Vs") & seed_oxidation == "yes"
  ) %>% 
  iso_remove_problematic_calibrations()
#> Info: removing 7 of 628 peak table entries because of problematic peak identifications (missing or ambiguous)
#> Info: preparing data for calibration by nesting the entire dataset
#> Info: generating calibration based on 3 models (linear = 'lm(d13C ~ true_d13C)', with_area = 'lm(d13C ~ true_d13C + area44)', with_area_cross = 'lm(d13C ~ true_d13C * area44)') for 1 data group(s) with standards filter 'is_std_peak & area44 > iso_double_with_units(5, "Vs") & area44 < 
#>     iso_double_with_units(100, "Vs") & seed_oxidation == "yes"'. Storing residuals in new column 'resid'. Storing calibration info in new column 'in_calib'.
#> Info: there are no problematic calibrations

Coefficients

calib calib_points term estimate SE signif fit_R2 fit_RMSD residual_df
linear 311 (Intercept) 11.0412 0.1113 *** (p < 0.001) 0.9962 5.9677 309
with_area 311 (Intercept) 11.0931 0.1028 *** (p < 0.001) 0.9967 5.0482 308
with_area_cross 311 (Intercept) 11.3321 0.1414 *** (p < 0.001) 0.9968 4.9521 307
with_area 311 area44 -0.0027 0.0004 *** (p < 0.001) 0.9967 5.0482 308
with_area_cross 311 area44 -0.0149 0.0050 ** (p < 0.01) 0.9968 4.9521 307
linear 311 true_d13C 1.0057 0.0036 *** (p < 0.001) 0.9962 5.9677 309
with_area 311 true_d13C 1.0057 0.0033 *** (p < 0.001) 0.9967 5.0482 308
with_area_cross 311 true_d13C 1.0133 0.0045 *** (p < 0.001) 0.9968 4.9521 307
with_area_cross 311 true_d13C:area44 -0.0004 0.0002 * (p < 0.05) 0.9968 4.9521 307

Apply global calibration (*)

calib calib_points term units min max
linear 311 area44 Vs 5.03 91.46
linear 311 true_d13C_pred permil -34.09 -25.94

Evaluation

Data

Summary

sample compound n area44 mean [Vs] area44 sd true_d13C_pred mean [permil] true_d13C_pred sd
CTNA nC22 1 10.53 NA -28.46 NA
CTNA nC24 1 14.63 NA -28.22 NA
CTNA nC25 1 23.56 NA -27.09 NA
CTNA nC26 1 67.20 NA -28.29 NA
CTNA nC27 1 46.40 NA -27.78 NA
CTNA nC28 1 22.36 NA -29.04 NA
CTNA nC29 1 34.20 NA -29.42 NA
CTNA nC30 1 18.60 NA -30.80 NA
CTNA nC31 1 10.82 NA -33.12 NA
Niwot_Tundra1 nC27 1 6.04 NA -31.82 NA
Niwot_Tundra1 nC29 1 19.08 NA -31.64 NA
Niwot_Tundra1 nC31 1 11.63 NA -31.78 NA
Niwot_Tundra2 nC27 1 7.44 NA -31.73 NA
Niwot_Tundra2 nC29 1 24.67 NA -31.57 NA
Niwot_Tundra2 nC31 1 11.65 NA -31.84 NA
SJER nC27 1 7.41 NA -36.49 NA
SJER nC29 1 17.53 NA -36.48 NA
SJER nC31 1 35.01 NA -38.30 NA

Final

Final data processing and visualization usually depends on the type of data and the metadata available for contextualization (e.g. core depth, source organism, age, etc.). The relevant metadata can be added easily with iso_add_file_info() during the initial data load / file info procesing. Alternatively, just call iso_add_file_info() again at this later point or use dplyr’s left_join directly.