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_bernoulli_probit_problematic(): random = RandomState(1) N = 30 G = random.randn(N, N + 50) y = bernoulli_sample(0.0, G, random_state=random) G = ascontiguousarray(G, dtype=float) _stdnorm(G, 0, out=G) G /= sqrt(G.shape[1]) QS = economic_qs_linear(G) S0 = QS[1] S0 /= S0.mean() X = ones((len(y), 1)) model = GLMMExpFam(y, "probit", X, QS=(QS[0], QS[1])) model.delta = 0 model.fix("delta") model.fit(verbose=False) assert_allclose(model.lml(), -20.725623168378615, atol=ATOL, rtol=RTOL) assert_allclose(model.delta, 0.0001220703125, atol=1e-3) assert_allclose(model.scale, 0.33022865011938707, atol=ATOL, rtol=RTOL) assert_allclose(model.beta, [-0.002617161564786044], atol=ATOL, rtol=RTOL) h20 = model.scale * (1 - model.delta) / (model.scale + 1) model.unfix("delta") model.delta = 0.5 model.scale = 1.0 model.fit(verbose=False) assert_allclose(model.lml(), -20.725623168378522, atol=ATOL, rtol=RTOL) assert_allclose(model.delta, 0.5017852859580029, atol=1e-3) assert_allclose(model.scale, 0.9928931515372, atol=ATOL, rtol=RTOL) assert_allclose(model.beta, [-0.003203427206253548], atol=ATOL, rtol=RTOL) h21 = model.scale * (1 - model.delta) / (model.scale + 1) assert_allclose(h20, h21, atol=ATOL, rtol=RTOL)