Home / Science / Environmental science / Environmental monitoring / Non-detect statisticsTool #153

Non-detect statistics: mean, median and percentiles of lab results with "<DL" values (Kaplan–Meier, ROS, MLE)

Work out the mean, median, upper percentiles and an upper confidence limit for lab results that include non-detects ("<1", "ND"), even with several detection limits. Uses Kaplan–Meier, robust ROS and maximum likelihood instead of substituting half the limit, compares every method side by side, and counts results above a guideline.

Keep it one tap away for everyday use.

Bookmark Non-detect statistics?

Press Ctrl + D now. Your browser opens its own bookmark box, where you choose the name and folder.

  1. Results
  2. Non-detects
  3. Statistics
  4. Guideline
Nothing is uploadedWorks offline once open

Results

Several limits are fine, and a detected value may sit below another sample's limit. Kaplan–Meier makes no assumption about the shape of the data; ROS and maximum likelihood assume the values follow a log-normal shape. Substituting zero, half the limit or the limit is shown only for comparison, because it can bias the results. Fill in a guideline value to see how many samples exceed it. Up to 20,000 results. The example results are made up.

Summary

Every method

Results with ROS values

Download

What it does

Lab reports often say “<1 µg/L”: the substance was not detected, and could be anywhere from zero up to the detection (or reporting) limit. These non-detects are real information, but they are not numbers, so an ordinary average cannot use them. The common shortcut, replacing each with half the limit, can bias the mean and the spread, especially when there are several limits or many non-detects.

This tool uses the methods recommended for environmental data instead:

  • Kaplan–Meier, borrowed from survival analysis by flipping the data so that “less than” becomes “more than”. It makes no assumption about the shape of the data and is the usual first choice.
  • Robust ROS (regression on order statistics). Fits a log-normal line through the detected values and uses it only to fill in the non-detects. The detected values are kept as measured.
  • Maximum likelihood for a log-normal distribution with censoring. Best when the data really are log-normal and there are enough of them.

The substitution results (0, half the limit, the limit) are shown next to them, so you can see how much the choice matters.

How to use it

  1. Paste or open the results, one per row, with an optional sample name first. Write non-detects as “<1” or “ND 1”, or put a flag (”<”, “ND”, “U”) in the column after the value. Rows with several values and no names are also read, one result per value.
  2. Several detection limits are fine. So is a detected value below another sample’s limit, which often happens when samples are diluted.
  3. Unit is used only for the labels.
  4. Guideline value (optional): the tool counts the results above it. Non-detects with a limit above the guideline cannot be placed either side, and the tool says so.

What you get

  • The Kaplan–Meier mean and median, the standard error of the mean, and an upper 95 % confidence limit of the mean (mean + t × standard error), often used for exposure-point concentrations.
  • A table of every method: mean, standard deviation, median, 90th and 95th percentiles, and what each one assumes.
  • A plot of the cumulative distribution on a log scale, with the Kaplan–Meier steps, the fitted log-normal, each result at its plotting position and the detection limits marked.
  • Each result with its ROS value, plus CSV, PDF, PNG and Word downloads.

Worked example

The made-up example has 16 arsenic results from wells. Five are non-detects at two limits (<1 three times, <2 twice), and one detected value (0.8 µg/L) is below the <1 limit.

  • Kaplan–Meier: mean 2.48 µg/L, median 1.5 µg/L, standard error 0.603. The upper 95 % confidence limit of the mean is 3.54 µg/L.
  • Robust ROS: mean 2.43 µg/L, with the non-detects filled in at 0.38 to 1.16 µg/L.
  • Maximum likelihood (log-normal): mean 2.45 µg/L.
  • Substitution: half the limit gives 2.43 µg/L, and zero gives 2.21 µg/L.

The three proper methods agree to within about 2 % here, because only 31 % of the results are non-detects. Substituting zero is already 11 % lower. With more non-detects, or with limits higher than many detected values, the methods drift apart and substitution can be badly wrong.

Good practice

  • Below about 50 % non-detects, all three methods work well. From 50 to 80 %, report the upper percentiles with more confidence than the mean. Above 80 %, report the share detected and the highest values instead of a mean.
  • When the lowest result is a non-detect, the Kaplan–Meier mean puts the unknown lowest part at the lowest limit, so it is a little high. The tool notes this.
  • Never report a non-detect as zero or as the limit in a summary without saying so.

FAQs

Which method should I report? Kaplan–Meier, unless you have a reason to assume a log-normal shape. ROS is a good second opinion, and it gives values you can use in other calculations.

Why is the median “<2”? When more than half the results are non-detects, the median is below a detection limit and cannot be pinned down. That is an honest answer, not an error.

Is my data uploaded? No. Everything runs in your browser.

Where the numbers come from

  • Methods for non-detects as described by D. R. Helsel, Statistics for Censored Environmental Data (Wiley, 2nd ed. 2012): Kaplan–Meier on flipped data, robust regression on order statistics (Helsel and Cohn 1988, with Hirsch and Stedinger plotting positions), and maximum likelihood. Method only; no tables are copied.
  • Written by fibub. Checked in the tests against statsmodels 0.15 (SurvfuncRight on the flipped data, impute_ros) and SciPy (censored log-normal likelihood).
  • The example results are made up.

Standard scientific values, such as constants, atomic weights and melting points, are facts found in every textbook; we name where ours were checked. If you are an author or publisher and want a value, a credit or a table changed or removed, tell us and we will act quickly.

Last updated 2026-11-09.

Change log for Non-detect statistics

  1. Add #153 non-detect statistics (Kaplan-Meier, ROS, MLE) Details on GitHub

Every change to fibub

Related tools

Air quality calculator #116 Convert gas concentrations between ppm, ppb, µg/m³ and mg/m³ at any temperature and pressure, and work out the US Air Quality Index (with the 2024 PM2.5 breakpoints), India's National AQI and Canada's Air Quality Health Index from your own readings. Landfill gas estimator #154 Estimate the methane and landfill gas a site makes each year from the tonnes of waste placed. Uses the first-order decay model with your decay rate k and methane potential L0. Shows the peak, the gas flow in m³/h, how much a collection system captures, the power it could make, and the methane and CO2-equivalent emitted. Species sensitivity distribution #152 Turn toxicity values for many species into one protective concentration. Fit a species sensitivity distribution (log-normal, log-logistic or their AICc average), read off the HC5 or any other HCp with bootstrap limits, see the fraction of species affected at any concentration, and plot every species on the curve. Water quality index #156 Turn a season of water lab results into one score from 0 to 100 using the CCME water quality index method. Enter the objectives that apply to your water and the results for each sample. See how many variables and tests failed and by how much, the score and its category, and which samples failed. Bioaccumulation factor calculator #159 Work out a kinetic bioconcentration factor from a fish test: fit the uptake rate k1 and depuration rate k2 to your time course and get BCF = k1/k2 with a confidence interval, half-life, time to steady state, steady-state BCF, growth correction and lipid normalisation. Or get the trophic magnification factor of a food web from trophic levels and concentrations. Field sampling planner #158 Plan where to take field samples. Draw your site boundary, work out how many samples you need (to estimate an average, compare with an action level, or find a hot spot of a given size), and lay the points out on a square or triangular grid, stratified random or simple random. Download the points as CSV or as GPX for a GPS. Survival analysis (Kaplan-Meier, log-rank, Cox) #467 Paste time, event and group to draw Kaplan-Meier curves with Greenwood intervals, median survival with its interval, a number-at-risk table, the log-rank test for two or more groups and a Cox proportional hazards model with hazard ratios. Matches lifelines and statsmodels. Calibration curve with LOD and LOQ #28 Paste your standards and get the calibration line, R², limits of detection and quantitation (ICH Q2), and the concentration of each unknown with a 95 % interval. Uncertainty propagation calculator #25 Type your formula and your measurements with their uncertainties, or paste repeated readings. Get the result with its uncertainty, which input matters most, and a Monte Carlo check. Reference interval calculator #502 Paste results from healthy reference people and get the central 95 % reference interval by the CLSI rank method with 90 % confidence intervals, a parametric interval on the raw, log or Box-Cox scale, Tukey or Dixon outlier screens, a Harris-Boyd check for subgroups and a histogram.