Coverage for nilearn/glm/tests/test_regression.py: 0%
52 statements
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-16 12:32 +0200
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-16 12:32 +0200
1"""Test functions for models.regression."""
3import pytest
4from numpy.testing import (
5 assert_almost_equal,
6 assert_array_almost_equal,
7 assert_array_equal,
8)
10from nilearn.glm import ARModel, OLSModel, SimpleRegressionResults
13@pytest.fixture()
14def X(rng): # noqa: N802
15 return rng.standard_normal(size=(40, 10))
18@pytest.fixture()
19def Y(rng): # noqa: N802
20 return rng.standard_normal(size=(40, 10))
23def test_ols(X, Y):
24 model = OLSModel(design=X)
25 results = model.fit(Y)
26 assert results.df_residuals == 30
27 assert results.residuals.shape[0] == 40
28 assert results.predicted.shape[0] == 40
31def test_ar(X, Y):
32 model = ARModel(design=X, rho=0.4)
33 results = model.fit(Y)
34 assert results.df_residuals == 30
35 assert results.residuals.shape[0] == 40
36 assert results.predicted.shape[0] == 40
39def test_residuals(X, Y):
40 # If design matrix contains an intercept, the
41 # mean of the residuals should be 0 (short of
42 # some numerical rounding errors)
43 X[:, 0] = 1
44 model = OLSModel(design=X)
45 results = model.fit(Y)
46 assert_almost_equal(results.residuals.mean(), 0)
47 assert len(results.whitened_residuals) == 40
50def test_predicted_r_square(X, Y):
51 Xshort = X.copy()[:10, :]
52 Yshort = Y.copy()[:10]
54 # Signal of 10 elements should be completely
55 # predicted by 10 predictors (short of some numerical
56 # rounding errors)
57 model = OLSModel(design=Xshort)
58 results = model.fit(Yshort)
59 assert_almost_equal(results.residuals.sum(), 0)
60 assert_array_almost_equal(results.predicted, Yshort)
61 assert_almost_equal(results.r_square, 1.0)
64def test_ols_degenerate(X, Y):
65 X[:, 0] = X[:, 1] + X[:, 2]
66 model = OLSModel(design=X)
67 results = model.fit(Y)
68 assert results.df_residuals == 31
71def test_ar_degenerate(X, Y):
72 X[:, 0] = X[:, 1] + X[:, 2]
73 model = ARModel(design=X, rho=0.9)
74 results = model.fit(Y)
75 assert results.df_residuals == 31
78def test_simple_results(X, Y):
79 model = OLSModel(X)
80 results = model.fit(Y)
82 simple_results = SimpleRegressionResults(results)
83 assert_array_equal(results.predicted, simple_results.predicted(X))
84 assert_array_equal(results.residuals, simple_results.residuals(Y, X))
85 assert_array_equal(
86 results.normalized_residuals, simple_results.normalized_residuals(Y, X)
87 )