EnviroAutomate
← All validation

Normality Testing validation

Free normality and lognormality testing for environmental data: Shapiro-Wilk, Lilliefors and Anderson-Darling with a plain English conclusion.

Scenarios
4
Values agreeing
34
Values differing
4
Validated against
R EnvStats / nortest, USEPA ProUCL

Open Normality Testing

Shapiro-Wilk follows Royston's AS R94, the algorithm R implements, and agrees with R to twelve decimal places on every scenario including the smallest sample the test accepts. Lilliefors is compared against both R and ProUCL and agrees with both to eleven decimal places. ProUCL's Shapiro-Wilk statistic is not AS R94 and differs in the fourth decimal place.

Scenarios

Twelve results that should pass all three normality tests

Typical use

Input

12 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

Settings: distribution = normal, significance = 0.05

Against R EnvStats / nortest (EnvStats 3.1.0, nortest 1.0-4, R 4.6.1)

ValueR EnvStats / nortestEnviroAutomateDifferenceAgreement bandVerdict
Sample size (n) n12120exact matchAgree
Shapiro-Wilk statistic shapiro-wilk.statistic0.98771665949547920.98771665949547892.22e-16within 0.000001 relativeAgree
Shapiro-Wilk p-value shapiro-wilk.pValue0.99898427789471240.99898427789475414.16e-14within 0.000001 relativeAgree
Anderson-Darling statistic anderson-darling.statistic0.101122762197403130.101122762188277519.13e-12within 0.000001 relativeAgree
Anderson-Darling p-value anderson-darling.pValue0.99589793585330970.99589793585540192.09e-12within 0.000001 relativeAgree
Lilliefors statistic lilliefors.statistic0.085097033327097170.085097033327097170within 0.000001 relativeAgree
Lilliefors p-value lilliefors.pValue0.99932971679280260.99932971679280260within 0.000001 relativeAgree

Against USEPA ProUCL (ProUCL 5.2.0)

ValueUSEPA ProUCLEnviroAutomateDifferenceAgreement bandVerdict
Sample size (n) n12120exact matchAgree
Shapiro-Wilk statistic shapiro-wilk.statistic0.98762757137783220.98771665949547898.91e-5within 0.000001 relativeDiffers
Why these differ: ProUCL's Shapiro-Wilk W is not Royston's AS R94. The two agree to about four decimal places on every scenario here, which is far too close to be a different test and far too far apart to be the same arithmetic. This toolkit implements AS R94, the algorithm R's shapiro.test implements, and R agrees with it to twelve decimal places. Lilliefors, computed by both tools on the same data, agrees to eleven decimal places - so this is specific to Shapiro-Wilk rather than a difference in how the data reaches the test. The toolkit's value is kept because the published algorithm is the one a reviewer can check.
Lilliefors statistic lilliefors.statistic0.08509703332527840.085097033327097171.82e-12within 0.000001 relativeAgree

Seven results - the smallest sample Shapiro-Wilk will accept here

Boundary case

Input

7 values

value
9.8
10.4
11.2
9.1
10.8
12
8.7

Settings: distribution = normal, significance = 0.05

Against R EnvStats / nortest (EnvStats 3.1.0, nortest 1.0-4, R 4.6.1)

ValueR EnvStats / nortestEnviroAutomateDifferenceAgreement bandVerdict
Sample size (n) n770exact matchAgree
Shapiro-Wilk statistic shapiro-wilk.statistic0.97824356962232760.97824356962232715.55e-16within 0.000001 relativeAgree
Shapiro-Wilk p-value shapiro-wilk.pValue0.95058679687102580.95058679686893532.09e-12within 0.000001 relativeAgree
Lilliefors statistic lilliefors.statistic0.13035825355736210.130358253544130281.32e-11within 0.000001 relativeAgree
Lilliefors p-value lilliefors.pValue0.97440447368433230.97440447371405272.97e-11within 0.000001 relativeAgree

Against USEPA ProUCL (ProUCL 5.2.0)

ValueUSEPA ProUCLEnviroAutomateDifferenceAgreement bandVerdict
Sample size (n) n770exact matchAgree
Shapiro-Wilk statistic shapiro-wilk.statistic0.9780900757048380.97824356962232710.000153within 0.000001 relativeDiffers
Why these differ: ProUCL's Shapiro-Wilk W is not Royston's AS R94. The two agree to about four decimal places on every scenario here, which is far too close to be a different test and far too far apart to be the same arithmetic. This toolkit implements AS R94, the algorithm R's shapiro.test implements, and R agrees with it to twelve decimal places. Lilliefors, computed by both tools on the same data, agrees to eleven decimal places - so this is specific to Shapiro-Wilk rather than a difference in how the data reaches the test. The toolkit's value is kept because the published algorithm is the one a reviewer can check.
Lilliefors statistic lilliefors.statistic0.130358253560826640.130358253544130281.67e-11within 0.000001 relativeAgree

Strongly lognormal data tested as normal - all three tests should reject

Boundary case

Input

15 values

value
0.8
1.1
1.3
1.6
1.9
2.4
3.1
4.6
8.2
19.7
41.5
0.9
1.2
2
2.8

Settings: distribution = normal, significance = 0.05

Against R EnvStats / nortest (EnvStats 3.1.0, nortest 1.0-4, R 4.6.1)

ValueR EnvStats / nortestEnviroAutomateDifferenceAgreement bandVerdict
Sample size (n) n15150exact matchAgree
Shapiro-Wilk statistic shapiro-wilk.statistic0.54063976087043670.54063976087043724.44e-16within 0.000001 relativeAgree
Shapiro-Wilk p-value shapiro-wilk.pValue0.000007627011283237680.000007627011283872786.35e-16within 0.000001 relativeAgree
Anderson-Darling statistic anderson-darling.statistic3.07701286946351753.0770128694586524.87e-12within 0.000001 relativeAgree
Anderson-Darling p-value anderson-darling.pValue1.02146118007462e-71.021461180102423e-72.78e-18within 0.000001 relativeAgree
Lilliefors statistic lilliefors.statistic0.358649362017312570.35864936201731255.55e-17within 0.000001 relativeAgree
Lilliefors p-value lilliefors.pValue0.0000128017242908720.00001280172429087211.15e-19within 0.000001 relativeAgree

Against USEPA ProUCL (ProUCL 5.2.0)

ValueUSEPA ProUCLEnviroAutomateDifferenceAgreement bandVerdict
Sample size (n) n15150exact matchAgree
Shapiro-Wilk statistic shapiro-wilk.statistic0.54057639084849480.54063976087043726.34e-5within 0.000001 relativeDiffers
Why these differ: ProUCL's Shapiro-Wilk W is not Royston's AS R94. The two agree to about four decimal places on every scenario here, which is far too close to be a different test and far too far apart to be the same arithmetic. This toolkit implements AS R94, the algorithm R's shapiro.test implements, and R agrees with it to twelve decimal places. Lilliefors, computed by both tools on the same data, agrees to eleven decimal places - so this is specific to Shapiro-Wilk rather than a difference in how the data reaches the test. The toolkit's value is kept because the published algorithm is the one a reviewer can check.
Lilliefors statistic lilliefors.statistic0.358649362021267350.35864936201731253.95e-12within 0.000001 relativeAgree

The same lognormal data tested as lognormal - all three tests should accept

Boundary case

Input

15 values

value
0.8
1.1
1.3
1.6
1.9
2.4
3.1
4.6
8.2
19.7
41.5
0.9
1.2
2
2.8

Settings: distribution = lognormal, significance = 0.05

Against R EnvStats / nortest (EnvStats 3.1.0, nortest 1.0-4, R 4.6.1)

ValueR EnvStats / nortestEnviroAutomateDifferenceAgreement bandVerdict
Sample size (n) n15150exact matchAgree
Shapiro-Wilk statistic shapiro-wilk.statistic0.87599881688197230.87599881688197230within 0.000001 relativeAgree
Shapiro-Wilk p-value shapiro-wilk.pValue0.041369065702108840.0413690657038303661.72e-12within 0.000001 relativeAgree
Anderson-Darling statistic anderson-darling.statistic0.74220847281337750.74220847284594483.26e-11within 0.000001 relativeAgree
Anderson-Darling p-value anderson-darling.pValue0.0532199514473831040.0532199514375359269.85e-12within 0.000001 relativeAgree
Lilliefors statistic lilliefors.statistic0.19641730431152560.19641730431152560within 0.000001 relativeAgree
Lilliefors p-value lilliefors.pValue0.123680259634886270.123680259634893377.11e-15within 0.000001 relativeAgree

Against USEPA ProUCL (ProUCL 5.2.0)

ValueUSEPA ProUCLEnviroAutomateDifferenceAgreement bandVerdict
Sample size (n) n15150exact matchAgree
Shapiro-Wilk statistic shapiro-wilk.statistic0.87592143702048560.87599881688197237.74e-5within 0.000001 relativeDiffers
Why these differ: ProUCL's Shapiro-Wilk W is not Royston's AS R94. The two agree to about four decimal places on every scenario here, which is far too close to be a different test and far too far apart to be the same arithmetic. This toolkit implements AS R94, the algorithm R's shapiro.test implements, and R agrees with it to twelve decimal places. Lilliefors, computed by both tools on the same data, agrees to eleven decimal places - so this is specific to Shapiro-Wilk rather than a difference in how the data reaches the test. The toolkit's value is kept because the published algorithm is the one a reviewer can check.
Lilliefors statistic lilliefors.statistic0.196417304308208170.19641730431152563.32e-12within 0.000001 relativeAgree

Evidence generated 2026-08-26 from a full comparison run against the versions named above.