Background Threshold validation
Free upper background limit calculations for environmental datasets: UCL, UPL, UTL and USL with distribution selection and non-detect handling.
- Scenarios
- 9
- Values agreeing
- 40
- Values differing
- 2
- Validated against
- USEPA ProUCL, R EnvStats / nortest
Prediction, tolerance and simultaneous limits are compared against USEPA ProUCL at three sample sizes. Prediction and tolerance limits are also compared against R EnvStats. Tolerance factors follow ProUCL's published table up to thirty results and the Natrella approximation above it; EnvStats computes the exact non-central t factor, which differs by about 0.1 per cent above thirty results. The censored-data estimators are shared with Descriptive Statistics.
Scenarios
- Upper tolerance limit covering 95% of the population at 95% confidence (N10)Boundary case
- Upper tolerance limit covering 95% of the population at 95% confidence (N50)Boundary case
- Upper prediction limit for a single future result (N10)Typical use
- Upper prediction limit for a single future result (N20)Typical use
- Upper prediction limit for a single future result (N50)Typical use
- Upper simultaneous limit bounding every observation at once (N10)Typical use
- Upper simultaneous limit bounding every observation at once (N20)Typical use
- Upper simultaneous limit bounding every observation at once (N50)Typical use
- Upper tolerance limit covering 95% of the population at 95% confidence (N20)Boundary case
Upper tolerance limit covering 95% of the population at 95% confidence (N10)
Boundary caseInput
10 values
| value |
|---|
| 4.2 |
| 5.1 |
| 6.3 |
| 7.8 |
| 9.1 |
| 11.4 |
| 3.3 |
| 8.8 |
| 12.1 |
| 6.6 |
Settings: limitType = utl, distribution = normal, confidence = 0.95, coverage = 0.95
Against USEPA ProUCL (ProUCL 5.2.0)
| Value | USEPA ProUCL | EnviroAutomate | Difference | Agreement band | Verdict |
|---|---|---|---|---|---|
| Sample size (n) n | 10 | 10 | 0 | exact match | Agree |
| Limit limitValue | 15.997954893310197 | 15.997954893310197 | 0 | within 0.000001 relative | Agree |
Against R EnvStats / nortest (EnvStats 3.1.0, nortest 1.0-4, R 4.6.1)
| Value | R EnvStats / nortest | EnviroAutomate | Difference | Agreement band | Verdict |
|---|---|---|---|---|---|
| Sample size (n) n | 10 | 10 | 0 | exact match | Agree |
| Mean mean | 7.47 | 7.469999999999999 | 8.88e-16 | within 0.000001 relative | Agree |
| Standard deviation sd | 2.929561969532874 | 2.9295619695328745 | 4.44e-16 | within 0.000001 relative | Agree |
| Limit limitValue | 15.997847709663812 | 15.997954893310197 | 0.000107 | within 0.000001 relative | Differs |
| Why these differ: EnvStats computes the tolerance factor exactly, from the non-central t distribution. This toolkit uses the factor ProUCL uses - a published table up to thirty results, and the Natrella approximation above it - because we assume a reviewer checking this limit will be checking it against ProUCL, and the two agree here to the last digit. Below thirty results the table and the exact value are within a rounding of each other. Above it the approximation is about a tenth of a percent low against the exact figure, which is the difference visible on this row. Adopting the table was itself a correction: the approximation alone gave 2.8748 at ten results where the table gives 2.911, and that 1.2% error understated a background threshold. | |||||
Upper tolerance limit covering 95% of the population at 95% confidence (N50)
Boundary caseInput
50 values
| value |
|---|
| 6.64 |
| 10.98 |
| 8.53 |
| 12.87 |
| 10.42 |
| 7.97 |
| 12.31 |
| 9.86 |
| 7.41 |
| 11.75 |
| 9.3 |
| 6.85 |
| 11.19 |
| 8.74 |
| 13.08 |
| 10.63 |
| 8.18 |
| 12.52 |
| 10.07 |
| 7.62 |
| 11.96 |
| 9.51 |
| 7.06 |
| 11.4 |
| 8.95 |
| 13.29 |
| 10.84 |
| 8.39 |
| 12.73 |
| 10.28 |
| 7.83 |
| 12.17 |
| 9.72 |
| 7.27 |
| 11.61 |
| 9.16 |
| 6.71 |
| 11.05 |
| 8.6 |
| 12.94 |
| 10.49 |
| 8.04 |
| 12.38 |
| 9.93 |
| 7.48 |
| 11.82 |
| 9.37 |
| 6.92 |
| 11.26 |
| 8.81 |
Settings: limitType = utl, distribution = normal, confidence = 0.95, coverage = 0.95
Against USEPA ProUCL (ProUCL 5.2.0)
| Value | USEPA ProUCL | EnviroAutomate | Difference | Agreement band | Verdict |
|---|---|---|---|---|---|
| Sample size (n) n | 50 | 50 | 0 | exact match | Agree |
| Limit limitValue | 13.979968008806239 | 13.979968005971887 | 2.83e-9 | within 0.000001 relative | Agree |
Against R EnvStats / nortest (EnvStats 3.1.0, nortest 1.0-4, R 4.6.1)
| Value | R EnvStats / nortest | EnviroAutomate | Difference | Agreement band | Verdict |
|---|---|---|---|---|---|
| Sample size (n) n | 50 | 50 | 0 | exact match | Agree |
| Mean mean | 9.8978 | 9.897800000000002 | 1.78e-15 | within 0.000001 relative | Agree |
| Standard deviation sd | 1.9830890045582932 | 1.9830890045582927 | 4.44e-16 | within 0.000001 relative | Agree |
| Limit limitValue | 13.992865741217095 | 13.979968005971887 | 0.0129 | within 0.000001 relative | Differs |
| Why these differ: EnvStats computes the tolerance factor exactly, from the non-central t distribution. This toolkit uses the factor ProUCL uses - a published table up to thirty results, and the Natrella approximation above it - because we assume a reviewer checking this limit will be checking it against ProUCL, and the two agree here to the last digit. Below thirty results the table and the exact value are within a rounding of each other. Above it the approximation is about a tenth of a percent low against the exact figure, which is the difference visible on this row. Adopting the table was itself a correction: the approximation alone gave 2.8748 at ten results where the table gives 2.911, and that 1.2% error understated a background threshold. | |||||
Upper prediction limit for a single future result (N10)
Typical useInput
10 values
| value |
|---|
| 4.2 |
| 5.1 |
| 6.3 |
| 7.8 |
| 9.1 |
| 11.4 |
| 3.3 |
| 8.8 |
| 12.1 |
| 6.6 |
Settings: limitType = upl, distribution = normal, confidence = 0.95, coverage = 0.95
Against USEPA ProUCL (ProUCL 5.2.0)
| Value | USEPA ProUCL | EnviroAutomate | Difference | Agreement band | Verdict |
|---|---|---|---|---|---|
| Sample size (n) n | 10 | 10 | 0 | exact match | Agree |
| Limit limitValue | 13.102332124158544 | 13.102332085118997 | 3.90e-8 | within 0.000001 relative | Agree |
Against R EnvStats / nortest (EnvStats 3.1.0, nortest 1.0-4, R 4.6.1)
| Value | R EnvStats / nortest | EnviroAutomate | Difference | Agreement band | Verdict |
|---|---|---|---|---|---|
| Sample size (n) n | 10 | 10 | 0 | exact match | Agree |
| Mean mean | 7.47 | 7.469999999999999 | 8.88e-16 | within 0.000001 relative | Agree |
| Standard deviation sd | 2.929561969532874 | 2.9295619695328745 | 4.44e-16 | within 0.000001 relative | Agree |
| Limit limitValue | 13.102332085119 | 13.102332085118997 | 3.55e-15 | within 0.000001 relative | Agree |
Upper prediction limit for a single future result (N20)
Typical useInput
20 values
| value |
|---|
| 9.8 |
| 10.4 |
| 11.2 |
| 9.1 |
| 10.8 |
| 12 |
| 8.7 |
| 10.1 |
| 11.6 |
| 9.5 |
| 10.9 |
| 10.3 |
| 10 |
| 9.9 |
| 10.6 |
| 11 |
| 9.4 |
| 10.2 |
| 10.7 |
| 9.7 |
Settings: limitType = upl, distribution = normal, confidence = 0.95, coverage = 0.95
Against USEPA ProUCL (ProUCL 5.2.0)
| Value | USEPA ProUCL | EnviroAutomate | Difference | Agreement band | Verdict |
|---|---|---|---|---|---|
| Sample size (n) n | 20 | 20 | 0 | exact match | Agree |
| Limit limitValue | 11.766767699534803 | 11.766767691283933 | 8.25e-9 | within 0.000001 relative | Agree |
Against R EnvStats / nortest (EnvStats 3.1.0, nortest 1.0-4, R 4.6.1)
| Value | R EnvStats / nortest | EnviroAutomate | Difference | Agreement band | Verdict |
|---|---|---|---|---|---|
| Sample size (n) n | 20 | 20 | 0 | exact match | Agree |
| Mean mean | 10.295 | 10.294999999999998 | 1.78e-15 | within 0.000001 relative | Agree |
| Standard deviation sd | 0.8306465458969454 | 0.8306465458969454 | 0 | within 0.000001 relative | Agree |
| Limit limitValue | 11.766767691283949 | 11.766767691283933 | 1.60e-14 | within 0.000001 relative | Agree |
Upper prediction limit for a single future result (N50)
Typical useInput
50 values
| value |
|---|
| 6.64 |
| 10.98 |
| 8.53 |
| 12.87 |
| 10.42 |
| 7.97 |
| 12.31 |
| 9.86 |
| 7.41 |
| 11.75 |
| 9.3 |
| 6.85 |
| 11.19 |
| 8.74 |
| 13.08 |
| 10.63 |
| 8.18 |
| 12.52 |
| 10.07 |
| 7.62 |
| 11.96 |
| 9.51 |
| 7.06 |
| 11.4 |
| 8.95 |
| 13.29 |
| 10.84 |
| 8.39 |
| 12.73 |
| 10.28 |
| 7.83 |
| 12.17 |
| 9.72 |
| 7.27 |
| 11.61 |
| 9.16 |
| 6.71 |
| 11.05 |
| 8.6 |
| 12.94 |
| 10.49 |
| 8.04 |
| 12.38 |
| 9.93 |
| 7.48 |
| 11.82 |
| 9.37 |
| 6.92 |
| 11.26 |
| 8.81 |
Settings: limitType = upl, distribution = normal, confidence = 0.95, coverage = 0.95
Against USEPA ProUCL (ProUCL 5.2.0)
| Value | USEPA ProUCL | EnviroAutomate | Difference | Agreement band | Verdict |
|---|---|---|---|---|---|
| Sample size (n) n | 50 | 50 | 0 | exact match | Agree |
| Limit limitValue | 13.255632324245093 | 13.255632541539594 | 2.17e-7 | within 0.000001 relative | Agree |
Against R EnvStats / nortest (EnvStats 3.1.0, nortest 1.0-4, R 4.6.1)
| Value | R EnvStats / nortest | EnviroAutomate | Difference | Agreement band | Verdict |
|---|---|---|---|---|---|
| Sample size (n) n | 50 | 50 | 0 | exact match | Agree |
| Mean mean | 9.8978 | 9.897800000000002 | 1.78e-15 | within 0.000001 relative | Agree |
| Standard deviation sd | 1.9830890045582932 | 1.9830890045582927 | 4.44e-16 | within 0.000001 relative | Agree |
| Limit limitValue | 13.255632541537901 | 13.255632541539594 | 1.69e-12 | within 0.000001 relative | Agree |
Upper simultaneous limit bounding every observation at once (N10)
Typical useInput
10 values
| value |
|---|
| 4.2 |
| 5.1 |
| 6.3 |
| 7.8 |
| 9.1 |
| 11.4 |
| 3.3 |
| 8.8 |
| 12.1 |
| 6.6 |
Settings: limitType = usl, distribution = normal, confidence = 0.95, coverage = 0.95
Against USEPA ProUCL (ProUCL 5.2.0)
| Value | USEPA ProUCL | EnviroAutomate | Difference | Agreement band | Verdict |
|---|---|---|---|---|---|
| Sample size (n) n | 10 | 10 | 0 | exact match | Agree |
| Limit limitValue | 13.844927248373635 | 13.844927210733864 | 3.76e-8 | within 0.000001 relative | Agree |
Not run for this scenario
- R EnvStats / nortest - This limit is a Bonferroni bound over the sample, which EnvStats does not offer; it is checked against ProUCL.
Upper simultaneous limit bounding every observation at once (N20)
Typical useInput
20 values
| value |
|---|
| 9.8 |
| 10.4 |
| 11.2 |
| 9.1 |
| 10.8 |
| 12 |
| 8.7 |
| 10.1 |
| 11.6 |
| 9.5 |
| 10.9 |
| 10.3 |
| 10 |
| 9.9 |
| 10.6 |
| 11 |
| 9.4 |
| 10.2 |
| 10.7 |
| 9.7 |
Settings: limitType = usl, distribution = normal, confidence = 0.95, coverage = 0.95
Against USEPA ProUCL (ProUCL 5.2.0)
| Value | USEPA ProUCL | EnviroAutomate | Difference | Agreement band | Verdict |
|---|---|---|---|---|---|
| Sample size (n) n | 20 | 20 | 0 | exact match | Agree |
| Limit limitValue | 12.418615439838208 | 12.418615454801007 | 1.50e-8 | within 0.000001 relative | Agree |
Not run for this scenario
- R EnvStats / nortest - This limit is a Bonferroni bound over the sample, which EnvStats does not offer; it is checked against ProUCL.
Upper simultaneous limit bounding every observation at once (N50)
Typical useInput
50 values
| value |
|---|
| 6.64 |
| 10.98 |
| 8.53 |
| 12.87 |
| 10.42 |
| 7.97 |
| 12.31 |
| 9.86 |
| 7.41 |
| 11.75 |
| 9.3 |
| 6.85 |
| 11.19 |
| 8.74 |
| 13.08 |
| 10.63 |
| 8.18 |
| 12.52 |
| 10.07 |
| 7.62 |
| 11.96 |
| 9.51 |
| 7.06 |
| 11.4 |
| 8.95 |
| 13.29 |
| 10.84 |
| 8.39 |
| 12.73 |
| 10.28 |
| 7.83 |
| 12.17 |
| 9.72 |
| 7.27 |
| 11.61 |
| 9.16 |
| 6.71 |
| 11.05 |
| 8.6 |
| 12.94 |
| 10.49 |
| 8.04 |
| 12.38 |
| 9.93 |
| 7.48 |
| 11.82 |
| 9.37 |
| 6.92 |
| 11.26 |
| 8.81 |
Settings: limitType = usl, distribution = normal, confidence = 0.95, coverage = 0.95
Against USEPA ProUCL (ProUCL 5.2.0)
| Value | USEPA ProUCL | EnviroAutomate | Difference | Agreement band | Verdict |
|---|---|---|---|---|---|
| Sample size (n) n | 50 | 50 | 0 | exact match | Agree |
| Limit limitValue | 15.761744301336439 | 15.761744306137661 | 4.80e-9 | within 0.000001 relative | Agree |
Not run for this scenario
- R EnvStats / nortest - This limit is a Bonferroni bound over the sample, which EnvStats does not offer; it is checked against ProUCL.
Upper tolerance limit covering 95% of the population at 95% confidence (N20)
Boundary caseInput
20 values
| value |
|---|
| 9.8 |
| 10.4 |
| 11.2 |
| 9.1 |
| 10.8 |
| 12 |
| 8.7 |
| 10.1 |
| 11.6 |
| 9.5 |
| 10.9 |
| 10.3 |
| 10 |
| 9.9 |
| 10.6 |
| 11 |
| 9.4 |
| 10.2 |
| 10.7 |
| 9.7 |
Settings: limitType = utl, distribution = normal, confidence = 0.95, coverage = 0.95
Against USEPA ProUCL (ProUCL 5.2.0)
| Value | USEPA ProUCL | EnviroAutomate | Difference | Agreement band | Verdict |
|---|---|---|---|---|---|
| Sample size (n) n | 20 | 20 | 0 | exact match | Agree |
| Limit limitValue | 12.28522912396908 | 12.28522912396908 | 0 | within 0.000001 relative | Agree |
Against R EnvStats / nortest (EnvStats 3.1.0, nortest 1.0-4, R 4.6.1)
| Value | R EnvStats / nortest | EnviroAutomate | Difference | Agreement band | Verdict |
|---|---|---|---|---|---|
| Sample size (n) n | 20 | 20 | 0 | exact match | Agree |
| Mean mean | 10.295 | 10.294999999999998 | 1.78e-15 | within 0.000001 relative | Agree |
| Standard deviation sd | 0.8306465458969454 | 0.8306465458969454 | 0 | within 0.000001 relative | Agree |
| Limit limitValue | 12.285230522573283 | 12.28522912396908 | 1.40e-6 | within 0.000001 relative | Agree |
Evidence generated 2026-08-26 from a full comparison run against the versions named above.
