AIM-PIbd-32-Kurbanova-A-A/aimenv/Lib/site-packages/statsmodels/stats/tests/test_tabledist.py

102 lines
4.2 KiB
Python
Raw Normal View History

2024-10-02 22:15:59 +04:00
"""
Test data from Lilliefors test for normality
An Analytic Approximation to the Distribution of Lilliefors's
Test Statistic for Normality
Author(s): Gerard E. Dallal and Leland WilkinsonSource: The American
Statistician, Vol. 40, No. 4 (Nov., 1986), pp. 294-296
"""
import numpy as np
from numpy.testing import assert_almost_equal, assert_allclose
from statsmodels.stats.tabledist import TableDist
def test_tabledist():
# for this test alpha is sf probability, i.e. right tail probability
alpha = np.array([0.2, 0.15, 0.1, 0.05, 0.01, 0.001])[::-1]
size = np.array([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 25, 30, 40, 100, 400, 900], float)
# critical values, rows are by sample size, columns are by alpha
crit_lf = np.array([[303, 321, 346, 376, 413, 433],
[289, 303, 319, 343, 397, 439],
[269, 281, 297, 323, 371, 424],
[252, 264, 280, 304, 351, 402],
[239, 250, 265, 288, 333, 384],
[227, 238, 252, 274, 317, 365],
[217, 228, 241, 262, 304, 352],
[208, 218, 231, 251, 291, 338],
[200, 210, 222, 242, 281, 325],
[193, 202, 215, 234, 271, 314],
[187, 196, 208, 226, 262, 305],
[181, 190, 201, 219, 254, 296],
[176, 184, 195, 213, 247, 287],
[171, 179, 190, 207, 240, 279],
[167, 175, 185, 202, 234, 273],
[163, 170, 181, 197, 228, 266],
[159, 166, 176, 192, 223, 260],
[143, 150, 159, 173, 201, 236],
[131, 138, 146, 159, 185, 217],
[115, 120, 128, 139, 162, 189],
[74, 77, 82, 89, 104, 122],
[37, 39, 41, 45, 52, 61],
[25, 26, 28, 30, 35, 42]])[:, ::-1] / 1000.
lf = TableDist(alpha, size, crit_lf)
assert_almost_equal(lf.prob(0.166, 20), 0.15)
assert_almost_equal(lf.crit(0.15, 20), 0.166)
assert_almost_equal(lf.crit3(0.15, 20), 0.166)
assert .159 <= lf.crit(0.17, 20) <= 166
assert .159 <= lf.crit3(0.17, 20) <= .166
assert .159 <= lf.crit(0.19, 20) <= .166
assert .159 <= lf.crit3(0.19, 20) <= .166
assert .159 <= lf.crit(0.199, 20) <= .166
assert .159 <= lf.crit3(0.199, 20) <= .166
# testing
vals = [lf.prob(c, size[i]) for i in range(len(size)) for c in crit_lf[i]]
vals = np.array(vals).reshape(-1, lf.n_alpha)
delta = np.abs(vals) - lf.alpha
assert_allclose(delta, np.zeros_like(delta))
# 1.6653345369377348e-16
vals = [lf.crit(c, size[i]) for i in range(len(size)) for c in lf.alpha]
vals = np.array(vals).reshape(-1, lf.n_alpha)
delta = np.abs(vals - crit_lf)
assert_allclose(delta, np.zeros_like(delta))
# 6.9388939039072284e-18)
print(np.max(np.abs(np.array(
[lf.crit3(c, size[i]) for i in range(len(size)) for c in
lf.alpha]).reshape(-1, lf.n_alpha) - crit_lf)))
# 4.0615705243496336e-12)
vals = [lf.crit3(c, size[i]) for i in range(len(size))
for c in lf.alpha[:-1] * 1.1]
vals = np.array(vals).reshape(-1, lf.n_alpha - 1)
assert (vals < crit_lf[:, :-1]).all()
vals = [lf.crit3(c, size[i]) for i in range(len(size)) for c in
lf.alpha[:-1] * 1.1]
vals = np.array(vals).reshape(-1, lf.n_alpha - 1)
assert (vals > crit_lf[:, 1:]).all()
vals = [lf.prob(c * 0.9, size[i]) for i in range(len(size))
for c in crit_lf[i, :-1]]
vals = np.array(vals).reshape(-1, lf.n_alpha - 1)
assert (vals > lf.alpha[:-1]).all()
vals = [lf.prob(c * 1.1, size[i]) for i in range(len(size)) for c in
crit_lf[i, 1:]]
vals = np.array(vals).reshape(-1, lf.n_alpha - 1)
assert (vals < lf.alpha[1:]).all()
# start at size_idx=2 because of non-monotonicity of lf_crit
vals = [lf.prob(c, size[i] * 0.9) for i in range(2, len(size))
for c in crit_lf[i, :-1]]
vals = np.array(vals).reshape(-1, lf.n_alpha - 1)
assert (vals > lf.alpha[:-1]).all()