8  Dilution Recovery, Spike Recovery, and Hook Effect

This chapter covers three related but distinct analyses: dilution recovery, spike recovery, and high-dose hook effect. Each uses a different expected-value calculation and requires its own acceptance limits.

Path Main input Main result
Dilution recovery Sample ID, result, dilution factor, optional assignment Target, dilution-corrected concentration, per-sample and across-sample recovery
Spike recovery Spiked and solvent-control results, theoretical added concentration Observed increment and recovery
High-dose hook effect Known concentration, raw response, ULoQ, optional series Concentration summaries, hook-effect boundary, or lower bound when no hook is observed
ImportantScope of Use

Recovery and hook-effect calculations do not by themselves establish an extended measuring interval. Interpret them together with precision, LoQ, specimen commutability, carryover, and prespecified acceptance limits. Use raw instrument response for hook-effect analysis; reported concentrations may already be truncated.

Code
library(ivdtools)
library(readr)

8.1 Main Functions

Function Purpose Return value
dilution_recovery() Calculate dilution targets, corrected concentrations, and recovery dilution_recovery object
spike_concentration() Calculate theoretical post-spike concentration by mass balance Data frame
spike_recovery() Calculate recovery relative to solvent control spike_recovery object
hook_effect() Summarize high-concentration response and identify hook boundaries hook_effect object

8.1.1 Dilution Recovery

Code
dilution_recovery(
  data, sample, result, dilution_factor, assigned = NULL,
  diluent_value = 0, conf.level = 0.95
)

dilution_factor is 1 for undiluted material and 2 for a 1:2 dilution. If assigned is omitted, the mean of each sample’s undiluted results is used as the original concentration. The target after dilution is

\[C_{target}=\frac{C_{assigned}}{d},\]

and the corrected concentration is \(dC_{measured}\) when the diluent contains no analyte. Report the dilution-level and across-sample recovery, not only a pooled mean.

8.1.2 Theoretical Spike Concentration

Code
spike_concentration(
  sample_concentration, sample_volume,
  stock_concentration, spike_volume
)

By mass balance,

\[C_{final}=\frac{C_sV_s+C_{stock}V_{spike}}{V_s+V_{spike}}.\]

8.1.3 Spike Recovery

Code
spike_recovery(
  data, sample, result, condition,
  analyte_level, solvent_level, added_concentration = NULL,
  sample_volume = NULL, stock_concentration = NULL, spike_volume = NULL,
  conf.level = 0.95
)

The observed increment is the spiked result minus the solvent-control result. Recovery is the observed increment divided by the theoretical added concentration. Supply added_concentration directly or let the function calculate it from volumes and stock concentration.

8.1.4 High-Dose Hook Effect

Code
hook_effect(
  data, concentration, response, series = NULL, uloq,
  uloq_response = NULL, conf.level = 0.95
)

The input must contain known concentrations and raw responses. series identifies independent hook-effect series. If uloq_response is omitted, every series must contain a record at concentration == uloq. The function summarizes response at each concentration, compares it with the ULoQ reference, and reports an observed hook boundary or the lower bound supported when no hook is observed.

8.2 Analysis Examples

8.2.1 Dilution Recovery

Code
dilution <- as.data.frame(read_csv(
  "./data/008-稀释回收与HOOK/std-ep34-table1-single-sample.csv",
  show_col_types = FALSE
))
dilution_fit <- dilution_recovery(
  dilution, sample = "sample", result = "observed",
  dilution_factor = "dilution_factor", assigned = NULL
)
print(dilution_fit)

Dilution recovery
  Samples: 1
  Dilution factors:  1,  2,  4, 10, 20
  Confidence level: 95.0%

  Dilution factor: 1
    Specimen content   : 100
    Samples            : 1
    Mean recovery      : 100
    SD recovery        : NA
    SE recovery        : NA
    Degrees of freedom : NA
    CI lower           : NA
    CI upper           : NA

  Dilution factor: 2
    Specimen content   : 50
    Samples            : 1
    Mean recovery      : 95.583142
    SD recovery        : NA
    SE recovery        : NA
    Degrees of freedom : NA
    CI lower           : NA
    CI upper           : NA

  Dilution factor: 4
    Specimen content   : 25
    Samples            : 1
    Mean recovery      : 101.46518
    SD recovery        : NA
    SE recovery        : NA
    Degrees of freedom : NA
    CI lower           : NA
    CI upper           : NA

  Dilution factor: 10
    Specimen content   : 10
    Samples            : 1
    Mean recovery      : 105.81278
    SD recovery        : NA
    SE recovery        : NA
    Degrees of freedom : NA
    CI lower           : NA
    CI upper           : NA

  Dilution factor: 20
    Specimen content   : 5
    Samples            : 1
    Mean recovery      : 99.312696
    SD recovery        : NA
    SE recovery        : NA
    Degrees of freedom : NA
    CI lower           : NA
    CI upper           : NA

  Sample results

  Sample: EP34-Table1 | Dilution factor: 1
    Replicates              : 3
    Mean result             : 625.63333
    SD result               : 3.1214313
    CV result               : 0.49892343
    Specimen content        : 100
    Assigned value          : 625.63333
    Target concentration    : 625.63333
    Corrected concentration : 625.63333
    Recovery                : 100

  Sample: EP34-Table1 | Dilution factor: 2
    Replicates              : 3
    Mean result             : 299
    SD result               : 6.2793312
    CV result               : 2.1001108
    Specimen content        : 50
    Assigned value          : 625.63333
    Target concentration    : 312.81667
    Corrected concentration : 598
    Recovery                : 95.583142

  Sample: EP34-Table1 | Dilution factor: 4
    Replicates              : 3
    Mean result             : 158.7
    SD result               : 2.8213472
    CV result               : 1.7777865
    Specimen content        : 25
    Assigned value          : 625.63333
    Target concentration    : 156.40833
    Corrected concentration : 634.8
    Recovery                : 101.46518

  Sample: EP34-Table1 | Dilution factor: 10
    Replicates              : 3
    Mean result             : 66.2
    SD result               : 3.6345564
    CV result               : 5.4902664
    Specimen content        : 10
    Assigned value          : 625.63333
    Target concentration    : 62.563333
    Corrected concentration : 662
    Recovery                : 105.81278

  Sample: EP34-Table1 | Dilution factor: 20
    Replicates              : 3
    Mean result             : 31.066667
    SD result               : 2.7934447
    CV result               : 8.9917748
    Specimen content        : 5
    Assigned value          : 625.63333
    Target concentration    : 31.281667
    Corrected concentration : 621.33333
    Recovery                : 99.312696

For multiple original samples, retain the sample identifier and use std-ep34-table2-multiple-samples.csv or the Appendix C files to assess both within-sample and across-sample recovery.

8.2.2 Spike Recovery

Code
spike <- as.data.frame(read_csv(
  "./data/008-稀释回收与HOOK/std-ep34-table3-spike-recovery.csv",
  show_col_types = FALSE
))
spike_fit <- spike_recovery(
  spike, sample = "sample", result = "result", condition = "condition",
  analyte_level = "analyte", solvent_level = "solvent",
  added_concentration = 3.64
)
print(spike_fit)

Spike recovery
  Samples: 3
  Confidence level: 95.0%

  Samples            : 3
  Mean recovery      : 90.659341
  SD of recovery     : 2.7472527
  SE of recovery     : 1.5861271
  Degrees of freedom : 2
  CI lower           : 83.834787
  CI upper           : 97.483895

  Sample results

  Sample: 1
    Analyte replicates  : 2
    Analyte mean        : 13.1
    Analyte SD          : 0.28284271
    Solvent replicates  : 2
    Solvent mean        : 9.8
    Solvent SD          : 0.14142136
    Observed increase   : 3.3
    Added concentration : 3.64
    Recovery            : 90.659341

  Sample: 2
    Analyte replicates  : 2
    Analyte mean        : 12.7
    Analyte SD          : 0.14142136
    Solvent replicates  : 2
    Solvent mean        : 9.5
    Solvent SD          : 0
    Observed increase   : 3.2
    Added concentration : 3.64
    Recovery            : 87.912088

  Sample: 3
    Analyte replicates  : 2
    Analyte mean        : 12.3
    Analyte SD          : 0.14142136
    Solvent replicates  : 2
    Solvent mean        : 8.9
    Solvent SD          : 0.28284271
    Observed increase   : 3.4
    Added concentration : 3.64
    Recovery            : 93.406593

8.2.3 Hook Effect

Code
hook_data <- expand.grid(
  concentration = c(1, 2, 3, 4, 5, 6, 7, 8),
  replicate = 1:3,
  KEEP.OUT.ATTRS = FALSE
)
hook_mean <- c(100000, 150000, 180000, 178000, 183000, 160000, 110000, 80000)
hook_data$response <-
  rep(hook_mean, times = 3) + rep(c(-300, 0, 300), each = 8)
hook_fit <- hook_effect(
  hook_data, concentration = "concentration", response = "response",
  uloq = 1.5, uloq_response = 130000
)
print(hook_fit)

High-dose hook-effect experiment
  ULoQ concentration: 1.5
  ULoQ response: supplied
  Series: 1

  Series: all
    ULoQ concentration           : 1.5
    ULoQ response                : 130000
    Hook concentration           : 6
    Hook response                : 160000
    First in-range concentration : 7
    First in-range response      : 110000
    Highest tested concentration : 8
    Hook lower bound             : NA

  Concentration-level results

  Series: all | Concentration: 1
    Replicates    : 3
    Mean response : 1e+05
    SD response   : 300
    CV response   : 0.3
    SE response   : 173.20508
    CI lower      : 99254.759
    CI upper      : 100745.24

  Series: all | Concentration: 2
    Replicates    : 3
    Mean response : 150000
    SD response   : 300
    CV response   : 0.2
    SE response   : 173.20508
    CI lower      : 149254.76
    CI upper      : 150745.24

  Series: all | Concentration: 3
    Replicates    : 3
    Mean response : 180000
    SD response   : 300
    CV response   : 0.16666667
    SE response   : 173.20508
    CI lower      : 179254.76
    CI upper      : 180745.24

  Series: all | Concentration: 4
    Replicates    : 3
    Mean response : 178000
    SD response   : 300
    CV response   : 0.16853933
    SE response   : 173.20508
    CI lower      : 177254.76
    CI upper      : 178745.24

  Series: all | Concentration: 5
    Replicates    : 3
    Mean response : 183000
    SD response   : 300
    CV response   : 0.16393443
    SE response   : 173.20508
    CI lower      : 182254.76
    CI upper      : 183745.24

  Series: all | Concentration: 6
    Replicates    : 3
    Mean response : 160000
    SD response   : 300
    CV response   : 0.1875
    SE response   : 173.20508
    CI lower      : 159254.76
    CI upper      : 160745.24

  Series: all | Concentration: 7
    Replicates    : 3
    Mean response : 110000
    SD response   : 300
    CV response   : 0.27272727
    SE response   : 173.20508
    CI lower      : 109254.76
    CI upper      : 110745.24

  Series: all | Concentration: 8
    Replicates    : 3
    Mean response : 80000
    SD response   : 300
    CV response   : 0.375
    SE response   : 173.20508
    CI lower      : 79254.759
    CI upper      : 80745.241
Code
plot(hook_fit)

8.3 Interpretation

Recovery near 100% does not prove accuracy across the entire interval; bias can vary with concentration and matrix. A lack of observed hook effect means only that the tested concentrations and responses support a lower bound. The EP34 Tables 1–8 and Appendix C files supplied with the project can be used for reproducible cross-checks, but the standard’s final measuring-interval decision still requires all relevant evidence and prespecified limits.

8.4 Complete Standard Cases

8.4.1 CLSI EP34 Table 1: Single-Sample Diluent Suitability

EP34 Table 1 measures one neat sample and 1/2, 1/4, 1/10, and 1/20 dilutions three times each. Because no independent assignment is provided, dilution_recovery() uses the mean of the neat results as the original-sample concentration.

Code
ep34_table1 <- read_csv(
  "./data/008-稀释回收与HOOK/std-ep34-table1-single-sample.csv",
  show_col_types = FALSE
)

head(ep34_table1, 6)
# A tibble: 6 × 6
  sample      dilution fraction replicate observed dilution_factor
  <chr>       <chr>       <dbl>     <dbl>    <dbl>           <dbl>
1 EP34-Table1 neat         1            1    624.                1
2 EP34-Table1 1/2          0.5          1    293.                2
3 EP34-Table1 1/4          0.25         1    156.                4
4 EP34-Table1 1/10         0.1          1     63.1              10
5 EP34-Table1 1/20         0.05         1     34.1              20
6 EP34-Table1 neat         1            2    629.                1
Code
ep34_table1_result <- dilution_recovery(
  ep34_table1,
  sample = "sample",
  result = "observed",
  dilution_factor = "dilution_factor",
  conf.level = 0.95
)
ep34_table1_result

Dilution recovery
  Samples: 1
  Dilution factors:  1,  2,  4, 10, 20
  Confidence level: 95.0%

  Dilution factor: 1
    Specimen content   : 100
    Samples            : 1
    Mean recovery      : 100
    SD recovery        : NA
    SE recovery        : NA
    Degrees of freedom : NA
    CI lower           : NA
    CI upper           : NA

  Dilution factor: 2
    Specimen content   : 50
    Samples            : 1
    Mean recovery      : 95.583142
    SD recovery        : NA
    SE recovery        : NA
    Degrees of freedom : NA
    CI lower           : NA
    CI upper           : NA

  Dilution factor: 4
    Specimen content   : 25
    Samples            : 1
    Mean recovery      : 101.46518
    SD recovery        : NA
    SE recovery        : NA
    Degrees of freedom : NA
    CI lower           : NA
    CI upper           : NA

  Dilution factor: 10
    Specimen content   : 10
    Samples            : 1
    Mean recovery      : 105.81278
    SD recovery        : NA
    SE recovery        : NA
    Degrees of freedom : NA
    CI lower           : NA
    CI upper           : NA

  Dilution factor: 20
    Specimen content   : 5
    Samples            : 1
    Mean recovery      : 99.312696
    SD recovery        : NA
    SE recovery        : NA
    Degrees of freedom : NA
    CI lower           : NA
    CI upper           : NA

  Sample results

  Sample: EP34-Table1 | Dilution factor: 1
    Replicates              : 3
    Mean result             : 625.63333
    SD result               : 3.1214313
    CV result               : 0.49892343
    Specimen content        : 100
    Assigned value          : 625.63333
    Target concentration    : 625.63333
    Corrected concentration : 625.63333
    Recovery                : 100

  Sample: EP34-Table1 | Dilution factor: 2
    Replicates              : 3
    Mean result             : 299
    SD result               : 6.2793312
    CV result               : 2.1001108
    Specimen content        : 50
    Assigned value          : 625.63333
    Target concentration    : 312.81667
    Corrected concentration : 598
    Recovery                : 95.583142

  Sample: EP34-Table1 | Dilution factor: 4
    Replicates              : 3
    Mean result             : 158.7
    SD result               : 2.8213472
    CV result               : 1.7777865
    Specimen content        : 25
    Assigned value          : 625.63333
    Target concentration    : 156.40833
    Corrected concentration : 634.8
    Recovery                : 101.46518

  Sample: EP34-Table1 | Dilution factor: 10
    Replicates              : 3
    Mean result             : 66.2
    SD result               : 3.6345564
    CV result               : 5.4902664
    Specimen content        : 10
    Assigned value          : 625.63333
    Target concentration    : 62.563333
    Corrected concentration : 662
    Recovery                : 105.81278

  Sample: EP34-Table1 | Dilution factor: 20
    Replicates              : 3
    Mean result             : 31.066667
    SD result               : 2.7934447
    CV result               : 8.9917748
    Specimen content        : 5
    Assigned value          : 625.63333
    Target concentration    : 31.281667
    Corrected concentration : 621.33333
    Recovery                : 99.312696

The SD, SE, and confidence intervals printed in the summary are calculated from recovery values across different samples at a given dilution, rather than from the three replicate measurements. They are therefore NA for this single-sample case.

Code
plot(ep34_table1_result, type = "recovery")

EP34 Table 1: ivdtools compared with the standard text
Standard location Statistic Standard ivdtools
neat recovery 100.00 100.000
1/2 recovery 95.59 95.583
1/4 recovery 101.47 101.465
1/10 recovery 105.75 105.813
1/20 recovery 99.36 99.313

The software uses unrounded means from the three replicates, whereas the standard table first displays observed means and targets to one decimal place before calculating recovery. The resulting difference is no more than 0.07 percentage points. Under the example’s prespecified 90%–110% range, all five point estimates are within the limits; the range is not built into the function.

8.4.2 CLSI EP34 Table 2: Multiple Original Samples

Table 2 gives observed means for five original samples at the same five dilution levels. The source does not publish all replicate results behind those means, so the input remains at summary granularity, with one row per sample-by-dilution level.

Code
ep34_table2 <- read_csv(
  "./data/008-稀释回收与HOOK/std-ep34-table2-multiple-samples.csv",
  show_col_types = FALSE
)

head(ep34_table2, 6)
# A tibble: 6 × 6
  sample dilution fraction observed_mean assigned dilution_factor
   <dbl> <chr>       <dbl>         <dbl>    <dbl>           <dbl>
1      1 neat         1            506        506               1
2      1 1/2          0.5          264.       506               2
3      1 1/4          0.25         120.       506               4
4      1 1/10         0.1           46        506              10
5      1 1/20         0.05          27.2      506              20
6      2 neat         1            598        598               1
Code
ep34_table2_result <- dilution_recovery(
  ep34_table2,
  sample = "sample",
  result = "observed_mean",
  dilution_factor = "dilution_factor",
  assigned = "assigned",
  conf.level = 0.95
)
ep34_table2_result

Dilution recovery
  Samples: 5
  Dilution factors:  1,  2,  4, 10, 20
  Confidence level: 95.0%

  Dilution factor: 1
    Specimen content   : 100
    Samples            : 5
    Mean recovery      : 100
    SD recovery        : 0
    SE recovery        : 0
    Degrees of freedom : 4
    CI lower           : 100
    CI upper           : 100

  Dilution factor: 2
    Specimen content   : 50
    Samples            : 5
    Mean recovery      : 100.53079
    SD recovery        : 3.5222063
    SE recovery        : 1.5751786
    Degrees of freedom : 4
    CI lower           : 96.157389
    CI upper           : 104.90418

  Dilution factor: 4
    Specimen content   : 25
    Samples            : 5
    Mean recovery      : 102.74826
    SD recovery        : 5.3015808
    SE recovery        : 2.370939
    Degrees of freedom : 4
    CI lower           : 96.165478
    CI upper           : 109.33104

  Dilution factor: 10
    Specimen content   : 10
    Samples            : 5
    Mean recovery      : 101.81449
    SD recovery        : 8.2466472
    SE recovery        : 3.6880127
    Degrees of freedom : 4
    CI lower           : 91.574928
    CI upper           : 112.05406

  Dilution factor: 20
    Specimen content   : 5
    Samples            : 5
    Mean recovery      : 99.785763
    SD recovery        : 8.8098638
    SE recovery        : 3.9398909
    Degrees of freedom : 4
    CI lower           : 88.846872
    CI upper           : 110.72465

  Sample results

  Sample: 1 | Dilution factor: 1
    Replicates              : 1
    Mean result             : 506
    SD result               : NA
    CV result               : NA
    Specimen content        : 100
    Assigned value          : 506
    Target concentration    : 506
    Corrected concentration : 506
    Recovery                : 100

  Sample: 2 | Dilution factor: 1
    Replicates              : 1
    Mean result             : 598
    SD result               : NA
    CV result               : NA
    Specimen content        : 100
    Assigned value          : 598
    Target concentration    : 598
    Corrected concentration : 598
    Recovery                : 100

  Sample: 3 | Dilution factor: 1
    Replicates              : 1
    Mean result             : 570.4
    SD result               : NA
    CV result               : NA
    Specimen content        : 100
    Assigned value          : 570.4
    Target concentration    : 570.4
    Corrected concentration : 570.4
    Recovery                : 100

  Sample: 4 | Dilution factor: 1
    Replicates              : 1
    Mean result             : 625.6
    SD result               : NA
    CV result               : NA
    Specimen content        : 100
    Assigned value          : 625.6
    Target concentration    : 625.6
    Corrected concentration : 625.6
    Recovery                : 100

  Sample: 5 | Dilution factor: 1
    Replicates              : 1
    Mean result             : 561.2
    SD result               : NA
    CV result               : NA
    Specimen content        : 100
    Assigned value          : 561.2
    Target concentration    : 561.2
    Corrected concentration : 561.2
    Recovery                : 100

  Sample: 1 | Dilution factor: 2
    Replicates              : 1
    Mean result             : 264.5
    SD result               : NA
    CV result               : NA
    Specimen content        : 50
    Assigned value          : 506
    Target concentration    : 253
    Corrected concentration : 529
    Recovery                : 104.54545

  Sample: 2 | Dilution factor: 2
    Replicates              : 1
    Mean result             : 294.4
    SD result               : NA
    CV result               : NA
    Specimen content        : 50
    Assigned value          : 598
    Target concentration    : 299
    Corrected concentration : 588.8
    Recovery                : 98.461538

  Sample: 3 | Dilution factor: 2
    Replicates              : 1
    Mean result             : 292.1
    SD result               : NA
    CV result               : NA
    Specimen content        : 50
    Assigned value          : 570.4
    Target concentration    : 285.2
    Corrected concentration : 584.2
    Recovery                : 102.41935

  Sample: 4 | Dilution factor: 2
    Replicates              : 1
    Mean result             : 299
    SD result               : NA
    CV result               : NA
    Specimen content        : 50
    Assigned value          : 625.6
    Target concentration    : 312.8
    Corrected concentration : 598
    Recovery                : 95.588235

  Sample: 5 | Dilution factor: 2
    Replicates              : 1
    Mean result             : 285.2
    SD result               : NA
    CV result               : NA
    Specimen content        : 50
    Assigned value          : 561.2
    Target concentration    : 280.6
    Corrected concentration : 570.4
    Recovery                : 101.63934

  Sample: 1 | Dilution factor: 4
    Replicates              : 1
    Mean result             : 119.6
    SD result               : NA
    CV result               : NA
    Specimen content        : 25
    Assigned value          : 506
    Target concentration    : 126.5
    Corrected concentration : 478.4
    Recovery                : 94.545455

  Sample: 2 | Dilution factor: 4
    Replicates              : 1
    Mean result             : 154.1
    SD result               : NA
    CV result               : NA
    Specimen content        : 25
    Assigned value          : 598
    Target concentration    : 149.5
    Corrected concentration : 616.4
    Recovery                : 103.07692

  Sample: 3 | Dilution factor: 4
    Replicates              : 1
    Mean result             : 151.8
    SD result               : NA
    CV result               : NA
    Specimen content        : 25
    Assigned value          : 570.4
    Target concentration    : 142.6
    Corrected concentration : 607.2
    Recovery                : 106.45161

  Sample: 4 | Dilution factor: 4
    Replicates              : 1
    Mean result             : 158.7
    SD result               : NA
    CV result               : NA
    Specimen content        : 25
    Assigned value          : 625.6
    Target concentration    : 156.4
    Corrected concentration : 634.8
    Recovery                : 101.47059

  Sample: 5 | Dilution factor: 4
    Replicates              : 1
    Mean result             : 151.8
    SD result               : NA
    CV result               : NA
    Specimen content        : 25
    Assigned value          : 561.2
    Target concentration    : 140.3
    Corrected concentration : 607.2
    Recovery                : 108.19672

  Sample: 1 | Dilution factor: 10
    Replicates              : 1
    Mean result             : 46
    SD result               : NA
    CV result               : NA
    Specimen content        : 10
    Assigned value          : 506
    Target concentration    : 50.6
    Corrected concentration : 460
    Recovery                : 90.909091

  Sample: 2 | Dilution factor: 10
    Replicates              : 1
    Mean result             : 65.3
    SD result               : NA
    CV result               : NA
    Specimen content        : 10
    Assigned value          : 598
    Target concentration    : 59.8
    Corrected concentration : 653
    Recovery                : 109.19732

  Sample: 3 | Dilution factor: 10
    Replicates              : 1
    Mean result             : 61.6
    SD result               : NA
    CV result               : NA
    Specimen content        : 10
    Assigned value          : 570.4
    Target concentration    : 57.04
    Corrected concentration : 616
    Recovery                : 107.99439

  Sample: 4 | Dilution factor: 10
    Replicates              : 1
    Mean result             : 66.2
    SD result               : NA
    CV result               : NA
    Specimen content        : 10
    Assigned value          : 625.6
    Target concentration    : 62.56
    Corrected concentration : 662
    Recovery                : 105.81841

  Sample: 5 | Dilution factor: 10
    Replicates              : 1
    Mean result             : 53.4
    SD result               : NA
    CV result               : NA
    Specimen content        : 10
    Assigned value          : 561.2
    Target concentration    : 56.12
    Corrected concentration : 534
    Recovery                : 95.153243

  Sample: 1 | Dilution factor: 20
    Replicates              : 1
    Mean result             : 27.2
    SD result               : NA
    CV result               : NA
    Specimen content        : 5
    Assigned value          : 506
    Target concentration    : 25.3
    Corrected concentration : 544
    Recovery                : 107.50988

  Sample: 2 | Dilution factor: 20
    Replicates              : 1
    Mean result             : 27
    SD result               : NA
    CV result               : NA
    Specimen content        : 5
    Assigned value          : 598
    Target concentration    : 29.9
    Corrected concentration : 540
    Recovery                : 90.301003

  Sample: 3 | Dilution factor: 20
    Replicates              : 1
    Mean result             : 31.3
    SD result               : NA
    CV result               : NA
    Specimen content        : 5
    Assigned value          : 570.4
    Target concentration    : 28.52
    Corrected concentration : 626
    Recovery                : 109.74755

  Sample: 4 | Dilution factor: 20
    Replicates              : 1
    Mean result             : 31.1
    SD result               : NA
    CV result               : NA
    Specimen content        : 5
    Assigned value          : 625.6
    Target concentration    : 31.28
    Corrected concentration : 622
    Recovery                : 99.424552

  Sample: 5 | Dilution factor: 20
    Replicates              : 1
    Mean result             : 25.8
    SD result               : NA
    CV result               : NA
    Specimen content        : 5
    Assigned value          : 561.2
    Target concentration    : 28.06
    Corrected concentration : 516
    Recovery                : 91.94583
Code
plot(ep34_table2_result, type = "summary")

EP34 Table 2: ivdtools compared with the standard text
Standard location Statistic Standard ivdtools
neat mean_recovery 100.00 100.000
neat lower_ci 100.00 100.000
neat upper_ci 100.00 100.000
1/2 mean_recovery 100.53 100.531
1/2 lower_ci 96.16 96.157
1/2 upper_ci 104.90 104.904
1/4 mean_recovery 102.75 102.748
1/4 lower_ci 96.17 96.165
1/4 upper_ci 109.33 109.331
1/10 mean_recovery 101.82 101.814
1/10 lower_ci 91.58 91.575
1/10 upper_ci 112.06 112.054
1/20 mean_recovery 99.76 99.786
1/20 lower_ci 88.76 88.847
1/20 upper_ci 110.77 110.725

The 95% CIs for the 1/2 and 1/4 dilutions lie within the example’s 90%–110% range; the intervals for 1/10 and 1/20 cross that range. Small differences from the source arise from display rounding of sample targets and intermediate statistics.

8.4.3 CLSI EP34 Table 3: Basic Spike Recovery

Table 3 adds 0.1 mL of a 40 mg/dL calcium spike solution, or an equal volume of pure solvent, to three serum samples; each condition is measured twice. The source displays the theoretical added concentration in the final mixture as 3.64 mg/dL and uses that displayed value for recovery.

Code
ep34_table3_added <- spike_concentration(
  sample_concentration = 0,
  sample_volume = 1,
  stock_concentration = 40,
  spike_volume = 0.1
)
ep34_table3_added

Spike concentration
  Sample concentration: 0
    Stock concentration : 40
    Added concentration : 3.6363636
    Final concentration : 3.6363636
    Sample volume       : 1
    Spike volume        : 0.1
    Total volume        : 1.1
    Spike fraction      : 0.090909091
Code
ep34_table3 <- read_csv(
  "./data/008-稀释回收与HOOK/std-ep34-table3-spike-recovery.csv",
  show_col_types = FALSE
)
head(ep34_table3, 6)
# A tibble: 6 × 4
  sample condition replicate result
   <dbl> <chr>         <dbl>  <dbl>
1      1 solvent           1    9.7
2      1 solvent           2    9.9
3      1 analyte           1   12.9
4      1 analyte           2   13.3
5      2 solvent           1    9.5
6      2 solvent           2    9.5
Code
ep34_table3_result <- spike_recovery(
  ep34_table3,
  sample = "sample",
  result = "result",
  condition = "condition",
  analyte_level = "analyte",
  solvent_level = "solvent",
  added_concentration = 3.64,
  conf.level = 0.95
)
ep34_table3_result

Spike recovery
  Samples: 3
  Confidence level: 95.0%

  Samples            : 3
  Mean recovery      : 90.659341
  SD of recovery     : 2.7472527
  SE of recovery     : 1.5861271
  Degrees of freedom : 2
  CI lower           : 83.834787
  CI upper           : 97.483895

  Sample results

  Sample: 1
    Analyte replicates  : 2
    Analyte mean        : 13.1
    Analyte SD          : 0.28284271
    Solvent replicates  : 2
    Solvent mean        : 9.8
    Solvent SD          : 0.14142136
    Observed increase   : 3.3
    Added concentration : 3.64
    Recovery            : 90.659341

  Sample: 2
    Analyte replicates  : 2
    Analyte mean        : 12.7
    Analyte SD          : 0.14142136
    Solvent replicates  : 2
    Solvent mean        : 9.5
    Solvent SD          : 0
    Observed increase   : 3.2
    Added concentration : 3.64
    Recovery            : 87.912088

  Sample: 3
    Analyte replicates  : 2
    Analyte mean        : 12.3
    Analyte SD          : 0.14142136
    Solvent replicates  : 2
    Solvent mean        : 8.9
    Solvent SD          : 0.28284271
    Observed increase   : 3.4
    Added concentration : 3.64
    Recovery            : 93.406593
Code
plot(ep34_table3_result)

EP34 Table 3: ivdtools compared with the standard text
Standard location Statistic Standard ivdtools
1 recovery 90.7 90.659
2 recovery 88.0 87.912
3 recovery 93.4 93.407
all mean_recovery 90.7 90.659

The recovery values for the three samples are approximately 90.7%, 87.9%, and 93.4%, with a across-sample mean of approximately 90.7%. The standard table displays one decimal place, and its intermediate rounding is not completely uniform; the verification tolerance is therefore 0.1 percentage points. Formal analyses should use unrounded theoretical additions and measurement results.

8.4.4 CLSI EP34 Table 4: Single-Sample Multiple-Concentration Spiking

Table 4 mixes 100 µL of a patient sample at 1,000 ng/mL with 900 µL of spike solutions at different concentrations. spike_concentration() recalculates the mass-balance concentration; because the source does not provide matched solvent-control replicates, this case does not call spike_recovery().

Code
ep34_table4 <- read_csv(
  "./data/008-稀释回收与HOOK/std-ep34-table4-single-spike.csv",
  show_col_types = FALSE
)
ep34_table4_balance <- spike_concentration(
  sample_concentration = 1000,
  sample_volume = 0.1,
  stock_concentration = ep34_table4$spike_concentration,
  spike_volume = 0.9
)
ep34_table4$computed_ivdtools <- ep34_table4_balance$final_concentration
ep34_table4$recovery_ivdtools <-
  100 * ep34_table4$measured_concentration / ep34_table4$computed_ivdtools
ep34_table4
# A tibble: 5 × 6
  spike_concentration computed_concentration measured_concentration
                <dbl>                  <dbl>                  <dbl>
1                   0                    100                     94
2                  10                    109                     99
3                 100                    190                    181
4                1000                   1000                    917
5               10000                   9100                   9024
# ℹ 3 more variables: standard_recovery <dbl>, computed_ivdtools <dbl>,
#   recovery_ivdtools <dbl>
EP34 Table 4: ivdtools compared with the standard text
Standard location Statistic Standard ivdtools
0 computed_concentration 100 100.000
0 recovery 94 94.000
10 computed_concentration 109 109.000
10 recovery 91 90.826
100 computed_concentration 190 190.000
100 recovery 95 95.263
1000 computed_concentration 1000 1000.000
1000 recovery 92 91.700
10000 computed_concentration 9100 9100.000
10000 recovery 99 99.165

The sample prepared from the 10,000 ng/mL spike solution has a theoretical concentration of 9,100 ng/mL, above the example AMI, and therefore requires measurement through an established EMI.

8.4.5 CLSI EP34 Tables 5–6: Manual Dilution-Procedure Validation

This case uses five patient samples assigned by a reference measurement procedure. Two operators independently prepare two 1/20 dilution samples each, and each preparation is measured twice, giving eight dilution results per original sample.

Code
ep34_table5 <- read_csv(
  "./data/008-稀释回收与HOOK/std-ep34-table5-manual-validation.csv",
  show_col_types = FALSE
)
head(ep34_table5, 6)
# A tibble: 6 × 7
  sample assigned scientist preparation replicate result dilution_factor
   <dbl>    <dbl>     <dbl>       <dbl>     <dbl>  <dbl>           <dbl>
1      1     140.         1           1         1   6.99              20
2      1     140.         1           1         2   6.51              20
3      1     140.         1           2         1   6.37              20
4      1     140.         1           2         2   6.12              20
5      1     140.         2           1         1   6.53              20
6      1     140.         2           1         2   6.74              20
Code
ep34_table5_result <- dilution_recovery(
  ep34_table5,
  sample = "sample",
  result = "result",
  dilution_factor = "dilution_factor",
  assigned = "assigned",
  conf.level = 0.95
)
ep34_table5_result

Dilution recovery
  Samples: 5
  Dilution factors: 20
  Confidence level: 95.0%

  Dilution factor: 20
    Specimen content   : 5
    Samples            : 5
    Mean recovery      : 98.761501
    SD recovery        : 4.0632964
    SE recovery        : 1.8171614
    Degrees of freedom : 4
    CI lower           : 93.716252
    CI upper           : 103.80675

  Sample results

  Sample: 1 | Dilution factor: 20
    Replicates              : 8
    Mean result             : 6.65625
    SD result               : 0.32845689
    CV result               : 4.9345636
    Specimen content        : 5
    Assigned value          : 139.68
    Target concentration    : 6.984
    Corrected concentration : 133.125
    Recovery                : 95.307131

  Sample: 2 | Dilution factor: 20
    Replicates              : 8
    Mean result             : 15.23875
    SD result               : 0.67979908
    CV result               : 4.4609898
    Specimen content        : 5
    Assigned value          : 292.04
    Target concentration    : 14.602
    Corrected concentration : 304.775
    Recovery                : 104.3607

  Sample: 3 | Dilution factor: 20
    Replicates              : 8
    Mean result             : 31.73875
    SD result               : 2.1664879
    CV result               : 6.8260025
    Specimen content        : 5
    Assigned value          : 647.32
    Target concentration    : 32.366
    Corrected concentration : 634.775
    Recovery                : 98.06201

  Sample: 4 | Dilution factor: 20
    Replicates              : 8
    Mean result             : 53.6675
    SD result               : 1.979623
    CV result               : 3.6886812
    Specimen content        : 5
    Assigned value          : 1132.45
    Target concentration    : 56.6225
    Corrected concentration : 1073.35
    Recovery                : 94.781227

  Sample: 5 | Dilution factor: 20
    Replicates              : 8
    Mean result             : 92.41375
    SD result               : 2.4947198
    CV result               : 2.6995115
    Specimen content        : 5
    Assigned value          : 1824.62
    Target concentration    : 91.231
    Corrected concentration : 1848.275
    Recovery                : 101.29643
Code
plot(ep34_table5_result, type = "observed")

EP34 Tables 5–6: ivdtools compared with the standard text
Standard location Statistic Standard ivdtools
1 mean 6.66 6.656
1 corrected_concentration 133.13 133.125
1 recovery 95.30 95.307
2 mean 15.24 15.239
2 corrected_concentration 304.78 304.775
2 recovery 104.40 104.361
3 mean 31.74 31.739
3 corrected_concentration 634.78 634.775
3 recovery 98.10 98.062
4 mean 53.67 53.667
4 corrected_concentration 1073.35 1073.350
4 recovery 94.80 94.781
5 mean 92.41 92.414
5 corrected_concentration 1848.28 1848.275
5 recovery 101.30 101.296

The dilution recoveries for the five samples range from 94.8% to 104.4%, all within the example’s prespecified 90%–110% range. Here, assigned is the value assigned by the reference measurement procedure.

8.4.6 CLSI EP34 Tables 7–8: Automatic Dilution-Procedure Validation

The AMI in this case is 5–40 pg/mL, and the proposed EMI is 40–80 pg/mL. Five samples characterized by spike recovery are measured four times on each of two instruments after an automatic 1/2 dilution.

Code
ep34_table7 <- read_csv(
  "./data/008-稀释回收与HOOK/std-ep34-table7-auto-validation.csv",
  show_col_types = FALSE
)
head(ep34_table7, 6)
# A tibble: 6 × 6
  sample assigned instrument replicate result dilution_factor
   <dbl>    <dbl>      <dbl>     <dbl>  <dbl>           <dbl>
1      1     44.9          1         1   20.3               2
2      1     44.9          1         2   26.0               2
3      1     44.9          1         3   24.3               2
4      1     44.9          1         4   25.0               2
5      1     44.9          2         1   22.5               2
6      1     44.9          2         2   21.3               2
Code
ep34_table7_result <- dilution_recovery(
  ep34_table7,
  sample = "sample",
  result = "result",
  dilution_factor = "dilution_factor",
  assigned = "assigned",
  conf.level = 0.95
)
ep34_table7_result

Dilution recovery
  Samples: 5
  Dilution factors: 2
  Confidence level: 95.0%

  Dilution factor: 2
    Specimen content   : 50
    Samples            : 5
    Mean recovery      : 104.55585
    SD recovery        : 6.022583
    SE recovery        : 2.693381
    Degrees of freedom : 4
    CI lower           : 97.077824
    CI upper           : 112.03387

  Sample results

  Sample: 1 | Dilution factor: 2
    Replicates              : 8
    Mean result             : 23.6775
    SD result               : 2.1002432
    CV result               : 8.8702067
    Specimen content        : 50
    Assigned value          : 44.92
    Target concentration    : 22.46
    Corrected concentration : 47.355
    Recovery                : 105.42075

  Sample: 2 | Dilution factor: 2
    Replicates              : 8
    Mean result             : 26.44
    SD result               : 1.9634299
    CV result               : 7.4259831
    Specimen content        : 50
    Assigned value          : 53.78
    Target concentration    : 26.89
    Corrected concentration : 52.88
    Recovery                : 98.326515

  Sample: 3 | Dilution factor: 2
    Replicates              : 8
    Mean result             : 35.44125
    SD result               : 1.9058139
    CV result               : 5.3773892
    Specimen content        : 50
    Assigned value          : 62.32
    Target concentration    : 31.16
    Corrected concentration : 70.8825
    Recovery                : 113.73957

  Sample: 4 | Dilution factor: 2
    Replicates              : 8
    Mean result             : 35.975
    SD result               : 1.3997653
    CV result               : 3.8909389
    Specimen content        : 50
    Assigned value          : 68.34
    Target concentration    : 34.17
    Corrected concentration : 71.95
    Recovery                : 105.28241

  Sample: 5 | Dilution factor: 2
    Replicates              : 8
    Mean result             : 37.50875
    SD result               : 1.5492066
    CV result               : 4.1302539
    Specimen content        : 50
    Assigned value          : 75.01
    Target concentration    : 37.505
    Corrected concentration : 75.0175
    Recovery                : 100.01
EP34 Tables 7–8: ivdtools compared with the standard text
Standard location Statistic Standard ivdtools
1 mean 23.68 23.678
1 corrected_concentration 47.36 47.355
1 recovery 105.40 105.421
2 mean 26.44 26.440
2 corrected_concentration 52.88 52.880
2 recovery 98.30 98.327
3 mean 35.44 35.441
3 corrected_concentration 70.88 70.882
3 recovery 113.70 113.740
4 mean 35.98 35.975
4 corrected_concentration 71.95 71.950
4 recovery 105.30 105.282
5 mean 37.51 37.509
5 corrected_concentration 75.02 75.018
5 recovery 100.00 100.010

The recoveries for the five samples range from 98.3% to 113.7%, all within the example’s prespecified 85%–115% range.

8.4.7 CLSI EP34 Appendix C: Two Complete Dilution Analyses

Appendix C Tables C1 and C2 publish only the observed mean for each sample at each dilution level, not the underlying individual results. This section follows the source granularity and recalculates across-sample recovery for analytes B and C separately.

Table C1: Analyte B

Code
ep34_c1 <- read_csv(
  "./data/008-稀释回收与HOOK/std-ep34-appendix-c1.csv",
  show_col_types = FALSE
)
head(ep34_c1, 6)
# A tibble: 6 × 5
  sample dilution dilution_factor assigned observed_mean
   <dbl> <chr>              <dbl>    <dbl>         <dbl>
1      1 neat                   1     220.         220. 
2      1 1/2                    2     220.         115. 
3      1 1/4                    4     220.          58.2
4      1 1/10                  10     220.          25.6
5      1 1/20                  20     220.          15.7
6      2 neat                   1     260.         260. 
Code
ep34_c1_result <- dilution_recovery(
  ep34_c1,
  sample = "sample",
  result = "observed_mean",
  dilution_factor = "dilution_factor",
  assigned = "assigned",
  conf.level = 0.95
)
ep34_c1_result

Dilution recovery
  Samples: 5
  Dilution factors:  1,  2,  4, 10, 20
  Confidence level: 95.0%

  Dilution factor: 1
    Specimen content   : 100
    Samples            : 5
    Mean recovery      : 100
    SD recovery        : 0
    SE recovery        : 0
    Degrees of freedom : 4
    CI lower           : 100
    CI upper           : 100

  Dilution factor: 2
    Specimen content   : 50
    Samples            : 5
    Mean recovery      : 100.49583
    SD recovery        : 3.5627839
    SE recovery        : 1.5933254
    Degrees of freedom : 4
    CI lower           : 96.072052
    CI upper           : 104.91961

  Dilution factor: 4
    Specimen content   : 25
    Samples            : 5
    Mean recovery      : 104.98711
    SD recovery        : 2.8223671
    SE recovery        : 1.2622009
    Degrees of freedom : 4
    CI lower           : 101.48268
    CI upper           : 108.49154

  Dilution factor: 10
    Specimen content   : 10
    Samples            : 5
    Mean recovery      : 115.13247
    SD recovery        : 3.1142636
    SE recovery        : 1.392741
    Degrees of freedom : 4
    CI lower           : 111.2656
    CI upper           : 118.99934

  Dilution factor: 20
    Specimen content   : 5
    Samples            : 5
    Mean recovery      : 135.48746
    SD recovery        : 8.945831
    SE recovery        : 4.0006973
    Degrees of freedom : 4
    CI lower           : 124.37974
    CI upper           : 146.59517

  Sample results

  Sample: 1 | Dilution factor: 1
    Replicates              : 1
    Mean result             : 220.3
    SD result               : NA
    CV result               : NA
    Specimen content        : 100
    Assigned value          : 220.3
    Target concentration    : 220.3
    Corrected concentration : 220.3
    Recovery                : 100

  Sample: 2 | Dilution factor: 1
    Replicates              : 1
    Mean result             : 260.1
    SD result               : NA
    CV result               : NA
    Specimen content        : 100
    Assigned value          : 260.1
    Target concentration    : 260.1
    Corrected concentration : 260.1
    Recovery                : 100

  Sample: 3 | Dilution factor: 1
    Replicates              : 1
    Mean result             : 248
    SD result               : NA
    CV result               : NA
    Specimen content        : 100
    Assigned value          : 248
    Target concentration    : 248
    Corrected concentration : 248
    Recovery                : 100

  Sample: 4 | Dilution factor: 1
    Replicates              : 1
    Mean result             : 272.2
    SD result               : NA
    CV result               : NA
    Specimen content        : 100
    Assigned value          : 272.2
    Target concentration    : 272.2
    Corrected concentration : 272.2
    Recovery                : 100

  Sample: 5 | Dilution factor: 1
    Replicates              : 1
    Mean result             : 244
    SD result               : NA
    CV result               : NA
    Specimen content        : 100
    Assigned value          : 244
    Target concentration    : 244
    Corrected concentration : 244
    Recovery                : 100

  Sample: 1 | Dilution factor: 2
    Replicates              : 1
    Mean result             : 114.8
    SD result               : NA
    CV result               : NA
    Specimen content        : 50
    Assigned value          : 220.3
    Target concentration    : 110.15
    Corrected concentration : 229.6
    Recovery                : 104.22152

  Sample: 2 | Dilution factor: 2
    Replicates              : 1
    Mean result             : 128.2
    SD result               : NA
    CV result               : NA
    Specimen content        : 50
    Assigned value          : 260.1
    Target concentration    : 130.05
    Corrected concentration : 256.4
    Recovery                : 98.57747

  Sample: 3 | Dilution factor: 2
    Replicates              : 1
    Mean result             : 127.3
    SD result               : NA
    CV result               : NA
    Specimen content        : 50
    Assigned value          : 248
    Target concentration    : 124
    Corrected concentration : 254.6
    Recovery                : 102.66129

  Sample: 4 | Dilution factor: 2
    Replicates              : 1
    Mean result             : 129.7
    SD result               : NA
    CV result               : NA
    Specimen content        : 50
    Assigned value          : 272.2
    Target concentration    : 136.1
    Corrected concentration : 259.4
    Recovery                : 95.297575

  Sample: 5 | Dilution factor: 2
    Replicates              : 1
    Mean result             : 124.1
    SD result               : NA
    CV result               : NA
    Specimen content        : 50
    Assigned value          : 244
    Target concentration    : 122
    Corrected concentration : 248.2
    Recovery                : 101.72131

  Sample: 1 | Dilution factor: 4
    Replicates              : 1
    Mean result             : 58.2
    SD result               : NA
    CV result               : NA
    Specimen content        : 25
    Assigned value          : 220.3
    Target concentration    : 55.075
    Corrected concentration : 232.8
    Recovery                : 105.67408

  Sample: 2 | Dilution factor: 4
    Replicates              : 1
    Mean result             : 67.1
    SD result               : NA
    CV result               : NA
    Specimen content        : 25
    Assigned value          : 260.1
    Target concentration    : 65.025
    Corrected concentration : 268.4
    Recovery                : 103.19108

  Sample: 3 | Dilution factor: 4
    Replicates              : 1
    Mean result             : 66.3
    SD result               : NA
    CV result               : NA
    Specimen content        : 25
    Assigned value          : 248
    Target concentration    : 62
    Corrected concentration : 265.2
    Recovery                : 106.93548

  Sample: 4 | Dilution factor: 4
    Replicates              : 1
    Mean result             : 68.8
    SD result               : NA
    CV result               : NA
    Specimen content        : 25
    Assigned value          : 272.2
    Target concentration    : 68.05
    Corrected concentration : 275.2
    Recovery                : 101.10213

  Sample: 5 | Dilution factor: 4
    Replicates              : 1
    Mean result             : 65.9
    SD result               : NA
    CV result               : NA
    Specimen content        : 25
    Assigned value          : 244
    Target concentration    : 61
    Corrected concentration : 263.6
    Recovery                : 108.03279

  Sample: 1 | Dilution factor: 10
    Replicates              : 1
    Mean result             : 25.6
    SD result               : NA
    CV result               : NA
    Specimen content        : 10
    Assigned value          : 220.3
    Target concentration    : 22.03
    Corrected concentration : 256
    Recovery                : 116.20517

  Sample: 2 | Dilution factor: 10
    Replicates              : 1
    Mean result             : 28.8
    SD result               : NA
    CV result               : NA
    Specimen content        : 10
    Assigned value          : 260.1
    Target concentration    : 26.01
    Corrected concentration : 288
    Recovery                : 110.72664

  Sample: 3 | Dilution factor: 10
    Replicates              : 1
    Mean result             : 29.6
    SD result               : NA
    CV result               : NA
    Specimen content        : 10
    Assigned value          : 248
    Target concentration    : 24.8
    Corrected concentration : 296
    Recovery                : 119.35484

  Sample: 4 | Dilution factor: 10
    Replicates              : 1
    Mean result             : 31.2
    SD result               : NA
    CV result               : NA
    Specimen content        : 10
    Assigned value          : 272.2
    Target concentration    : 27.22
    Corrected concentration : 312
    Recovery                : 114.6216

  Sample: 5 | Dilution factor: 10
    Replicates              : 1
    Mean result             : 28
    SD result               : NA
    CV result               : NA
    Specimen content        : 10
    Assigned value          : 244
    Target concentration    : 24.4
    Corrected concentration : 280
    Recovery                : 114.7541

  Sample: 1 | Dilution factor: 20
    Replicates              : 1
    Mean result             : 15.7
    SD result               : NA
    CV result               : NA
    Specimen content        : 5
    Assigned value          : 220.3
    Target concentration    : 11.015
    Corrected concentration : 314
    Recovery                : 142.53291

  Sample: 2 | Dilution factor: 20
    Replicates              : 1
    Mean result             : 17.4
    SD result               : NA
    CV result               : NA
    Specimen content        : 5
    Assigned value          : 260.1
    Target concentration    : 13.005
    Corrected concentration : 348
    Recovery                : 133.79469

  Sample: 3 | Dilution factor: 20
    Replicates              : 1
    Mean result             : 15.6
    SD result               : NA
    CV result               : NA
    Specimen content        : 5
    Assigned value          : 248
    Target concentration    : 12.4
    Corrected concentration : 312
    Recovery                : 125.80645

  Sample: 4 | Dilution factor: 20
    Replicates              : 1
    Mean result             : 17.5
    SD result               : NA
    CV result               : NA
    Specimen content        : 5
    Assigned value          : 272.2
    Target concentration    : 13.61
    Corrected concentration : 350
    Recovery                : 128.58193

  Sample: 5 | Dilution factor: 20
    Replicates              : 1
    Mean result             : 17.9
    SD result               : NA
    CV result               : NA
    Specimen content        : 5
    Assigned value          : 244
    Target concentration    : 12.2
    Corrected concentration : 358
    Recovery                : 146.72131
Code
plot(ep34_c1_result, type = "summary")

Table C2: Analyte C

Code
ep34_c2 <- read_csv(
  "./data/008-稀释回收与HOOK/std-ep34-appendix-c2.csv",
  show_col_types = FALSE
)
head(ep34_c2, 6)
# A tibble: 6 × 5
  sample dilution dilution_factor assigned observed_mean
   <dbl> <chr>              <dbl>    <dbl>         <dbl>
1      1 neat                   1    1492.        1492. 
2      1 1/2                    2    1492.         751. 
3      1 1/10                  10    1492.         145. 
4      1 1/50                  50    1492.          28.7
5      1 1/200                200    1492.           7.5
6      2 neat                   1    1386.        1386. 
Code
ep34_c2_result <- dilution_recovery(
  ep34_c2,
  sample = "sample",
  result = "observed_mean",
  dilution_factor = "dilution_factor",
  assigned = "assigned",
  conf.level = 0.95
)
ep34_c2_result

Dilution recovery
  Samples: 6
  Dilution factors:   1,   2,  10,  50, 200
  Confidence level: 95.0%

  Dilution factor: 1
    Specimen content   : 100
    Samples            : 6
    Mean recovery      : 100
    SD recovery        : 0
    SE recovery        : 0
    Degrees of freedom : 5
    CI lower           : 100
    CI upper           : 100

  Dilution factor: 2
    Specimen content   : 50
    Samples            : 6
    Mean recovery      : 101.33362
    SD recovery        : 3.2217773
    SE recovery        : 1.3152851
    Degrees of freedom : 5
    CI lower           : 97.952571
    CI upper           : 104.71467

  Dilution factor: 10
    Specimen content   : 10
    Samples            : 6
    Mean recovery      : 101.55253
    SD recovery        : 5.9523994
    SE recovery        : 2.4300569
    Degrees of freedom : 5
    CI lower           : 95.305866
    CI upper           : 107.79919

  Dilution factor: 50
    Specimen content   : 2
    Samples            : 6
    Mean recovery      : 102.34874
    SD recovery        : 5.2080713
    SE recovery        : 2.1261862
    Degrees of freedom : 5
    CI lower           : 96.883208
    CI upper           : 107.81428

  Dilution factor: 200
    Specimen content   : 0.5
    Samples            : 6
    Mean recovery      : 102.55094
    SD recovery        : 5.5420679
    SE recovery        : 2.2625397
    Degrees of freedom : 5
    CI lower           : 96.734901
    CI upper           : 108.36699

  Sample results

  Sample: 1 | Dilution factor: 1
    Replicates              : 1
    Mean result             : 1492.1
    SD result               : NA
    CV result               : NA
    Specimen content        : 100
    Assigned value          : 1492.1
    Target concentration    : 1492.1
    Corrected concentration : 1492.1
    Recovery                : 100

  Sample: 2 | Dilution factor: 1
    Replicates              : 1
    Mean result             : 1386.5
    SD result               : NA
    CV result               : NA
    Specimen content        : 100
    Assigned value          : 1386.5
    Target concentration    : 1386.5
    Corrected concentration : 1386.5
    Recovery                : 100

  Sample: 3 | Dilution factor: 1
    Replicates              : 1
    Mean result             : 1290.8
    SD result               : NA
    CV result               : NA
    Specimen content        : 100
    Assigned value          : 1290.8
    Target concentration    : 1290.8
    Corrected concentration : 1290.8
    Recovery                : 100

  Sample: 4 | Dilution factor: 1
    Replicates              : 1
    Mean result             : 1451.6
    SD result               : NA
    CV result               : NA
    Specimen content        : 100
    Assigned value          : 1451.6
    Target concentration    : 1451.6
    Corrected concentration : 1451.6
    Recovery                : 100

  Sample: 5 | Dilution factor: 1
    Replicates              : 1
    Mean result             : 1209.8
    SD result               : NA
    CV result               : NA
    Specimen content        : 100
    Assigned value          : 1209.8
    Target concentration    : 1209.8
    Corrected concentration : 1209.8
    Recovery                : 100

  Sample: 6 | Dilution factor: 1
    Replicates              : 1
    Mean result             : 1326.4
    SD result               : NA
    CV result               : NA
    Specimen content        : 100
    Assigned value          : 1326.4
    Target concentration    : 1326.4
    Corrected concentration : 1326.4
    Recovery                : 100

  Sample: 1 | Dilution factor: 2
    Replicates              : 1
    Mean result             : 750.9
    SD result               : NA
    CV result               : NA
    Specimen content        : 50
    Assigned value          : 1492.1
    Target concentration    : 746.05
    Corrected concentration : 1501.8
    Recovery                : 100.65009

  Sample: 2 | Dilution factor: 2
    Replicates              : 1
    Mean result             : 680.9
    SD result               : NA
    CV result               : NA
    Specimen content        : 50
    Assigned value          : 1386.5
    Target concentration    : 693.25
    Corrected concentration : 1361.8
    Recovery                : 98.218536

  Sample: 3 | Dilution factor: 2
    Replicates              : 1
    Mean result             : 648.3
    SD result               : NA
    CV result               : NA
    Specimen content        : 50
    Assigned value          : 1290.8
    Target concentration    : 645.4
    Corrected concentration : 1296.6
    Recovery                : 100.44933

  Sample: 4 | Dilution factor: 2
    Replicates              : 1
    Mean result             : 745.2
    SD result               : NA
    CV result               : NA
    Specimen content        : 50
    Assigned value          : 1451.6
    Target concentration    : 725.8
    Corrected concentration : 1490.4
    Recovery                : 102.67291

  Sample: 5 | Dilution factor: 2
    Replicates              : 1
    Mean result             : 598.3
    SD result               : NA
    CV result               : NA
    Specimen content        : 50
    Assigned value          : 1209.8
    Target concentration    : 604.9
    Corrected concentration : 1196.6
    Recovery                : 98.908911

  Sample: 6 | Dilution factor: 2
    Replicates              : 1
    Mean result             : 710.3
    SD result               : NA
    CV result               : NA
    Specimen content        : 50
    Assigned value          : 1326.4
    Target concentration    : 663.2
    Corrected concentration : 1420.6
    Recovery                : 107.10193

  Sample: 1 | Dilution factor: 10
    Replicates              : 1
    Mean result             : 145.4
    SD result               : NA
    CV result               : NA
    Specimen content        : 10
    Assigned value          : 1492.1
    Target concentration    : 149.21
    Corrected concentration : 1454
    Recovery                : 97.446552

  Sample: 2 | Dilution factor: 10
    Replicates              : 1
    Mean result             : 135.8
    SD result               : NA
    CV result               : NA
    Specimen content        : 10
    Assigned value          : 1386.5
    Target concentration    : 138.65
    Corrected concentration : 1358
    Recovery                : 97.944464

  Sample: 3 | Dilution factor: 10
    Replicates              : 1
    Mean result             : 135.7
    SD result               : NA
    CV result               : NA
    Specimen content        : 10
    Assigned value          : 1290.8
    Target concentration    : 129.08
    Corrected concentration : 1357
    Recovery                : 105.1286

  Sample: 4 | Dilution factor: 10
    Replicates              : 1
    Mean result             : 136.5
    SD result               : NA
    CV result               : NA
    Specimen content        : 10
    Assigned value          : 1451.6
    Target concentration    : 145.16
    Corrected concentration : 1365
    Recovery                : 94.034169

  Sample: 5 | Dilution factor: 10
    Replicates              : 1
    Mean result             : 127.2
    SD result               : NA
    CV result               : NA
    Specimen content        : 10
    Assigned value          : 1209.8
    Target concentration    : 120.98
    Corrected concentration : 1272
    Recovery                : 105.14135

  Sample: 6 | Dilution factor: 10
    Replicates              : 1
    Mean result             : 145.4
    SD result               : NA
    CV result               : NA
    Specimen content        : 10
    Assigned value          : 1326.4
    Target concentration    : 132.64
    Corrected concentration : 1454
    Recovery                : 109.62002

  Sample: 1 | Dilution factor: 50
    Replicates              : 1
    Mean result             : 28.7
    SD result               : NA
    CV result               : NA
    Specimen content        : 2
    Assigned value          : 1492.1
    Target concentration    : 29.842
    Corrected concentration : 1435
    Recovery                : 96.173179

  Sample: 2 | Dilution factor: 50
    Replicates              : 1
    Mean result             : 28.5
    SD result               : NA
    CV result               : NA
    Specimen content        : 2
    Assigned value          : 1386.5
    Target concentration    : 27.73
    Corrected concentration : 1425
    Recovery                : 102.77678

  Sample: 3 | Dilution factor: 50
    Replicates              : 1
    Mean result             : 26.8
    SD result               : NA
    CV result               : NA
    Specimen content        : 2
    Assigned value          : 1290.8
    Target concentration    : 25.816
    Corrected concentration : 1340
    Recovery                : 103.81159

  Sample: 4 | Dilution factor: 50
    Replicates              : 1
    Mean result             : 27.9
    SD result               : NA
    CV result               : NA
    Specimen content        : 2
    Assigned value          : 1451.6
    Target concentration    : 29.032
    Corrected concentration : 1395
    Recovery                : 96.100854

  Sample: 5 | Dilution factor: 50
    Replicates              : 1
    Mean result             : 25.9
    SD result               : NA
    CV result               : NA
    Specimen content        : 2
    Assigned value          : 1209.8
    Target concentration    : 24.196
    Corrected concentration : 1295
    Recovery                : 107.04249

  Sample: 6 | Dilution factor: 50
    Replicates              : 1
    Mean result             : 28.7
    SD result               : NA
    CV result               : NA
    Specimen content        : 2
    Assigned value          : 1326.4
    Target concentration    : 26.528
    Corrected concentration : 1435
    Recovery                : 108.18758

  Sample: 1 | Dilution factor: 200
    Replicates              : 1
    Mean result             : 7.5
    SD result               : NA
    CV result               : NA
    Specimen content        : 0.5
    Assigned value          : 1492.1
    Target concentration    : 7.4605
    Corrected concentration : 1500
    Recovery                : 100.52946

  Sample: 2 | Dilution factor: 200
    Replicates              : 1
    Mean result             : 7.2
    SD result               : NA
    CV result               : NA
    Specimen content        : 0.5
    Assigned value          : 1386.5
    Target concentration    : 6.9325
    Corrected concentration : 1440
    Recovery                : 103.85864

  Sample: 3 | Dilution factor: 200
    Replicates              : 1
    Mean result             : 6.4
    SD result               : NA
    CV result               : NA
    Specimen content        : 0.5
    Assigned value          : 1290.8
    Target concentration    : 6.454
    Corrected concentration : 1280
    Recovery                : 99.16331

  Sample: 4 | Dilution factor: 200
    Replicates              : 1
    Mean result             : 7.1
    SD result               : NA
    CV result               : NA
    Specimen content        : 0.5
    Assigned value          : 1451.6
    Target concentration    : 7.258
    Corrected concentration : 1420
    Recovery                : 97.823092

  Sample: 5 | Dilution factor: 200
    Replicates              : 1
    Mean result             : 6.1
    SD result               : NA
    CV result               : NA
    Specimen content        : 0.5
    Assigned value          : 1209.8
    Target concentration    : 6.049
    Corrected concentration : 1220
    Recovery                : 100.84311

  Sample: 6 | Dilution factor: 200
    Replicates              : 1
    Mean result             : 7.5
    SD result               : NA
    CV result               : NA
    Specimen content        : 0.5
    Assigned value          : 1326.4
    Target concentration    : 6.632
    Corrected concentration : 1500
    Recovery                : 113.08806
Code
plot(ep34_c2_result, type = "summary")

EP34 Appendix C: ivdtools compared with the standard text
Standard location Statistic Standard ivdtools
appendix_c1 / neat mean_recovery 100.00 100.000
appendix_c1 / neat lower_ci 100.00 100.000
appendix_c1 / neat upper_ci 100.00 100.000
appendix_c1 / 1/2 mean_recovery 100.50 100.496
appendix_c1 / 1/2 lower_ci 96.06 96.072
appendix_c1 / 1/2 upper_ci 104.89 104.920
appendix_c1 / 1/4 mean_recovery 104.99 104.987
appendix_c1 / 1/4 lower_ci 101.45 101.483
appendix_c1 / 1/4 upper_ci 108.50 108.492
appendix_c1 / 1/10 mean_recovery 115.13 115.132
appendix_c1 / 1/10 lower_ci 111.33 111.266
appendix_c1 / 1/10 upper_ci 119.05 118.999
appendix_c1 / 1/20 mean_recovery 135.49 135.487
appendix_c1 / 1/20 lower_ci 124.43 124.380
appendix_c1 / 1/20 upper_ci 146.69 146.595
appendix_c2 / neat mean_recovery 100.00 100.000
appendix_c2 / neat lower_ci 100.00 100.000
appendix_c2 / neat upper_ci 100.00 100.000
appendix_c2 / 1/2 mean_recovery 101.33 101.334
appendix_c2 / 1/2 lower_ci 97.95 97.953
appendix_c2 / 1/2 upper_ci 104.71 104.715
appendix_c2 / 1/10 mean_recovery 101.55 101.553
appendix_c2 / 1/10 lower_ci 95.31 95.306
appendix_c2 / 1/10 upper_ci 107.80 107.799
appendix_c2 / 1/50 mean_recovery 102.35 102.349
appendix_c2 / 1/50 lower_ci 96.88 96.883
appendix_c2 / 1/50 upper_ci 107.81 107.814
appendix_c2 / 1/200 mean_recovery 102.71 102.551
appendix_c2 / 1/200 lower_ci 96.82 96.735
appendix_c2 / 1/200 upper_ci 108.60 108.367

Recovery in Table C1 rises clearly as dilution increases; the 1/10 and 1/20 dilutions do not meet the example requirement. Table C2 remains relatively stable even at 1/200. At the highest dilution in Table C2, display rounding of the published one-decimal observed means produces a difference of up to approximately 0.23 percentage points in the software-recalculated summary.

8.4.8 High-Dose Hook Effect

The EP34 hook-effect figure provides an illustrative trajectory rather than raw responses at each concentration. The following teaching data demonstrate hook_effect(); these values are not from the standard text.

Code
hook_data <- expand.grid(
  concentration = c(1, 2, 3, 4, 5, 6, 7, 8),
  replicate = 1:3,
  KEEP.OUT.ATTRS = FALSE
)
hook_mean <- c(100000, 150000, 180000, 178000, 183000, 160000, 110000, 80000)
hook_data$response <-
  rep(hook_mean, times = 3) + rep(c(-300, 0, 300), each = 8)
head(hook_data, 6)
  concentration replicate response
1             1         1    99700
2             2         1   149700
3             3         1   179700
4             4         1   177700
5             5         1   182700
6             6         1   159700
Code
hook_result <- hook_effect(
  hook_data,
  concentration = "concentration",
  response = "response",
  uloq = 1.5,
  uloq_response = 130000,
  conf.level = 0.95
)
hook_result

High-dose hook-effect experiment
  ULoQ concentration: 1.5
  ULoQ response: supplied
  Series: 1

  Series: all
    ULoQ concentration           : 1.5
    ULoQ response                : 130000
    Hook concentration           : 6
    Hook response                : 160000
    First in-range concentration : 7
    First in-range response      : 110000
    Highest tested concentration : 8
    Hook lower bound             : NA

  Concentration-level results

  Series: all | Concentration: 1
    Replicates    : 3
    Mean response : 1e+05
    SD response   : 300
    CV response   : 0.3
    SE response   : 173.20508
    CI lower      : 99254.759
    CI upper      : 100745.24

  Series: all | Concentration: 2
    Replicates    : 3
    Mean response : 150000
    SD response   : 300
    CV response   : 0.2
    SE response   : 173.20508
    CI lower      : 149254.76
    CI upper      : 150745.24

  Series: all | Concentration: 3
    Replicates    : 3
    Mean response : 180000
    SD response   : 300
    CV response   : 0.16666667
    SE response   : 173.20508
    CI lower      : 179254.76
    CI upper      : 180745.24

  Series: all | Concentration: 4
    Replicates    : 3
    Mean response : 178000
    SD response   : 300
    CV response   : 0.16853933
    SE response   : 173.20508
    CI lower      : 177254.76
    CI upper      : 178745.24

  Series: all | Concentration: 5
    Replicates    : 3
    Mean response : 183000
    SD response   : 300
    CV response   : 0.16393443
    SE response   : 173.20508
    CI lower      : 182254.76
    CI upper      : 183745.24

  Series: all | Concentration: 6
    Replicates    : 3
    Mean response : 160000
    SD response   : 300
    CV response   : 0.1875
    SE response   : 173.20508
    CI lower      : 159254.76
    CI upper      : 160745.24

  Series: all | Concentration: 7
    Replicates    : 3
    Mean response : 110000
    SD response   : 300
    CV response   : 0.27272727
    SE response   : 173.20508
    CI lower      : 109254.76
    CI upper      : 110745.24

  Series: all | Concentration: 8
    Replicates    : 3
    Mean response : 80000
    SD response   : 300
    CV response   : 0.375
    SE response   : 173.20508
    CI lower      : 79254.759
    CI upper      : 80745.241
Code
plot(hook_result)

In this example, the measured concentration 7 is the first point that returns to the ULoQ response range. The function therefore reports the preceding measured concentration, 6, as hook_concentration. This is a boundary determined by the spacing of tested concentrations, not an interpolated turning point.