From d4ec4dd5ef3a54c0aaeb73d0b397a983b0f51dde Mon Sep 17 00:00:00 2001 From: yuanningd Date: Mon, 12 Sep 2022 09:22:55 +0800 Subject: [PATCH 1/7] Add test to GrangerCausality --- tests/TestGranger.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/tests/TestGranger.py b/tests/TestGranger.py index caecbb27..238ea844 100644 --- a/tests/TestGranger.py +++ b/tests/TestGranger.py @@ -19,7 +19,6 @@ def syn_data_3d(self): # generate transition matrix, time lag 2 np.random.seed(0) A = 0.2 * np.random.rand(3,6) - print('True matrix is \n {}'.format(A)) # generate time series T = 1000 data = np.random.rand(3, T) @@ -35,7 +34,6 @@ def syn_data_2d(self): A = 0.5*np.random.rand(2,4) A[0,1] = 0 A[0,3] = 0 - print('True matrix is \n {}'.format(A)) # generate time series T = 100 data = np.random.rand(2, T) @@ -54,8 +52,10 @@ def test_granger_test(self): dataset = self.syn_data_2d() G = Granger() p_value_matrix, adj_matrix = G.granger_test_2d(data=dataset) - print('P-value matrix is \n {}'.format(p_value_matrix)) - print('Adjacency matrix is \n {}'.format(adj_matrix)) + p_value_matrix_truth = np.array([[0, 0.5989, 0, 0.5397], [0.0006, 0, 0.0014, 0]]) + adj_matrix_truth = np.array([[1, 0, 1, 0], [1, 1, 1, 1]]) + self.assertEqual((np.round(p_value_matrix, 4) - p_value_matrix_truth).all(), 0) + self.assertEqual((adj_matrix - adj_matrix_truth).all(), 0) # example2 # for data with multi-dimensional variables, granger lasso regression. @@ -66,7 +66,10 @@ def test_granger_lasso(self): dataset = self.syn_data_3d() G = Granger() coeff = G.granger_lasso(data=dataset) - print('Estimated matrix is \n {}'.format(coeff)) + coeff_truth = np.array([[0.09, 0.1101, 0.1527, 0.1127, 0.0226, 0.1538], + [0.1004, 0.15, 0.1757, 0.1037, 0.1612, 0.0987], + [0.1155, 0.1485, 0, 0.039, -0., 0.1085]]) + self.assertEqual((np.round(coeff, 4) - coeff_truth).all(), 0) if __name__ == '__main__': From 75395223bd3e7a5d9ef5cbbfee7599e7e045e191 Mon Sep 17 00:00:00 2001 From: yuanningd Date: Mon, 12 Sep 2022 09:25:10 +0800 Subject: [PATCH 2/7] Revert "Add test to GrangerCausality" This reverts commit d4ec4dd5ef3a54c0aaeb73d0b397a983b0f51dde. --- tests/TestGranger.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/tests/TestGranger.py b/tests/TestGranger.py index 238ea844..caecbb27 100644 --- a/tests/TestGranger.py +++ b/tests/TestGranger.py @@ -19,6 +19,7 @@ def syn_data_3d(self): # generate transition matrix, time lag 2 np.random.seed(0) A = 0.2 * np.random.rand(3,6) + print('True matrix is \n {}'.format(A)) # generate time series T = 1000 data = np.random.rand(3, T) @@ -34,6 +35,7 @@ def syn_data_2d(self): A = 0.5*np.random.rand(2,4) A[0,1] = 0 A[0,3] = 0 + print('True matrix is \n {}'.format(A)) # generate time series T = 100 data = np.random.rand(2, T) @@ -52,10 +54,8 @@ def test_granger_test(self): dataset = self.syn_data_2d() G = Granger() p_value_matrix, adj_matrix = G.granger_test_2d(data=dataset) - p_value_matrix_truth = np.array([[0, 0.5989, 0, 0.5397], [0.0006, 0, 0.0014, 0]]) - adj_matrix_truth = np.array([[1, 0, 1, 0], [1, 1, 1, 1]]) - self.assertEqual((np.round(p_value_matrix, 4) - p_value_matrix_truth).all(), 0) - self.assertEqual((adj_matrix - adj_matrix_truth).all(), 0) + print('P-value matrix is \n {}'.format(p_value_matrix)) + print('Adjacency matrix is \n {}'.format(adj_matrix)) # example2 # for data with multi-dimensional variables, granger lasso regression. @@ -66,10 +66,7 @@ def test_granger_lasso(self): dataset = self.syn_data_3d() G = Granger() coeff = G.granger_lasso(data=dataset) - coeff_truth = np.array([[0.09, 0.1101, 0.1527, 0.1127, 0.0226, 0.1538], - [0.1004, 0.15, 0.1757, 0.1037, 0.1612, 0.0987], - [0.1155, 0.1485, 0, 0.039, -0., 0.1085]]) - self.assertEqual((np.round(coeff, 4) - coeff_truth).all(), 0) + print('Estimated matrix is \n {}'.format(coeff)) if __name__ == '__main__': From 966aa4cbf78084be43dc5863747451a56b6696a3 Mon Sep 17 00:00:00 2001 From: yuanningd <50065357+aoqiz@users.noreply.github.com> Date: Mon, 12 Sep 2022 09:44:57 +0800 Subject: [PATCH 3/7] Add test to GrangerCausality --- tests/TestGranger.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/tests/TestGranger.py b/tests/TestGranger.py index caecbb27..238ea844 100644 --- a/tests/TestGranger.py +++ b/tests/TestGranger.py @@ -19,7 +19,6 @@ def syn_data_3d(self): # generate transition matrix, time lag 2 np.random.seed(0) A = 0.2 * np.random.rand(3,6) - print('True matrix is \n {}'.format(A)) # generate time series T = 1000 data = np.random.rand(3, T) @@ -35,7 +34,6 @@ def syn_data_2d(self): A = 0.5*np.random.rand(2,4) A[0,1] = 0 A[0,3] = 0 - print('True matrix is \n {}'.format(A)) # generate time series T = 100 data = np.random.rand(2, T) @@ -54,8 +52,10 @@ def test_granger_test(self): dataset = self.syn_data_2d() G = Granger() p_value_matrix, adj_matrix = G.granger_test_2d(data=dataset) - print('P-value matrix is \n {}'.format(p_value_matrix)) - print('Adjacency matrix is \n {}'.format(adj_matrix)) + p_value_matrix_truth = np.array([[0, 0.5989, 0, 0.5397], [0.0006, 0, 0.0014, 0]]) + adj_matrix_truth = np.array([[1, 0, 1, 0], [1, 1, 1, 1]]) + self.assertEqual((np.round(p_value_matrix, 4) - p_value_matrix_truth).all(), 0) + self.assertEqual((adj_matrix - adj_matrix_truth).all(), 0) # example2 # for data with multi-dimensional variables, granger lasso regression. @@ -66,7 +66,10 @@ def test_granger_lasso(self): dataset = self.syn_data_3d() G = Granger() coeff = G.granger_lasso(data=dataset) - print('Estimated matrix is \n {}'.format(coeff)) + coeff_truth = np.array([[0.09, 0.1101, 0.1527, 0.1127, 0.0226, 0.1538], + [0.1004, 0.15, 0.1757, 0.1037, 0.1612, 0.0987], + [0.1155, 0.1485, 0, 0.039, -0., 0.1085]]) + self.assertEqual((np.round(coeff, 4) - coeff_truth).all(), 0) if __name__ == '__main__': From d1ac2f4d658e81657c590147ea519d60294101c4 Mon Sep 17 00:00:00 2001 From: yuanningd <50065357+aoqiz@users.noreply.github.com> Date: Mon, 12 Sep 2022 09:46:20 +0800 Subject: [PATCH 4/7] Revert "Add test to GrangerCausality" This reverts commit 966aa4cbf78084be43dc5863747451a56b6696a3. --- tests/TestGranger.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/tests/TestGranger.py b/tests/TestGranger.py index 238ea844..caecbb27 100644 --- a/tests/TestGranger.py +++ b/tests/TestGranger.py @@ -19,6 +19,7 @@ def syn_data_3d(self): # generate transition matrix, time lag 2 np.random.seed(0) A = 0.2 * np.random.rand(3,6) + print('True matrix is \n {}'.format(A)) # generate time series T = 1000 data = np.random.rand(3, T) @@ -34,6 +35,7 @@ def syn_data_2d(self): A = 0.5*np.random.rand(2,4) A[0,1] = 0 A[0,3] = 0 + print('True matrix is \n {}'.format(A)) # generate time series T = 100 data = np.random.rand(2, T) @@ -52,10 +54,8 @@ def test_granger_test(self): dataset = self.syn_data_2d() G = Granger() p_value_matrix, adj_matrix = G.granger_test_2d(data=dataset) - p_value_matrix_truth = np.array([[0, 0.5989, 0, 0.5397], [0.0006, 0, 0.0014, 0]]) - adj_matrix_truth = np.array([[1, 0, 1, 0], [1, 1, 1, 1]]) - self.assertEqual((np.round(p_value_matrix, 4) - p_value_matrix_truth).all(), 0) - self.assertEqual((adj_matrix - adj_matrix_truth).all(), 0) + print('P-value matrix is \n {}'.format(p_value_matrix)) + print('Adjacency matrix is \n {}'.format(adj_matrix)) # example2 # for data with multi-dimensional variables, granger lasso regression. @@ -66,10 +66,7 @@ def test_granger_lasso(self): dataset = self.syn_data_3d() G = Granger() coeff = G.granger_lasso(data=dataset) - coeff_truth = np.array([[0.09, 0.1101, 0.1527, 0.1127, 0.0226, 0.1538], - [0.1004, 0.15, 0.1757, 0.1037, 0.1612, 0.0987], - [0.1155, 0.1485, 0, 0.039, -0., 0.1085]]) - self.assertEqual((np.round(coeff, 4) - coeff_truth).all(), 0) + print('Estimated matrix is \n {}'.format(coeff)) if __name__ == '__main__': From b4eb059c1a192f99d8ed7874c67c41e302d37716 Mon Sep 17 00:00:00 2001 From: aoqiz Date: Mon, 12 Sep 2022 09:49:15 +0800 Subject: [PATCH 5/7] Add auto test to GrangerCausality --- tests/TestGranger.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/tests/TestGranger.py b/tests/TestGranger.py index caecbb27..238ea844 100644 --- a/tests/TestGranger.py +++ b/tests/TestGranger.py @@ -19,7 +19,6 @@ def syn_data_3d(self): # generate transition matrix, time lag 2 np.random.seed(0) A = 0.2 * np.random.rand(3,6) - print('True matrix is \n {}'.format(A)) # generate time series T = 1000 data = np.random.rand(3, T) @@ -35,7 +34,6 @@ def syn_data_2d(self): A = 0.5*np.random.rand(2,4) A[0,1] = 0 A[0,3] = 0 - print('True matrix is \n {}'.format(A)) # generate time series T = 100 data = np.random.rand(2, T) @@ -54,8 +52,10 @@ def test_granger_test(self): dataset = self.syn_data_2d() G = Granger() p_value_matrix, adj_matrix = G.granger_test_2d(data=dataset) - print('P-value matrix is \n {}'.format(p_value_matrix)) - print('Adjacency matrix is \n {}'.format(adj_matrix)) + p_value_matrix_truth = np.array([[0, 0.5989, 0, 0.5397], [0.0006, 0, 0.0014, 0]]) + adj_matrix_truth = np.array([[1, 0, 1, 0], [1, 1, 1, 1]]) + self.assertEqual((np.round(p_value_matrix, 4) - p_value_matrix_truth).all(), 0) + self.assertEqual((adj_matrix - adj_matrix_truth).all(), 0) # example2 # for data with multi-dimensional variables, granger lasso regression. @@ -66,7 +66,10 @@ def test_granger_lasso(self): dataset = self.syn_data_3d() G = Granger() coeff = G.granger_lasso(data=dataset) - print('Estimated matrix is \n {}'.format(coeff)) + coeff_truth = np.array([[0.09, 0.1101, 0.1527, 0.1127, 0.0226, 0.1538], + [0.1004, 0.15, 0.1757, 0.1037, 0.1612, 0.0987], + [0.1155, 0.1485, 0, 0.039, -0., 0.1085]]) + self.assertEqual((np.round(coeff, 4) - coeff_truth).all(), 0) if __name__ == '__main__': From 038f48dd7baf92711764661df44b7885ee279533 Mon Sep 17 00:00:00 2001 From: aoqiz Date: Mon, 12 Sep 2022 09:52:14 +0800 Subject: [PATCH 6/7] Update TestGranger.py --- tests/TestGranger.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/TestGranger.py b/tests/TestGranger.py index 238ea844..114c0bc1 100644 --- a/tests/TestGranger.py +++ b/tests/TestGranger.py @@ -71,8 +71,3 @@ def test_granger_lasso(self): [0.1155, 0.1485, 0, 0.039, -0., 0.1085]]) self.assertEqual((np.round(coeff, 4) - coeff_truth).all(), 0) - -if __name__ == '__main__': - test = TestGranger() - test.test_granger_test() - test.test_granger_lasso() From 5b6972215dd7a6d9ad9f6b54a08dc837b8f4e58c Mon Sep 17 00:00:00 2001 From: aoqiz Date: Fri, 14 Oct 2022 23:04:48 +0800 Subject: [PATCH 7/7] Add comments on how the p-values are generate. --- tests/TestGranger.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/TestGranger.py b/tests/TestGranger.py index 114c0bc1..1e51173e 100644 --- a/tests/TestGranger.py +++ b/tests/TestGranger.py @@ -12,6 +12,19 @@ from causallearn.search.Granger.Granger import Granger +######################################### Test Notes ########################################### +# All the benchmark results (p_value_matrix_truth, adj_matrix_truth, coeff_truth) # +# are obtained from the code of causal-learn as of commit # +# https://github.com/cmu-phil/causal-learn/commit/b49980d046607baaaa66ff8dc0ceb98452ab8616 # +# (b49980d). # +# # +# We are not sure if the results are completely "correct" (reflect ground truth graph) or not. # +# So if you find your tests failed, it means that your modified code is logically inconsistent # +# with the code as of b49980d, but not necessarily means that your code is "wrong". # +# If you are sure that your modification is "correct" (e.g. fixed some bugs in b49980d), # +# please report it to us. We will then modify these benchmark results accordingly. Thanks :) # +######################################### Test Notes ########################################### + class TestGranger(unittest.TestCase): # simulate data from a VAR model