Outlier Identification validation
Free statistical outlier screening for environmental datasets using the Dixon, Rosner and Grubbs tests with automatic test selection by sample size.
- Scenarios
- 4
- Values agreeing
- 18
- Values differing
- 6
- Validated against
- USEPA ProUCL, R EnvStats / nortest
Rosner's test agrees with R EnvStats to fourteen decimal places, including the masked-outlier scenario. Dixon's test agrees with ProUCL exactly. The automatic switch from Dixon to Rosner is fixed at the sample size stated in the help text. ProUCL's Rosner statistic standardises by the population standard deviation and its critical values are read from a table printed to two decimal places; this toolkit and R use the sample standard deviation and compute the critical value in closed form.
Scenarios
- Rosner's test on 30 results with two planted high outliersTypical use
- Twenty-six results on automatic selection - the first n that picks RosnerBoundary case
- Two nearly equal extremes - the masking case sequential tests are built forBoundary case
- Twenty-five results on automatic selection - the last n that picks DixonBoundary case
Rosner's test on 30 results with two planted high outliers
Typical useInput
30 values
| value |
|---|
| 10.2 |
| 11.4 |
| 9.8 |
| 10.7 |
| 12.1 |
| 9.4 |
| 11 |
| 10.5 |
| 9.9 |
| 10.8 |
| 11.7 |
| 10.1 |
| 9.6 |
| 10.4 |
| 11.2 |
| 10.9 |
| 9.7 |
| 10.6 |
| 11.5 |
| 10.3 |
| 9.5 |
| 11.1 |
| 10 |
| 11.8 |
| 9.3 |
| 10.75 |
| 11.35 |
| 9.85 |
| 48.6 |
| 52.3 |
Settings: test = rosner, significance = 0.05, maxOutliers = 5
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 |
|---|---|---|---|---|---|
| Outliers found outlierCount | 2 | 2 | 0 | exact match | Agree |
| Outlier values outlierValues | 52.3,48.6 | 52.3,48.6 | - | exact match | Agree |
| Test statistic testStatistic | 3.846428303673836 | 3.846428303673835 | 8.88e-16 | within 0.000001 relative | Agree |
| Critical value criticalValue | 2.908473059740961 | 2.908473059740994 | 3.29e-14 | within 0.000001 relative | Agree |
Against USEPA ProUCL (ProUCL 5.2.0)
| Value | USEPA ProUCL | EnviroAutomate | Difference | Agreement band | Verdict |
|---|---|---|---|---|---|
| Test used testUsed | rosner | rosner | - | exact match | Agree |
| Test statistic testStatistic | 3.9121839780229974 | 3.846428303673835 | 0.0658 | within 0.000001 relative | Differs |
| Why these differ: Rosner's statistic is the largest standardised deviation from the mean, and the two tools standardise by different spreads. ProUCL divides by the population standard deviation; this toolkit divides by the sample standard deviation, the n-1 form. That is the whole of the difference - recomputing this scenario with the population divisor reproduces ProUCL's number to fifteen decimal places. Rosner (1983) and Gilbert (1987) both define the statistic with the sample standard deviation, and R's EnvStats rosnerTest agrees with this toolkit to fourteen decimal places, so the toolkit's value is kept. | |||||
| Critical value criticalValue | 2.91 | 2.908473059740994 | 0.00153 | within 0.000001 relative | Differs |
| Why these differ: ProUCL reads its Rosner critical values out of Gilbert's published table, which is printed to two decimal places; this toolkit computes the same quantity in closed form from the Student's t distribution. R's EnvStats computes it the same way and agrees with this toolkit to fourteen decimal places. The difference is the rounding in the printed table, not a disagreement about the method, and it never changes which results are flagged in these scenarios. | |||||
Twenty-six results on automatic selection - the first n that picks Rosner
Boundary caseInput
26 values
| value |
|---|
| 10.2 |
| 11.4 |
| 9.8 |
| 10.7 |
| 12.1 |
| 9.4 |
| 11 |
| 10.5 |
| 9.9 |
| 10.8 |
| 11.7 |
| 10.1 |
| 9.6 |
| 10.4 |
| 11.2 |
| 10.9 |
| 9.7 |
| 10.6 |
| 11.5 |
| 10.3 |
| 9.5 |
| 11.1 |
| 10 |
| 48.6 |
| 10.35 |
| 10.45 |
Settings: test = auto, significance = 0.05, maxOutliers = 5
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 |
|---|---|---|---|---|---|
| Outliers found outlierCount | 1 | 1 | 0 | exact match | Agree |
| Outlier values outlierValues | 48.6 | 48.6 | - | exact match | Agree |
| Test statistic testStatistic | 4.881453558821862 | 4.881453558821862 | 0 | within 0.000001 relative | Agree |
| Critical value criticalValue | 2.840774076470642 | 2.8407740764706393 | 2.66e-15 | within 0.000001 relative | Agree |
Against USEPA ProUCL (ProUCL 5.2.0)
| Value | USEPA ProUCL | EnviroAutomate | Difference | Agreement band | Verdict |
|---|---|---|---|---|---|
| Test used testUsed | rosner | rosner | - | exact match | Agree |
| Test statistic testStatistic | 4.978125390225926 | 4.881453558821862 | 0.0967 | within 0.000001 relative | Differs |
| Why these differ: Rosner's statistic is the largest standardised deviation from the mean, and the two tools standardise by different spreads. ProUCL divides by the population standard deviation; this toolkit divides by the sample standard deviation, the n-1 form. That is the whole of the difference - recomputing this scenario with the population divisor reproduces ProUCL's number to fifteen decimal places. Rosner (1983) and Gilbert (1987) both define the statistic with the sample standard deviation, and R's EnvStats rosnerTest agrees with this toolkit to fourteen decimal places, so the toolkit's value is kept. | |||||
| Critical value criticalValue | 2.84 | 2.8407740764706393 | 0.000774 | within 0.000001 relative | Differs |
| Why these differ: ProUCL reads its Rosner critical values out of Gilbert's published table, which is printed to two decimal places; this toolkit computes the same quantity in closed form from the Student's t distribution. R's EnvStats computes it the same way and agrees with this toolkit to fourteen decimal places. The difference is the rounding in the printed table, not a disagreement about the method, and it never changes which results are flagged in these scenarios. | |||||
Two nearly equal extremes - the masking case sequential tests are built for
Boundary caseInput
30 values
| value |
|---|
| 10.2 |
| 11.4 |
| 9.8 |
| 10.7 |
| 12.1 |
| 9.4 |
| 11 |
| 10.5 |
| 9.9 |
| 10.8 |
| 11.7 |
| 10.1 |
| 9.6 |
| 10.4 |
| 11.2 |
| 10.9 |
| 9.7 |
| 10.6 |
| 11.5 |
| 10.3 |
| 9.5 |
| 11.1 |
| 10 |
| 11.8 |
| 9.3 |
| 10.75 |
| 11.35 |
| 9.85 |
| 49.1 |
| 50.4 |
Settings: test = rosner, significance = 0.05, maxOutliers = 5
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 |
|---|---|---|---|---|---|
| Outliers found outlierCount | 2 | 2 | 0 | exact match | Agree |
| Outlier values outlierValues | 50.4,49.1 | 50.4,49.1 | - | exact match | Agree |
| Test statistic testStatistic | 3.732836850520452 | 3.732836850520452 | 0 | within 0.000001 relative | Agree |
| Critical value criticalValue | 2.908473059740961 | 2.908473059740994 | 3.29e-14 | within 0.000001 relative | Agree |
Against USEPA ProUCL (ProUCL 5.2.0)
| Value | USEPA ProUCL | EnviroAutomate | Difference | Agreement band | Verdict |
|---|---|---|---|---|---|
| Test used testUsed | rosner | rosner | - | exact match | Agree |
| Test statistic testStatistic | 3.7966506499631545 | 3.732836850520452 | 0.0638 | within 0.000001 relative | Differs |
| Why these differ: Rosner's statistic is the largest standardised deviation from the mean, and the two tools standardise by different spreads. ProUCL divides by the population standard deviation; this toolkit divides by the sample standard deviation, the n-1 form. That is the whole of the difference - recomputing this scenario with the population divisor reproduces ProUCL's number to fifteen decimal places. Rosner (1983) and Gilbert (1987) both define the statistic with the sample standard deviation, and R's EnvStats rosnerTest agrees with this toolkit to fourteen decimal places, so the toolkit's value is kept. | |||||
| Critical value criticalValue | 2.91 | 2.908473059740994 | 0.00153 | within 0.000001 relative | Differs |
| Why these differ: ProUCL reads its Rosner critical values out of Gilbert's published table, which is printed to two decimal places; this toolkit computes the same quantity in closed form from the Student's t distribution. R's EnvStats computes it the same way and agrees with this toolkit to fourteen decimal places. The difference is the rounding in the printed table, not a disagreement about the method, and it never changes which results are flagged in these scenarios. | |||||
Twenty-five results on automatic selection - the last n that picks Dixon
Boundary caseInput
25 values
| value |
|---|
| 10.2 |
| 11.4 |
| 9.8 |
| 10.7 |
| 12.1 |
| 9.4 |
| 11 |
| 10.5 |
| 9.9 |
| 10.8 |
| 11.7 |
| 10.1 |
| 9.6 |
| 10.4 |
| 11.2 |
| 10.9 |
| 9.7 |
| 10.6 |
| 11.5 |
| 10.3 |
| 9.5 |
| 11.1 |
| 10 |
| 48.6 |
| 10.35 |
Settings: test = auto, significance = 0.05, maxOutliers = 5
Against USEPA ProUCL (ProUCL 5.2.0)
| Value | USEPA ProUCL | EnviroAutomate | Difference | Agreement band | Verdict |
|---|---|---|---|---|---|
| Test used testUsed | dixon | dixon | - | exact match | Agree |
| Test statistic testStatistic | 0.9461538461538463 | 0.9461538461538463 | 0 | within 0.000001 relative | Agree |
| Critical value criticalValue | 0.406 | 0.406 | 0 | within 0.000001 relative | Agree |
Not run for this scenario
- R EnvStats / nortest - at this sample size the toolkit uses Dixon's test, which EnvStats does not implement under the same convention
Evidence generated 2026-08-26 from a full comparison run against the versions named above.
