A synthetic dataset containing multi-detector Size Exclusion Chromatography (SEC) data for 12 polymer samples with realistic signal characteristics.
Format
A tibble with 24,012 rows and 11 columns:
- sample_id
Character. Unique sample identifier (e.g., "PS-10K", "PMMA-Low")
- sample_type
Character. Either "standard" (narrow dispersity calibrants) or "sample"
- polymer_type
Character. Polymer type: "polystyrene", "pmma", "peg", or "copolymer"
- elution_time
Numeric. Elution time in minutes (5-25 min range)
- ri_signal
Numeric. Refractive index detector signal (reference detector)
- uv_signal
Numeric. UV detector signal at 280 nm
- mals_signal
Numeric. Multi-angle light scattering detector signal
- known_mw
Numeric. True weight-average molecular weight (Mw) in g/mol
- known_dispersity
Numeric. True dispersity (Mw/Mn)
- dn_dc
Numeric. Refractive index increment in mL/g
- extinction_coef
Numeric. UV extinction coefficient in mL/(mg*cm)
Details
The dataset includes realistic features commonly encountered in SEC analysis:
Sample Composition:
5 polystyrene standards (1K to 500K MW, narrow dispersity ~1.01-1.05)
3 PMMA samples (25K to 200K MW, broader dispersity 1.8-2.2)
2 PEG samples (5K and 20K MW, low dispersity ~1.1-1.15)
2 copolymer samples (40K and 80K MW, intermediate dispersity 1.5-1.7)
Multi-Detector Features:
Inter-detector volume delays: UV is 0.05 mL before RI, MALS is 0.15 mL after RI
Different detector responses based on polymer chemistry
PEG has no UV response (extinction_coef = 0)
MALS signal scales with MW for absolute MW determination
Signal Characteristics:
Gaussian noise appropriate for each detector
Slight baseline drift
Log-normal peak shapes with tailing
Typical SEC Workflow:
1
. Convert to measure format with step_measure_input_long
2. Correct inter-detector delays with step_sec_detector_delay
3. Apply baseline correction with step_sec_baseline
4. Process detectors with step_sec_ri or step_sec_uv
5. Convert to concentration with step_sec_concentration
6. Calculate MW averages with step_sec_mw_averages
Examples
if (FALSE) { # \dontrun{
library(recipes)
library(measure)
library(measure.sec)
# Load the dataset
data(sec_triple_detect)
# View sample distribution
table(sec_triple_detect$polymer_type)
# Plot RI chromatograms for polystyrene standards
library(ggplot2)
sec_triple_detect |>
dplyr::filter(polymer_type == "polystyrene") |>
ggplot(aes(elution_time, ri_signal, color = sample_id)) +
geom_line() +
labs(x = "Elution Time (min)", y = "RI Signal", color = "Sample")
# Process with SEC recipe
rec <- recipe(~ ., data = sec_triple_detect) |>
step_measure_input_long(ri_signal, location = vars(elution_time), col_name = "ri") |>
step_sec_baseline(measures = "ri") |>
step_sec_ri(dn_dc_column = "dn_dc") |>
prep()
} # }