def test_against_scipy_mvn_col_conditional(seeded_rng):

    # have to be careful for constructing everything as a submatrix of a big
    # PSD matrix, else no guarantee that anything's invertible.
    cov_np = wishart.rvs(df=m + p + 2, scale=np.eye(m + p))

    rowcov = CovIdentity(size=m)
    colcov = CovUnconstrainedCholesky(Sigma=cov_np[0:n, 0:n])
    A = cov_np[n:, 0:n]

    Q = CovUnconstrainedCholesky(Sigma=cov_np[n:, n:])

    X = rmn(np.eye(m), np.eye(n))

    A_tf = tf.constant(A, "float64")
    X_tf = tf.constant(X, "float64")

    Q_np = Q._cov

    colcov_np = colcov._cov - A.T.dot(np.linalg.inv(Q_np)).dot((A))

    scipy_answer = np.sum(
        multivariate_normal.logpdf(X, np.zeros([n]), colcov_np))

    tf_answer = matnorm_logp_conditional_col(X_tf, rowcov, colcov, A_tf, Q)

    assert_allclose(scipy_answer, tf_answer, rtol=rtol)
Ejemplo n.º 2
0
def test_CovUnconstrainedCholesky(seeded_rng):

    cov = CovUnconstrainedCholesky(size=m)

    L = cov.L.numpy()
    cov_np = L @ L.T
    logdet_np, sinv_np, sinvx_np = logdet_sinv_np(X, cov_np)
    assert_allclose(logdet_np, cov.logdet, rtol=rtol)
    assert_allclose(sinv_np, cov.solve(eye), rtol=rtol)
    assert_allclose(sinvx_np, cov.solve(X_tf), rtol=rtol)
Ejemplo n.º 3
0
def test_raises(seeded_rng):

    with pytest.raises(RuntimeError):
        CovUnconstrainedCholesky(Sigma=np.eye(3), size=4)

    with pytest.raises(RuntimeError):
        CovUnconstrainedCholesky()

    with pytest.raises(RuntimeError):
        CovUnconstrainedInvCholesky(invSigma=np.eye(3), size=4)

    with pytest.raises(RuntimeError):
        CovUnconstrainedInvCholesky()
Ejemplo n.º 4
0
def test_CovConstant(seeded_rng):

    cov_np = wishart.rvs(df=m + 2, scale=np.eye(m))
    cov = CovUnconstrainedCholesky(Sigma=cov_np)

    # verify what we pass is what we get
    cov_tf = cov._cov
    assert_allclose(cov_tf, cov_np)

    # compute the naive version
    logdet_np, sinv_np, sinvx_np = logdet_sinv_np(X, cov_np)
    assert_allclose(logdet_np, cov.logdet, rtol=rtol)
    assert_allclose(sinv_np, cov.solve(eye), rtol=rtol)
    assert_allclose(sinvx_np, cov.solve(X_tf), rtol=rtol)
def test_matnorm_regression_unconstrained(seeded_rng):

    # Y = XB + eps
    # Y is m x p, B is n x p, eps is m x p
    X = norm.rvs(size=(m, n))
    B = norm.rvs(size=(n, p))
    Y_hat = X.dot(B)
    rowcov_true = np.eye(m)
    colcov_true = wishart.rvs(p + 2, np.eye(p))

    Y = Y_hat + rmn(rowcov_true, colcov_true)

    row_cov = CovIdentity(size=m)
    col_cov = CovUnconstrainedCholesky(size=p)

    model = MatnormalRegression(time_cov=row_cov, space_cov=col_cov)

    model.fit(X, Y, naive_init=False)

    assert pearsonr(B.flatten(), model.beta_.flatten())[0] >= corrtol

    pred_y = model.predict(X)
    assert pearsonr(pred_y.flatten(), Y_hat.flatten())[0] >= corrtol

    model = MatnormalRegression(time_cov=row_cov, space_cov=col_cov)

    model.fit(X, Y, naive_init=True)

    assert pearsonr(B.flatten(), model.beta_.flatten())[0] >= corrtol

    pred_y = model.predict(X)
    assert pearsonr(pred_y.flatten(), Y_hat.flatten())[0] >= corrtol
def test_against_scipy_mvn_col_marginal(seeded_rng):

    rowcov = CovIdentity(size=m)
    colcov = CovUnconstrainedCholesky(size=n)
    Q = CovUnconstrainedCholesky(size=p)

    X = rmn(np.eye(m), np.eye(n))
    A = rmn(np.eye(p), np.eye(n))

    A_tf = tf.constant(A, "float64")
    X_tf = tf.constant(X, "float64")

    Q_np = Q._cov

    colcov_np = colcov._cov + A.T.dot(Q_np).dot(A)

    scipy_answer = np.sum(multivariate_normal.logpdf(
        X, np.zeros([n]), colcov_np))

    tf_answer = matnorm_logp_marginal_col(X_tf, rowcov, colcov, A_tf, Q)
    assert_allclose(scipy_answer, tf_answer, rtol=rtol)
Ejemplo n.º 7
0
def test_against_scipy_mvn_col(seeded_rng):

    rowcov = CovIdentity(size=m)
    colcov = CovUnconstrainedCholesky(size=n)
    X = rmn(np.eye(m), np.eye(n))
    X_tf = tf.constant(X, "float64")

    colcov_np = colcov._cov

    scipy_answer = np.sum(
        multivariate_normal.logpdf(X, np.zeros([n]), colcov_np))
    tf_answer = matnorm_logp(X_tf, rowcov, colcov)
    assert_allclose(scipy_answer, tf_answer, rtol=rtol)