def test_glmmexpfam_wrong_qs(): random = RandomState(0) X = random.randn(10, 15) linear_eye_cov().value() QS = [0, 1] ntri = random.randint(1, 30, 10) nsuc = [random.randint(0, i) for i in ntri] with pytest.raises(ValueError): GLMMExpFam((nsuc, ntri), "binomial", X, QS)
def test_glmmnormal(): nsamples = 10 random = RandomState(0) X = random.randn(nsamples, 5) M = random.randn(nsamples, 3) K = linear_eye_cov().value() QS = economic_qs(K) eta = random.randn(nsamples) tau = 10 * random.rand(nsamples) glmm = GLMMNormal(eta, tau, X, QS) glmm.beta = asarray([1.0, 0, 0.5, 0.1, 0.4]) assert_allclose(glmm.lml(), -19.284378946701814) assert_allclose(glmm._check_grad(), 0, atol=1e-3, rtol=RTOL) flmm = glmm.get_fast_scanner() r = flmm.fast_scan(M, verbose=False) assert_allclose(r["lml"], [9.64605678059, 9.17041834, 9.56927990771]) assert_allclose(r["effsizes1"], [-0.0758297759308, 0.0509863368859, 0.0876858800519]) assert_allclose( r["scale"], [0.0053192483818597395, 0.005850105527002988, 0.00540155776161286])
def test_glmmexpfam_precise(): nsamples = 10 random = RandomState(0) X = random.randn(nsamples, 5) K = linear_eye_cov().value() QS = economic_qs(K) ntri = random.randint(1, 30, nsamples) nsuc = [random.randint(0, i) for i in ntri] glmm = GLMMExpFam(nsuc, ["binomial", ntri], X, QS) glmm.beta = asarray([1.0, 0, 0.5, 0.1, 0.4]) glmm.scale = 1.0 assert_allclose(glmm.lml(), -44.74191041468836, atol=ATOL, rtol=RTOL) glmm.scale = 2.0 assert_allclose(glmm.lml(), -36.19907331929086, atol=ATOL, rtol=RTOL) glmm.scale = 3.0 assert_allclose(glmm.lml(), -33.02139830387104, atol=ATOL, rtol=RTOL) glmm.scale = 4.0 assert_allclose(glmm.lml(), -31.42553401678996, atol=ATOL, rtol=RTOL) glmm.scale = 5.0 assert_allclose(glmm.lml(), -30.507029479473243, atol=ATOL, rtol=RTOL) glmm.scale = 6.0 assert_allclose(glmm.lml(), -29.937569702301232, atol=ATOL, rtol=RTOL) glmm.delta = 0.1 assert_allclose(glmm.lml(), -30.09977907145003, atol=ATOL, rtol=RTOL) assert_allclose(glmm._check_grad(), 0, atol=1e-3, rtol=RTOL)
def test_glmmexpfam_qs_none(): nsamples = 10 random = RandomState(0) X = random.randn(nsamples, 5) K = linear_eye_cov().value() z = random.multivariate_normal(0.2 * ones(nsamples), K) ntri = random.randint(1, 30, nsamples) nsuc = zeros(nsamples, dtype=int) for (i, ni) in enumerate(ntri): nsuc[i] += sum(z[i] + 0.2 * random.randn(ni) > 0) ntri = ascontiguousarray(ntri) glmm = GLMMExpFam(nsuc, ("binomial", ntri), X, None) assert_allclose(glmm.lml(), -38.30173374439622, atol=ATOL, rtol=RTOL) glmm.fix("beta") glmm.fix("scale") glmm.fit(verbose=False) assert_allclose(glmm.lml(), -32.03927471370041, atol=ATOL, rtol=RTOL) glmm.unfix("beta") glmm.unfix("scale") glmm.fit(verbose=False) assert_allclose(glmm.lml(), -19.575736561760586, atol=ATOL, rtol=RTOL)
def test_glmmexpfam_optimize(): nsamples = 10 random = RandomState(0) X = random.randn(nsamples, 5) K = linear_eye_cov().value() z = random.multivariate_normal(0.2 * ones(nsamples), K) QS = economic_qs(K) ntri = random.randint(1, 30, nsamples) nsuc = zeros(nsamples, dtype=int) for (i, ni) in enumerate(ntri): nsuc[i] += sum(z[i] + 0.2 * random.randn(ni) > 0) ntri = ascontiguousarray(ntri) glmm = GLMMExpFam(nsuc, ("binomial", ntri), X, QS) assert_allclose(glmm.lml(), -29.102168129099287, atol=ATOL, rtol=RTOL) glmm.fix("beta") glmm.fix("scale") glmm.fit(verbose=False) assert_allclose(glmm.lml(), -27.635788105778012, atol=ATOL, rtol=RTOL) glmm.unfix("beta") glmm.unfix("scale") glmm.fit(verbose=False) assert_allclose(glmm.lml(), -19.68486269551159, atol=ATOL, rtol=RTOL)
def test_glmmexpfam_scale_very_high(): nsamples = 10 random = RandomState(0) X = random.randn(nsamples, 5) K = linear_eye_cov().value() QS = economic_qs(K) ntri = random.randint(1, 30, nsamples) nsuc = [random.randint(0, i) for i in ntri] glmm = GLMMExpFam(nsuc, ("binomial", ntri), X, QS) glmm.beta = asarray([1.0, 0, 0.5, 0.1, 0.4]) glmm.scale = 30.0 assert_allclose(glmm.lml(), -29.632791380478736, atol=ATOL, rtol=RTOL) assert_allclose(glmm._check_grad(), 0, atol=1e-3)
def test_glmmexpfam_delta1(): nsamples = 10 random = RandomState(0) X = random.randn(nsamples, 5) K = linear_eye_cov().value() QS = economic_qs(K) ntri = random.randint(1, 30, nsamples) nsuc = [random.randint(0, i) for i in ntri] glmm = GLMMExpFam(nsuc, ("binomial", ntri), X, QS) glmm.beta = asarray([1.0, 0, 0.5, 0.1, 0.4]) glmm.delta = 1 assert_allclose(glmm.lml(), -47.09677870648636, atol=ATOL, rtol=RTOL) assert_allclose(glmm._check_grad(), 0, atol=1e-4)
def test_glmmexpfam_copy(): nsamples = 10 random = RandomState(0) X = random.randn(nsamples, 5) K = linear_eye_cov().value() z = random.multivariate_normal(0.2 * ones(nsamples), K) QS = economic_qs(K) ntri = random.randint(1, 30, nsamples) nsuc = zeros(nsamples, dtype=int) for (i, ni) in enumerate(ntri): nsuc[i] += sum(z[i] + 0.2 * random.randn(ni) > 0) ntri = ascontiguousarray(ntri) glmm0 = GLMMExpFam(nsuc, ("binomial", ntri), X, QS) assert_allclose(glmm0.lml(), -29.10216812909928, atol=ATOL, rtol=RTOL) glmm0.fit(verbose=False) v = -19.575736562427252 assert_allclose(glmm0.lml(), v) glmm1 = glmm0.copy() assert_allclose(glmm1.lml(), v) glmm1.scale = 0.92 assert_allclose(glmm0.lml(), v, atol=ATOL, rtol=RTOL) assert_allclose(glmm1.lml(), -30.832831740038056, atol=ATOL, rtol=RTOL) glmm0.fit(verbose=False) glmm1.fit(verbose=False) v = -19.575736562378573 assert_allclose(glmm0.lml(), v) assert_allclose(glmm1.lml(), v)
def test_glmmnormal_copy(): nsamples = 10 random = RandomState(0) X = random.randn(nsamples, 5) QS = economic_qs(linear_eye_cov().value()) eta = random.randn(nsamples) tau = random.rand(nsamples) * 10 glmm0 = GLMMNormal(eta, tau, X, QS) assert_allclose(glmm0.lml(), -12.646439806030257, atol=ATOL, rtol=RTOL) glmm0.fit(verbose=False) v = -4.758450057194982 assert_allclose(glmm0.lml(), v, atol=ATOL, rtol=RTOL) glmm1 = glmm0.copy() assert_allclose(glmm1.lml(), v, atol=ATOL, rtol=RTOL) glmm1.scale = 0.92 assert_allclose(glmm0.lml(), v, atol=ATOL, rtol=RTOL) assert_allclose(glmm1.lml(), -10.986014936977927, atol=ATOL, rtol=RTOL) glmm0.fit(verbose=False) glmm1.fit(verbose=False) assert_allclose(glmm0.lml(), v, atol=ATOL, rtol=RTOL) assert_allclose(glmm1.lml(), v, atol=ATOL, rtol=RTOL) K = asarray([ [ 1.00000001e-03, -2.36582704e-12, -1.10745946e-12, -5.95414742e-12, 1.32859621e-12, -1.97576469e-12, 3.10002744e-12, -2.98276215e-12, 2.21766464e-12, -4.11149765e-13, ], [ -2.36582704e-12, 1.00000000e-03, 3.38869300e-12, -1.21382132e-12, -1.18303301e-12, 2.99685550e-12, -1.12667797e-12, 1.31258715e-14, -3.41562159e-12, -1.79390668e-12, ], [ -1.10745946e-12, 3.38869300e-12, 1.00000001e-03, -4.35318561e-12, -2.94696950e-12, 3.70379702e-12, 1.15190236e-13, -4.09334846e-12, -6.56245537e-12, -9.57373359e-13, ], [ -5.95414742e-12, -1.21382132e-12, -4.35318561e-12, 1.00000002e-03, -9.18763856e-13, -4.95358110e-12, -2.44724110e-12, -1.70406838e-12, 1.15381873e-13, 3.10086508e-12, ], [ 1.32859621e-12, -1.18303301e-12, -2.94696950e-12, -9.18763856e-13, 1.00000001e-03, -1.55985955e-12, -2.09090626e-12, 5.35213097e-13, -2.05846838e-12, -7.77741240e-13, ], [ -1.97576469e-12, 2.99685550e-12, 3.70379702e-12, -4.95358110e-12, -1.55985955e-12, 1.00000001e-03, 2.16017366e-12, -1.25544702e-12, -3.18748695e-12, -6.45778208e-12, ], [ 3.10002744e-12, -1.12667797e-12, 1.15190236e-13, -2.44724110e-12, -2.09090626e-12, 2.16017366e-12, 1.00000001e-03, -4.07492827e-12, -2.49548897e-12, -5.02704611e-12, ], [ -2.98276215e-12, 1.31258715e-14, -4.09334846e-12, -1.70406838e-12, 5.35213097e-13, -1.25544702e-12, -4.07492827e-12, 1.00000002e-03, -2.16846857e-12, -1.08364499e-12, ], [ 2.21766464e-12, -3.41562159e-12, -6.56245537e-12, 1.15381873e-13, -2.05846838e-12, -3.18748695e-12, -2.49548897e-12, -2.16846857e-12, 1.00000001e-03, 4.83828810e-12, ], [ -4.11149765e-13, -1.79390668e-12, -9.57373359e-13, 3.10086508e-12, -7.77741240e-13, -6.45778208e-12, -5.02704611e-12, -1.08364499e-12, 4.83828810e-12, 1.00000001e-03, ], ]) assert_allclose(glmm0.covariance(), K, rtol=1e-5, atol=1e-5) assert_allclose(glmm1.covariance(), K, rtol=1e-5, atol=1e-5)
def test_glmmexpfam_glmmnormal_get_fast_scanner(): nsamples = 10 random = RandomState(0) X = random.randn(nsamples, 5) K = linear_eye_cov().value() QS = economic_qs(K) eta = random.randn(nsamples) tau = 10 * random.rand(nsamples) glmm = GLMMNormal(eta, tau, X, QS) glmm.fit(verbose=False) want = [-0.08228058, -0.03910674, 0.04226152, -0.05893827, 0.01718722] assert_allclose(glmm.beta, want, atol=1e-3, rtol=1e-3) assert_allclose(0.001, glmm.scale, atol=1e-3, rtol=1e-3) assert_allclose(0.999999994119, glmm.delta, atol=1e-3, rtol=1e-3) scanner = glmm.get_fast_scanner() r = scanner.fast_scan(X, verbose=False) assert_allclose( r["lml"], [ 3.666664259270515, 3.6666642592705188, 3.666664259270515, 3.666664259270515, 3.6666642592705188, ], rtol=1e-6, ) assert_allclose( r["effsizes0"], [ array([ -0.04114011, -0.03910684, 0.04226118, -0.05893773, 0.01718666 ]), array([ -0.08228023, -0.01955342, 0.04226118, -0.05893773, 0.01718666 ]), array([ -0.08228023, -0.03910684, 0.02113059, -0.05893773, 0.01718666 ]), array([ -0.08228023, -0.03910684, 0.04226118, -0.02946886, 0.01718666 ]), array([ -0.08228023, -0.03910684, 0.04226118, -0.05893773, 0.00859333 ]), ], rtol=1e-6, ) assert_allclose( r["effsizes1"], [ -0.04114011396191331, -0.01955341813308458, 0.02113058926220273, -0.029468864872716646, 0.008593328546792367, ], rtol=1e-6, ) assert_allclose( r["scale"], [ 0.07341651661479422, 0.07341651661479419, 0.07341651661479422, 0.07341651661479422, 0.0734165166147942, ], rtol=1e-6, )