Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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])
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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)
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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)
Exemplo n.º 10
0
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,
    )