Code
library(ivdtools)
library(readr)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 |
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.
library(ivdtools)
library(readr)| 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 |
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.
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}}.\]
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.
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.
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.
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
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
plot(hook_fit)
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.
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.
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
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.
plot(ep34_table1_result, type = "recovery")
| 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.
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.
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
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
plot(ep34_table2_result, type = "summary")
| 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.
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.
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
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
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
plot(ep34_table3_result)
| 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.
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().
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>
| 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.
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.
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
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
plot(ep34_table5_result, type = "observed")
| 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.
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.
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
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
| 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.
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
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.
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
plot(ep34_c1_result, type = "summary")
Table C2: Analyte C
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.
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
plot(ep34_c2_result, type = "summary")
| 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.
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.
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
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
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.