69 lines
2.4 KiB
Python
69 lines
2.4 KiB
Python
import numpy as np
|
|
import numpy.random
|
|
from numpy.testing import assert_almost_equal, assert_equal
|
|
from statsmodels.stats.contrast import Contrast
|
|
import statsmodels.stats.contrast as smc
|
|
|
|
|
|
class TestContrast:
|
|
@classmethod
|
|
def setup_class(cls):
|
|
numpy.random.seed(54321)
|
|
cls.X = numpy.random.standard_normal((40,10))
|
|
|
|
def test_contrast1(self):
|
|
term = np.column_stack((self.X[:,0], self.X[:,2]))
|
|
c = Contrast(term, self.X)
|
|
test_contrast = [[1] + [0]*9, [0]*2 + [1] + [0]*7]
|
|
assert_almost_equal(test_contrast, c.contrast_matrix)
|
|
|
|
def test_contrast2(self):
|
|
zero = np.zeros((40,))
|
|
term = np.column_stack((zero, self.X[:,2]))
|
|
c = Contrast(term, self.X)
|
|
test_contrast = [0]*2 + [1] + [0]*7
|
|
assert_almost_equal(test_contrast, c.contrast_matrix)
|
|
|
|
def test_contrast3(self):
|
|
P = np.dot(self.X, np.linalg.pinv(self.X))
|
|
resid = np.identity(40) - P
|
|
noise = np.dot(resid, numpy.random.standard_normal((40, 5)))
|
|
term = np.column_stack((noise, self.X[:,2]))
|
|
c = Contrast(term, self.X)
|
|
assert_equal(c.contrast_matrix.shape, (10,))
|
|
#TODO: this should actually test the value of the contrast, not only its dimension
|
|
|
|
def test_estimable(self):
|
|
X2 = np.column_stack((self.X, self.X[:,5]))
|
|
c = Contrast(self.X[:,5],X2)
|
|
#TODO: I do not think this should be estimable? isestimable correct?
|
|
|
|
|
|
def test_constraints():
|
|
cm_ = np.eye(4, 3, k=-1)
|
|
cpairs = np.array([[ 1., 0., 0.],
|
|
[ 0., 1., 0.],
|
|
[ 0., 0., 1.],
|
|
[-1., 1., 0.],
|
|
[-1., 0., 1.],
|
|
[ 0., -1., 1.]])
|
|
c0 = smc._constraints_factor(cm_)
|
|
assert_equal(c0, cpairs)
|
|
|
|
c1 = smc._contrast_pairs(3, 4, 0)
|
|
assert_equal(c1, cpairs)
|
|
|
|
# embedded
|
|
cpairs2 = np.array([[ 0., 1., 0., 0., 0., 0.],
|
|
[ 0., 0., 1., 0., 0., 0.],
|
|
[ 0., 0., 0., 1., 0., 0.],
|
|
[ 0., -1., 1., 0., 0., 0.],
|
|
[ 0., -1., 0., 1., 0., 0.],
|
|
[ 0., 0., -1., 1., 0., 0.]])
|
|
|
|
c0 = smc._constraints_factor(cm_, k_params=6, idx_start=1)
|
|
assert_equal(c0, cpairs2)
|
|
|
|
c1 = smc._contrast_pairs(6, 4, 1) # k_params, k_level, idx_start
|
|
assert_equal(c1, cpairs2)
|