How to Calculate Coefficient of Variation: Formula, Intra-Assay and Inter-Assay CV
By Dr. Zubair Khalid, DVM, MS, PhD ·

The coefficient of variation (CV) expresses the standard deviation as a percentage of the mean. It converts a spread that depends on the units of your measurement into a unitless number, which makes variability comparable across assays, instruments, and concentration ranges. A standard deviation of 2 ng/mL means something very different at a mean of 10 ng/mL than at a mean of 500 ng/mL. The CV puts both on the same scale.
If you run ELISAs, qPCR, HPLC, or any quantitative assay, you will report CVs in validation documents and method sections. Regulators expect them. ICH M10 defines precision as the CV or relative standard deviation (RSD) and sets acceptance limits for both within-run and between-run precision [1]. This article covers the formula, the difference between intra-assay and inter-assay CV, a worked example you can follow by hand, and the assumptions that break the calculation when you ignore them.
Quick Answer
- The CV formula is the standard deviation divided by the mean, multiplied by 100 to give a percentage: $CV = \frac{s}{\bar{x}} \times 100$
- Intra-assay CV (within-run precision) measures replicate variability inside a single run. Inter-assay CV (between-run precision) measures variability across runs, days, or operators.
- ICH M10 acceptance limits for chromatographic assays are %CV ≤ 15%, relaxed to ≤ 20% at the LLOQ. For ligand-binding assays, limits are ≤ 20%, relaxed to ≤ 25% at the LLOQ and ULOQ [1].
- Use the sample standard deviation (denominator n - 1) for lab work. SciPy's
scipy.stats.variationdefaults to the population version (ddof = 0), so set ddof = 1 to match your spreadsheet or validation report [5]. - The CV assumes a ratio scale with a meaningful zero and roughly symmetric data. For log-normal data, the standard formula underestimates variability, and you need the log-normal version [4].
The CV Formula and What Each Symbol Means
The coefficient of variation is defined as:
$$CV = \frac{s}{\bar{x}} \times 100$$
where:
- $s$ is the standard deviation of the measurements
- $\bar{x}$ is the arithmetic mean
- The result is a percentage, often written %CV
When you report the CV as a proportion instead of a percentage, drop the 100. ICH M10 uses CV and RSD interchangeably and defines %CV as (SD/Mean) × 100 [1]. The two names describe the same quantity: the relative standard deviation is the CV expressed as a fraction or percentage of the mean.
The standard deviation itself comes from:
$$s = \sqrt{\frac{\sum_{i=1}^{n}(x_i - \bar{x})^2}{n - 1}}$$
The denominator n - 1 gives the sample standard deviation, built from the unbiased estimate of the population variance. The denominator n gives the population standard deviation, which describes the data in hand but underestimates the true spread. NIST treats these as distinct measures of scale, and the choice matters for small replicate counts [6]. With n = 5 or 6 replicates, the difference between the two is not trivial.
SciPy's scipy.stats.variation computes the ratio of standard deviation to mean but uses ddof = 0 by default, which is the population form [5]. If you call it on a list of replicates and compare the output to Excel's STDEV.S-based calculation, the numbers will not match. Pass ddof=1 to align with the sample standard deviation used in most lab reporting.
How to Calculate Coefficient of Variation Step by Step
- Collect your replicate measurements. Record them in the units you will report.
- Compute the mean, $\bar{x}$, by summing the values and dividing by n.
- Compute each deviation from the mean, $x_i - \bar{x}$.
- Square each deviation and sum them.
- Divide the sum of squares by n - 1 to get the sample variance, $s^2$.
- Take the square root to get $s$.
- Divide $s$ by $\bar{x}$ and multiply by 100.
That is the whole procedure. The arithmetic is simple; the judgment calls are about which replicates belong in the calculation and which standard deviation to use.
Worked Example
The following data are illustrative and constructed for teaching, not measured from a real assay.
Suppose you run six replicates of a quality control sample and obtain:
| Replicate | Value |
|---|---|
| 1 | 48.2 |
| 2 | 50.1 |
| 3 | 49.5 |
| 4 | 51.0 |
| 5 | 47.9 |
| 6 | 50.3 |
The mean is 49.5. The sum of squared deviations is 7.50, so the sample variance is 7.50 / 5 = 1.50, and the sample standard deviation is 1.2247. The CV is:
$$CV = \frac{1.2247}{49.5} \times 100 = 2.474\%$$
If you instead use the population standard deviation (dividing by n = 6), the CV comes out to 2.259%. Both are defensible depending on what you are estimating, but the sample version is the one that estimates the underlying assay variability, and it is the one to report unless your SOP says otherwise.
You can check this arithmetic with the Coefficient of Variation Calculator on this site, or verify the standard deviation separately with the Standard Deviation Calculator.
Intra-Assay CV: Within-Run Precision
Intra-assay CV, also called within-run or repeatability precision, measures how tightly replicates agree when they are measured in the same run, on the same plate, by the same operator, with the same reagent lot. It captures the short-term noise of the measurement system.
To compute it, run several replicates of the same sample in one run and apply the CV formula to those replicates. ICH M10 requires at least 5 replicates per QC level per run for chromatographic assays [1]. For ligand-binding assays, the requirement is at least 3 replicates per level, but the precision is assessed across a larger design (see the next section) [1].
A common design for a dilution series uses duplicate wells at each concentration. The following duplicate pairs are illustrative:
| Sample | Replicate 1 | Replicate 2 | CV (%) |
|---|---|---|---|
| S1 | 12.1 | 12.9 | 4.525 |
| S2 | 25.4 | 24.6 | 2.263 |
| S3 | 51.0 | 49.2 | 2.541 |
| S4 | 98.5 | 102.3 | 2.676 |
The mean intra-assay CV across these four samples is 3.001%. Note that a duplicate CV is based on only two measurements, so it is a noisy estimate. It tells you whether the pair agrees, not what the true assay precision is. For a defensible intra-assay CV, use more replicates per level.
Inter-Assay CV: Between-Run Precision
Inter-assay CV, also called between-run or intermediate precision, measures variability across runs. It captures sources of variation that intra-assay CV cannot see: different days, reagent lots, instrument calibrations, operators, and plate positions.
The design matters. ICH M10 for chromatographic methods requires at least 3 runs over at least 2 days [1]. For ligand-binding assays, the requirement is at least 3 replicates per level in at least 6 runs over at least 2 days [1]. The larger design reflects the greater day-to-day variability typical of immunoassays.
A simple way to compute inter-assay CV is to treat each run's mean as a single observation and apply the CV formula across run means. Suppose you run a control sample once per day for five days and obtain these run means (illustrative data):
| Run | Mean value |
|---|---|
| 1 | 101.2 |
| 2 | 96.8 |
| 3 | 104.5 |
| 4 | 99.1 |
| 5 | 93.9 |
The mean of the run means is 99.1, the standard deviation is 4.059, and the CV is 4.096%.
This approach is a simplification. A full variance component analysis partitions total variability into within-run and between-run components, which is what Andreasson and colleagues describe when they distinguish repeatability from intermediate precision [2]. For most lab reports, the run-mean CV is adequate and is what many validation templates expect. For method development or troubleshooting, the variance component approach tells you where the variability actually lives.
Percent CV and the Log-Normal Problem
Percent CV is just the CV expressed as a percentage, which is the usual convention in assay validation. The formula is the same; the "percent" is a labeling choice.
The problem arises when your data are log-normal. Many biological analytes, including antibody titers and cytokine concentrations, often follow a log-normal distribution instead of a normal one. When you apply the standard %CV formula to log-normal data, you get a value that is too small and therefore optimistic about your assay's precision [4]. Canchola and colleagues give the correct formula for log-normal data:
$$CV = 100 \times \sqrt{\exp(s_{\ln}^2) - 1}$$
where $s_{\ln}$ is the standard deviation of the natural-log-transformed values. As a check: if $s_{\ln} = 0.25$, then $s_{\ln}^2 = 0.0625$, and the CV is 100 × √(exp(0.0625) - 1) = 25.40%. The standard formula applied to the same data would give a smaller number.
If your data span more than about a tenfold range or show clear right skew, check whether a log transform is appropriate before you report a %CV. The variance stabilizing transformation article linked below covers when and how to make that decision.
Common Mistakes
- Using the population standard deviation when you meant the sample version. The fix: decide before you calculate. For estimating assay precision from replicates, use n - 1. For describing the exact spread of the data you have, n is defensible, but state which you used.
- Computing a CV from two replicates and treating it as the assay precision. The fix: report it as a duplicate agreement check, not as a precision estimate. Use at least 5 replicates per level for a within-run CV [1].
- Mixing concentrations in one CV calculation. The fix: compute CV per level. A CV pooled across a wide concentration range is not interpretable because the standard deviation scales with the mean.
- Applying the standard %CV formula to log-normal data. The fix: use the log-normal formula [4], or report the CV on the log scale and say so.
- Ignoring the LLOQ and ULOQ relaxation. The fix: check the acceptance criteria for your assay type. Chromatographic methods allow ≤ 20% at the LLOQ; ligand-binding assays allow ≤ 25% at both LLOQ and ULOQ [1].
- Reporting more decimal places than the data support. The fix: match the precision of the CV to the precision of the underlying measurements. A CV of 2.474% from values reported to one decimal place is already generous.
Limitations
The CV is undefined when the mean is zero or near zero, and it becomes unstable when the mean is small relative to the standard deviation. For an assay near its detection limit, a CV of 30% may reflect the measurement floor, not poor precision. This is why LLOQ is often defined as the lowest concentration where %CV stays below a threshold, typically 20% for most samples [2].
The CV assumes a ratio scale, meaning the zero point is meaningful and equal ratios represent equal differences. That holds for concentration, mass, and time. It does not hold for temperature in Celsius or Fahrenheit, where zero is arbitrary, and a CV computed on such data is meaningless.
The CV also assumes that the standard deviation is proportional to the mean. When that proportionality breaks down, for example when the standard deviation is roughly constant across a wide range, the CV will vary systematically with concentration, and comparing CVs across levels becomes misleading. Plotting %CV against concentration, as Andreasson and colleagues recommend, reveals this pattern [2].
Finally, the CV is a point estimate. With few replicates, it carries substantial uncertainty. Reed and colleagues showed how the CV relates to the expected fraction of measurement pairs that differ by a given factor, which is a more intuitive way to think about what a CV of 10% or 20% actually means for a single sample [3]. A CV of 10% does not mean every pair of measurements agrees within 10%.
Frequently Asked Questions
What is the difference between CV and standard deviation?
Standard deviation is in the units of the measurement; CV is unitless because it divides by the mean. Use standard deviation when you care about absolute spread in the original units. Use CV when you want to compare variability across assays, instruments, or concentration ranges with different units or scales.
Should I use n or n - 1 for the standard deviation in a CV?
Use n - 1 when you are estimating the underlying assay variability from a sample of replicates, which is the usual case in validation work. Use n only when you are describing the exact spread of the data in hand and do not intend to generalize. SciPy defaults to n (ddof = 0), so set ddof = 1 to match the sample version [5].
What is an acceptable CV for an assay?
It depends on the assay type and the concentration. ICH M10 sets %CV ≤ 15% for chromatographic assays, relaxed to ≤ 20% at the LLOQ, and ≤ 20% for ligand-binding assays, relaxed to ≤ 25% at the LLOQ and ULOQ [1]. These are upper limits for acceptance, not targets. Many labs aim lower for routine QC.
Can I calculate a CV from two replicates?
You can, but the result is a noisy estimate of precision. A duplicate CV tells you whether that specific pair agreed, not what the assay's precision is. For a defensible intra-assay CV, use at least 5 replicates per level [1].
Why is my %CV different from what the software reports?
Check the degrees of freedom. SciPy's scipy.stats.variation uses ddof = 0 by default [5], while Excel's STDEV.S and most validation templates use n - 1. The difference is small for large n but noticeable for n = 5 or 6. Also check whether the software is computing the CV on log-transformed data, which changes the formula [4].
References
- ICH M10 Bioanalytical Method Validation and Study Sample Analysis, Step 4 guideline (2022)
- Andreasson U, Perret-Liaudet A, van Waalwijk van Doorn LJ, et al. A practical guide to immunoassay method validation. Frontiers in Neurology, 2015
- Reed GF, Lynn F, Meade BD. Use of coefficient of variation in assessing variability of quantitative assays. Clinical and Diagnostic Laboratory Immunology, 2002 (PubMed)
- Canchola JA, Tang S, Hemyari P, et al. Correct use of percent coefficient of variation (%CV) formula for log-transformed data. MOJ Proteomics and Bioinformatics, 2017
- SciPy documentation: scipy.stats.variation
- NIST/SEMATECH e-Handbook of Statistical Methods: Measures of scale
Related Articles
- Precision and Accuracy in Immunoassay Validation
- ELISA Assay Validation: Key Parameters and Protocols
- Verification of Precision and Accuracy for a Standard Method
- How to Perform a Gravimetric Pipette Calibration
- Variance Stabilizing Transformation: When and How
- Median Absolute Deviation: Formula and Worked Example