@@ -16,46 +16,42 @@ class ErrorsInVariablesTest(unittest.TestCase):
1616 Tests EIV regression.
1717 """
1818
19- def test_linear_model (self ):
20- """
21- Tests EIV regression by fitting a linear model to generated
22- test data with known uncertainties of x and y.
23- """
19+ def setUp (self ):
2420 n = 100
2521 x = np .linspace (0.0 , 100.0 , n ).reshape ((n , 1 ))
2622 u = 1.0 + np .sqrt (x )
2723
28- rng = np .random .default_rng (42 )
29- y = x + rng .normal (0.0 , u , (n , 1 ))
30- x = x + rng .normal (0.0 , u , (n , 1 ))
24+ rng = np .random .default_rng (5489 )
25+ self .n = n
26+ self .u = u
27+ self .x = x + rng .normal (0.0 , u , (n , 1 ))
28+ self .y = x + rng .normal (0.0 , u , (n , 1 ))
3129
32- result = EIV ().fit (Linear (), x , y , ux = u , uy = u )
30+ def test_linear_model (self ):
31+ """
32+ Tests EIV regression by fitting a linear model to generated
33+ test data with known uncertainties of x and y.
34+ """
35+ result = EIV ().fit (Linear (), self .x , self .y , ux = self .u , uy = self .u )
3336
3437 self .assertEqual (0 , result .info )
3538 self .assertAlmostEqual (1.0 , result .popt [0 ], delta = 0.05 )
3639 self .assertAlmostEqual (0.0 , result .popt [1 ], delta = 1.00 )
3740 self .assertAlmostEqual (0.0 , result .punc [0 ], delta = 0.05 )
3841 self .assertAlmostEqual (0.0 , result .punc [1 ], delta = 1.00 )
3942 self .assertAlmostEqual (0.0 , result .pcov [0 , 0 ], delta = 0.001 )
40- self .assertAlmostEqual (0.0 , result .pcov [0 , 1 ], delta = 0.015 )
41- self .assertAlmostEqual (0.0 , result .pcov [1 , 0 ], delta = 0.015 )
43+ self .assertAlmostEqual (0.0 , result .pcov [0 , 1 ], delta = 0.020 )
44+ self .assertAlmostEqual (0.0 , result .pcov [1 , 0 ], delta = 0.020 )
4245 self .assertAlmostEqual (0.0 , result .pcov [1 , 1 ], delta = 1.000 )
4346
44- result = EIV ().fit (Linear (), x , y , ux = u , uy = u , covar = True )
45-
46- self .assertEqual (0 , result .info )
47- self .assertAlmostEqual (1.0 , result .popt [0 ], delta = 0.05 )
48- self .assertAlmostEqual (0.0 , result .popt [1 ], delta = 1.00 )
49- self .assertAlmostEqual (0.0 , result .punc [0 ], delta = 0.05 )
50- self .assertAlmostEqual (0.0 , result .punc [1 ], delta = 1.00 )
51- self .assertAlmostEqual (0.0 , result .pcov [0 , 0 ], delta = 0.001 )
52- self .assertAlmostEqual (0.0 , result .pcov [0 , 1 ], delta = 0.015 )
53- self .assertAlmostEqual (0.0 , result .pcov [1 , 0 ], delta = 0.015 )
54- self .assertAlmostEqual (0.0 , result .pcov [1 , 1 ], delta = 1.000 )
47+ dof = self .n - 2
48+ self .assertAlmostEqual (
49+ dof , 2.0 * result .cost , delta = np .sqrt (2.0 * dof )
50+ )
5551
5652 RegressionPlot (result ).plot (
57- x ,
58- y ,
53+ self . x ,
54+ self . y ,
5955 xlabel = r"$x$" ,
6056 ylabel = r"$y$" ,
6157 xrange = (- 10.0 , 110.0 ),
@@ -64,7 +60,7 @@ def test_linear_model(self):
6460 title = "Errors-in-variables regression" ,
6561 )
6662 MatrixPlot ().plot (
67- result .ycov_p (np .linspace (0.5 , 99.5 , n )),
63+ result .ycov_p (np .linspace (0.5 , 99.5 , self . n )),
6864 xlabel = r"$x$" ,
6965 ylabel = r"$x$" ,
7066 xrange = (0.5 , 99.5 ),
@@ -76,6 +72,30 @@ def test_linear_model(self):
7672 title = "Errors-in-variables regression" ,
7773 )
7874
75+ def test_linear_model_with_covar (self ):
76+ """
77+ Tests EIV regression by fitting a linear model to generated
78+ test data with known uncertainties of x and y.
79+ """
80+ result = EIV ().fit (
81+ Linear (), self .x , self .y , ux = self .u , uy = self .u , covar = True
82+ )
83+
84+ self .assertEqual (0 , result .info )
85+ self .assertAlmostEqual (1.0 , result .popt [0 ], delta = 0.05 )
86+ self .assertAlmostEqual (0.0 , result .popt [1 ], delta = 1.00 )
87+ self .assertAlmostEqual (0.0 , result .punc [0 ], delta = 0.05 )
88+ self .assertAlmostEqual (0.0 , result .punc [1 ], delta = 1.00 )
89+ self .assertAlmostEqual (0.0 , result .pcov [0 , 0 ], delta = 0.001 )
90+ self .assertAlmostEqual (0.0 , result .pcov [0 , 1 ], delta = 0.020 )
91+ self .assertAlmostEqual (0.0 , result .pcov [1 , 0 ], delta = 0.020 )
92+ self .assertAlmostEqual (0.0 , result .pcov [1 , 1 ], delta = 1.000 )
93+
94+ dof = self .n - 2
95+ self .assertAlmostEqual (
96+ dof , 2.0 * result .cost , delta = np .sqrt (2.0 * dof )
97+ )
98+
7999
80100if __name__ == "__main__" :
81101 unittest .main ()
0 commit comments