import numpy as np
from numpy.testing import assert_equal, assert_
from statsmodels.stats.regularized_covariance import (
_calc_nodewise_row, _calc_nodewise_weight,
_calc_approx_inv_cov, RegularizedInvCovariance)
def test_calc_nodewise_row():
np.random.seed(435265)
X = np.random.normal(size=(50, 3))
ghat = _calc_nodewise_row(X, 0, 0.01)
assert_equal(ghat.shape, (2,))
def test_calc_nodewise_weight():
np.random.seed(435265)
X = np.random.normal(size=(50, 3))
ghat = np.random.normal(size=2)
that = _calc_nodewise_weight(X, ghat, 0, 0.01)
assert_(isinstance(that, float))
def test_calc_approx_inv_cov():
np.random.seed(435265)
X = np.random.normal(size=(50, 3))
ghat_l = []
that_l = []
for i in range(3):
ghat = _calc_nodewise_row(X, i, 0.01)
that = _calc_nodewise_weight(X, ghat, i, 0.01)
ghat_l.append(ghat)
that_l.append(that)
theta_hat = _calc_approx_inv_cov(np.array(ghat_l), np.array(that_l))
assert_equal(theta_hat.shape, (3, 3))
def test_fit():
np.random.seed(435265)
X = np.random.normal(size=(50, 3))
inv = np.linalg.inv(np.cov(X.T))
regcov = RegularizedInvCovariance(exog=X)
regcov.fit()
# check that unregularized is what we expect
diff = np.linalg.norm(regcov.approx_inv_cov() - inv)
assert_(diff < 0.1)
# check that regularizing actually does something
regcov.fit(alpha=0.5)
assert_(np.sum(regcov.approx_inv_cov() == 0) > np.sum(inv == 0))