AIM-PIbd-32-Kurbanova-A-A/aimenv/Lib/site-packages/statsmodels/stats/tests/test_contrast.py
2024-10-02 22:15:59 +04:00

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)