コード例 #1
0
def test_singular():
    """Runs the high-dimensional case.
    """
    p = 2
    n = 13
    sigma = np.eye(p, p)
    data = np.random.multivariate_normal(np.zeros(p), sigma, n)
    data = np.hstack((data, data))
    with pytest.raises(ValueError):
        sigma_tilde = nls.shrink_cov(data, 0)
コード例 #2
0
def test_large_p():
    """Runs the high-dimensional case.
    """
    p = 13
    n = 12
    sigma = np.eye(p, p)
    data = np.random.multivariate_normal(np.zeros(p), sigma, n)

    sigma_tilde = nls.shrink_cov(data, 0)
    S = np.sum(sigma_tilde[np.eye(p) == 0]) / n_choose_k(p, 2) / np.sum(np.diag(sigma_tilde)) * p
    assert S < 1  # assert that the diagonal is the major contributor
コード例 #3
0
def test_ols():
    """Runs the high-dimensional case.
    """
    p = 2
    n = 14
    sigma = np.eye(p, p)
    data = np.random.multivariate_normal(np.zeros(p), sigma, n) + np.arange(n)[:, np.newaxis] + 1
    x = np.vstack((np.ones(n).T, np.arange(n).T)).T
    betahat = np.linalg.solve(np.dot(x.T, x), np.dot(x.T, data))
    datahat = np.dot(x, betahat)
    res = data - datahat
    sigma_tilde = nls.shrink_cov(res, k=2)  # corresponding to 2 degrees of freedom
    S = np.sum(sigma_tilde[np.eye(p) == 0]) / n_choose_k(p, 2) / np.sum(np.diag(sigma_tilde)) * p
    assert S < 1  # assert that the diagonal is the major contributor
コード例 #4
0
def test_analytic_shrinkage():
    """Runs the most simple possible test: 2 variables with 12 samples.
    """
    x = np.array([[-0.98511153, -0.2599713],
                  [0.20374114, -0.59699234],
                  [0.28570754, 0.77542166],
                  [-0.78768299, 0.45808448],
                  [0.80494623, -2.16308943],
                  [-2.01761751, -0.27944538],
                  [-0.24710646, -0.33260174],
                  [0.369508, 0.57123535],
                  [2.07913481, -0.0749686],
                  [1.07194672, -0.69343179],
                  [-0.11947645, -1.45457297],
                  [-0.54877366, -1.21191041]])

    expected = np.array([[1.04344299, 0.0335051],
                         [0.0335051, 1.11112703]])
    sigma_tilde = nls.shrink_cov(x, 0)

    np.testing.assert_allclose(sigma_tilde, expected)
コード例 #5
0
    ps = np.arange(start=10, stop=200, step=20)

    print(ps)
    e_prial = np.zeros(len(ps))
    for i, p in enumerate(ps):
        reps = int(np.maximum(100, np.minimum(100, 1e5 / p)))
        prial = np.zeros(reps, dtype=float)
        for j in np.arange(reps):

            n = 600
            lam = np.concatenate([np.ones(int(p / 5)),
                                  3 * np.ones(int(2 * p / 5.)),
                                  10 * np.ones(int(2 * p / 5.))])
            sigma = np.diag(np.ones(p) * lam)
            xx = np.random.randn(n, p)
            d, u = np.linalg.eigh(sigma)
            # y = np.linalg.solve(u.T, xx.T)
            s_sqrt = np.eye(p, p) * np.sqrt(lam)
            y = np.dot(xx, s_sqrt)
            s_tilde = nls.shrink_cov(y)
            s_sample = np.cov(y.T)
            pr = ana.prial(s_sample, s_tilde, sigma)

            prial[j] = float(pr)

        e_prial[i] = np.mean(prial)
        print(np.mean(prial))

    print(e_prial)
コード例 #6
0
ファイル: covariance.py プロジェクト: lwg342/wlpy
 def nonlin_shrink(self):
     S_nlshrink = nls.shrink_cov(self.X)
     return S_nlshrink