--- title: "Setting Quality Goals with Biological Variation" author: "Marcello Grassi" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Setting Quality Goals with Biological Variation} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.width = 6, fig.height = 4, fig.align = "center" ) ``` ## Introduction A fundamental question in laboratory medicine is: "How good does my analytical method need to be?" The answer depends on the intended clinical use. A method that is acceptable for population screening may be inadequate for monitoring individual patients. This vignette introduces the biological variation model for setting analytical performance specifications, implemented in the `valytics` package through three functions: - `ate_from_bv()`: Calculate specifications from biological variation data - `sigma_metric()`: Quantify performance using the Six Sigma metric - `ate_assessment()`: Evaluate observed performance against specifications ```{r load-package} library(valytics) ``` ## The Biological Variation Model ### Concept Every measurand (analyte) exhibits natural variation even in healthy individuals. This variation has two components: - **Within-subject variation (CV~I~)**: Day-to-day fluctuation within an individual - **Between-subject variation (CV~G~)**: Differences between individuals in a population The biological variation model, developed by Fraser, Petersen, and colleagues, uses these inherent variations to derive meaningful analytical performance goals. The logic is straightforward: analytical error should be small enough that it does not significantly increase the total variation observed in test results. ### The Formulas At the **desirable** performance level, the formulas are: **Allowable Imprecision:** $$CV_A \leq 0.50 \times CV_I$$ **Allowable Bias:** $$Bias \leq 0.25 \times \sqrt{CV_I^2 + CV_G^2}$$ **Total Allowable Error:** $$TEa \leq k \times CV_A + Bias$$ Where *k* is a coverage factor (typically 1.65 for ~95% of results). ### Performance Hierarchy Three performance tiers are defined, each with different multipliers: | Level | Imprecision | Bias | Stringency | |-------|-------------|------|------------| | Optimal | 0.25 × CV~I~ | 0.125 × √(CV~I~² + CV~G~²) | Most stringent | | Desirable | 0.50 × CV~I~ | 0.25 × √(CV~I~² + CV~G~²) | Standard target | | Minimum | 0.75 × CV~I~ | 0.375 × √(CV~I~² + CV~G~²) | Least stringent | ## Calculating Specifications with ate_from_bv() ### Basic Usage The `ate_from_bv()` function calculates all three specifications from biological variation data: ```{r ate-basic} # Example: Glucose # CV_I = 5.6%, CV_G = 7.5% (illustrative values) ate_glucose <- ate_from_bv(cvi = 5.6, cvg = 7.5) ate_glucose ``` ### Comparing Performance Levels The `summary()` method shows all three performance tiers: ```{r ate-summary} summary(ate_glucose) ``` ### Different Performance Levels You can calculate specifications for any tier: ```{r ate-levels} # Optimal (most stringent) ate_optimal <- ate_from_bv(cvi = 5.6, cvg = 7.5, level = "optimal") ate_optimal$specifications$tea # Minimum (least stringent) ate_minimum <- ate_from_bv(cvi = 5.6, cvg = 7.5, level = "minimum") ate_minimum$specifications$tea ``` ### When CV~G~ is Unknown If only within-subject variation is available, imprecision goals can still be calculated: ```{r ate-cvi-only} ate_cv_only <- ate_from_bv(cvi = 5.6) ate_cv_only ``` ## The Six Sigma Metric ### Concept The sigma metric provides a standardized way to express method quality. It answers: "How many standard deviations of analytical error fit between my observed performance and the allowable limit?" $$\sigma = \frac{TEa - |Bias|}{CV}$$ Higher sigma values indicate better performance: | Sigma | Category | Defects per Million | |-------|----------|---------------------| | ≥ 6 | World Class | ~3.4 | | ≥ 5 | Excellent | ~230 | | ≥ 4 | Good | ~6,200 | | ≥ 3 | Marginal | ~66,800 | | ≥ 2 | Poor | ~308,500 | | < 2 | Unacceptable | > 690,000 | ### Calculating Sigma ```{r sigma-basic} # Assume observed: bias = 1.5%, CV = 2.5% # Using TEa from biological variation sm <- sigma_metric( bias = 1.5, cv = 2.5, tea = ate_glucose$specifications$tea ) sm ``` ### Detailed Sigma Summary ```{r sigma-summary} summary(sm) ``` ### Interpreting Sigma in Clinical Context In clinical laboratories: - **Sigma ≥ 6**: Minimal QC needed; method is highly reliable - **Sigma 4-6**: Standard QC procedures adequate - **Sigma 3-4**: Enhanced QC recommended; monitor closely - **Sigma < 3**: High risk of errors; consider method improvement ## Comprehensive Assessment with ate_assessment() ### Basic Assessment The `ate_assessment()` function evaluates observed performance against specifications: ```{r assess-basic} assess <- ate_assessment( bias = 1.5, cv = 2.5, tea = ate_glucose$specifications$tea ) assess ``` ### Full Component Assessment When you have specifications for all components: ```{r assess-full} assess_full <- ate_assessment( bias = 1.5, cv = 2.5, tea = ate_glucose$specifications$tea, allowable_bias = ate_glucose$specifications$allowable_bias, allowable_cv = ate_glucose$specifications$allowable_cv ) summary(assess_full) ``` ### Handling a Failing Method ```{r assess-fail} # A method with poor performance assess_poor <- ate_assessment( bias = 4.0, cv = 5.0, tea = ate_glucose$specifications$tea, allowable_bias = ate_glucose$specifications$allowable_bias, allowable_cv = ate_glucose$specifications$allowable_cv ) summary(assess_poor) ``` ## Complete Workflow Example Here is a typical workflow for evaluating a new glucose method: ```{r workflow} # Step 1: Define quality goals from biological variation specs <- ate_from_bv(cvi = 5.6, cvg = 7.5, level = "desirable") cat("Quality Specifications:\n") cat(sprintf(" Allowable CV: %.2f%%\n", specs$specifications$allowable_cv)) cat(sprintf(" Allowable Bias: %.2f%%\n", specs$specifications$allowable_bias)) cat(sprintf(" TEa: %.2f%%\n\n", specs$specifications$tea)) # Step 2: Assume we measured method performance # (In practice, from validation studies) observed_bias <- 1.8 observed_cv <- 2.2 # Step 3: Calculate sigma metric sm <- sigma_metric(observed_bias, observed_cv, specs$specifications$tea) cat(sprintf("Sigma Metric: %.2f (%s)\n\n", sm$sigma, sm$interpretation$category)) # Step 4: Full assessment assessment <- ate_assessment( bias = observed_bias, cv = observed_cv, tea = specs$specifications$tea, allowable_bias = specs$specifications$allowable_bias, allowable_cv = specs$specifications$allowable_cv ) # Step 5: Decision if (assessment$assessment$overall) { cat("DECISION: Method acceptable for clinical use\n") } else { cat("DECISION: Method requires improvement\n") } ``` ## Obtaining Biological Variation Data The quality of your specifications depends on reliable biological variation estimates. ### Recommended Source The **EFLM Biological Variation Database** is the current authoritative source: - Website: https://biologicalvariation.eu/ - Provides rigorously reviewed BV estimates - Includes quality grades for each estimate - Updated regularly with new studies ### Using the Database 1. Navigate to https://biologicalvariation.eu/ 2. Search for your analyte 3. Review the CV~I~ and CV~G~ values 4. Note the quality grade (A, B, C, D) and number of studies 5. Use values appropriate for your population and context ### Important Considerations - BV data may vary by population, age, sex, and health status - Ensure the BV data match your intended use population - Higher quality grades (A, B) indicate more reliable estimates - When multiple estimates exist, consider the range ## Beyond Biological Variation While the biological variation model is widely used, it is not the only approach to setting quality specifications. Other models include: 1. **Clinical outcome-based**: Specifications derived from clinical decision limits 2. **State-of-the-art**: Based on achievable performance (e.g., proficiency testing data) 3. **Regulatory requirements**: Fixed limits from agencies (e.g., CLIA) The `ate_assessment()` and `sigma_metric()` functions work with TEa values from any source—simply provide your specification directly rather than calculating from biological variation. ```{r other-sources} # Using a CLIA-based TEa for glucose (example: ±6 mg/dL or ±10%) # For a sample at 100 mg/dL, 10% = 10 mg/dL sm_clia <- sigma_metric(bias = 2, cv = 3, tea = 10) sm_clia ``` ## Summary The biological variation model provides a scientifically grounded approach to setting analytical quality specifications: 1. **`ate_from_bv()`** translates biological variation into actionable specifications 2. **`sigma_metric()`** provides a universal quality scale for comparing methods 3. **`ate_assessment()`** gives a clear pass/fail evaluation These tools help laboratories make informed decisions about method acceptability while recognizing that the final decision depends on clinical context and regulatory requirements. ## References Fraser CG, Petersen PH (1993). Desirable standards for laboratory tests if they are to fulfill medical needs. Clinical Chemistry, 39(7):1447-1453. Ricos C, Alvarez V, Cava F, et al. (1999). Current databases on biological variation: pros, cons and progress. Scandinavian Journal of Clinical and Laboratory Investigation, 59(7):491-500. Aarsand AK, Fernandez-Calle P, Webster C, et al. (2020). The EFLM Biological Variation Database. https://biologicalvariation.eu/ Westgard JO, Westgard SA (2006). The quality of laboratory testing today: an assessment of sigma metrics for analytic quality using performance data from proficiency testing surveys and the CLIA criteria for acceptable performance. American Journal of Clinical Pathology, 125(3):343-354.