diff --git a/docs/image/bootstrap_hist.png b/docs/image/bootstrap_hist.png index d88a1cb..9212688 100644 Binary files a/docs/image/bootstrap_hist.png and b/docs/image/bootstrap_hist.png differ diff --git a/docs/image/bottom_up_parce_hist.png b/docs/image/bottom_up_parce_hist.png index f1c0ea5..e9c7f45 100644 Binary files a/docs/image/bottom_up_parce_hist.png and b/docs/image/bottom_up_parce_hist.png differ diff --git a/docs/image/longitudinal_hist.png b/docs/image/longitudinal_hist.png index 191a9e3..067ef9a 100644 Binary files a/docs/image/longitudinal_hist.png and b/docs/image/longitudinal_hist.png differ diff --git a/docs/image/longitudinal_scatter1.png b/docs/image/longitudinal_scatter1.png index 0dad4dd..afb1cc7 100644 Binary files a/docs/image/longitudinal_scatter1.png and b/docs/image/longitudinal_scatter1.png differ diff --git a/docs/image/longitudinal_scatter2.png b/docs/image/longitudinal_scatter2.png index e99b8a3..28c959e 100644 Binary files a/docs/image/longitudinal_scatter2.png and b/docs/image/longitudinal_scatter2.png differ diff --git a/docs/image/multiple_dataset_hist.png b/docs/image/multiple_dataset_hist.png index d348a2c..e57ee8e 100644 Binary files a/docs/image/multiple_dataset_hist.png and b/docs/image/multiple_dataset_hist.png differ diff --git a/docs/image/rcd_hist.png b/docs/image/rcd_hist.png index 4c915d9..2230434 100644 Binary files a/docs/image/rcd_hist.png and b/docs/image/rcd_hist.png differ diff --git a/docs/image/var_hist.png b/docs/image/var_hist.png index 574e7d7..cc6a3fc 100644 Binary files a/docs/image/var_hist.png and b/docs/image/var_hist.png differ diff --git a/docs/image/varma_hist.png b/docs/image/varma_hist.png index c21c8c9..18e15f8 100644 Binary files a/docs/image/varma_hist.png and b/docs/image/varma_hist.png differ diff --git a/docs/tutorial/bootstrap.rst b/docs/tutorial/bootstrap.rst index 43b8f6b..741cccf 100644 --- a/docs/tutorial/bootstrap.rst +++ b/docs/tutorial/bootstrap.rst @@ -23,8 +23,8 @@ In this example, we need to import ``numpy``, ``pandas``, and ``graphviz`` in ad .. parsed-literal:: - ['1.16.2', '0.24.2', '0.11.1', '1.5.4'] - + ['1.24.4', '2.0.3', '0.20.1', '1.8.3'] + Test data --------- @@ -195,15 +195,15 @@ We can check the result by utility function. .. parsed-literal:: + x5 <--- x0 (b>0) (100.0%) x1 <--- x0 (b>0) (100.0%) x1 <--- x2 (b>0) (100.0%) - x5 <--- x0 (b>0) (100.0%) - x0 <--- x3 (b>0) (99.0%) + x4 <--- x2 (b<0) (100.0%) + x0 <--- x3 (b>0) (98.0%) x4 <--- x0 (b>0) (98.0%) x2 <--- x3 (b>0) (96.0%) - x4 <--- x2 (b<0) (94.0%) - x4 <--- x5 (b>0) (20.0%) - + x3 <--- x2 (b>0) (4.0%) + Directed Acyclic Graphs ----------------------- @@ -227,7 +227,7 @@ We can check the result by utility function. .. parsed-literal:: - DAG[0]: 54.0% + DAG[0]: 84.0% x0 <--- x3 (b>0) x1 <--- x0 (b>0) x1 <--- x2 (b>0) @@ -235,25 +235,24 @@ We can check the result by utility function. x4 <--- x0 (b>0) x4 <--- x2 (b<0) x5 <--- x0 (b>0) - DAG[1]: 16.0% + DAG[1]: 3.0% x0 <--- x3 (b>0) x1 <--- x0 (b>0) x1 <--- x2 (b>0) - x2 <--- x3 (b>0) + x3 <--- x2 (b>0) x4 <--- x0 (b>0) x4 <--- x2 (b<0) - x4 <--- x5 (b>0) x5 <--- x0 (b>0) - DAG[2]: 7.0% + DAG[2]: 2.0% x0 <--- x3 (b>0) x1 <--- x0 (b>0) x1 <--- x2 (b>0) - x1 <--- x3 (b>0) + x1 <--- x3 (b<0) x2 <--- x3 (b>0) x4 <--- x0 (b>0) x4 <--- x2 (b<0) x5 <--- x0 (b>0) - + Probability ----------- @@ -269,13 +268,13 @@ bootstrapping. .. parsed-literal:: - [[0. 0. 0.1 0.99 0.02 0. ] - [1. 0. 1. 0.1 0. 0.05] - [0. 0. 0. 0.96 0. 0. ] + [[0. 0. 0.03 0.98 0.02 0. ] + [1. 0. 1. 0.02 0. 0.01] + [0.01 0. 0. 0.96 0. 0.01] [0. 0. 0.04 0. 0. 0. ] - [0.98 0. 0.94 0.02 0. 0.2 ] - [1. 0. 0. 0. 0. 0. ]] - + [0.98 0.01 1. 0.02 0. 0.02] + [1. 0. 0.02 0.02 0. 0. ]] + Total Causal Effects -------------------- @@ -354,146 +353,152 @@ below. 0 x3 x0 - 3.006190 + 3.004106 1.00 1 x0 x1 - 3.004868 + 2.963177 1.00 2 x2 x1 - 2.092102 + 2.017539 1.00 3 x3 x1 - 20.931938 + 20.928254 1.00 4 x0 x5 - 3.982892 + 3.997787 1.00 5 x3 - x5 - 12.024250 + x4 + 18.077943 1.00 6 - x2 - x4 - -0.887620 + x3 + x5 + 12.012988 1.00 7 - x3 + x2 x4 - 18.077244 + -1.006362 1.00 8 x0 x4 - 7.993145 + 8.011818 0.98 9 x3 x2 - 5.970163 + 5.964879 0.96 10 + x2 x5 - x1 - 0.011708 - 0.79 + 0.396327 + 0.09 11 x2 - x5 - 0.024284 - 0.72 + x0 + 0.487915 + 0.07 12 - x0 x2 - 0.014228 - 0.70 + x3 + 0.164565 + 0.04 13 x5 x4 - 0.015170 - 0.66 + 0.087437 + 0.03 14 - x2 - x0 - 0.015480 - 0.30 + x4 + x5 + 0.496445 + 0.02 15 - x1 x5 - 0.021215 - 0.21 + x1 + -0.064703 + 0.02 16 x4 x1 - -0.004251 - 0.04 + 0.367100 + 0.02 17 - x2 - x3 - 0.163050 - 0.04 + x4 + x0 + 0.124114 + 0.02 18 - x4 x0 - 0.122301 - 0.02 + x2 + 0.056261 + 0.01 19 + x1 x4 + -0.097108 + 0.01 + + + 20 x5 - 0.009574 - 0.02 + x2 + -0.111894 + 0.01 -
@@ -560,41 +565,40 @@ We can easily perform sorting operations with pandas.DataFrame. 3 x3 x1 - 20.931938 + 20.928254 1.00 - 7 + 5 x3 x4 - 18.077244 + 18.077943 1.00 - 5 + 6 x3 x5 - 12.024250 + 12.012988 1.00 8 x0 x4 - 7.993145 + 8.011818 0.98 9 x3 x2 - 5.970163 + 5.964879 0.96 -
@@ -656,44 +660,43 @@ We can easily perform sorting operations with pandas.DataFrame. - 19 - x4 + 20 x5 - 0.009574 - 0.02 + x2 + -0.111894 + 0.01 18 - x4 x0 - 0.122301 - 0.02 + x2 + 0.056261 + 0.01 - 17 - x2 - x3 - 0.163050 - 0.04 + 19 + x1 + x4 + -0.097108 + 0.01 - 16 + 17 x4 - x1 - -0.004251 - 0.04 + x0 + 0.124114 + 0.02 - 15 + 16 + x4 x1 - x5 - 0.021215 - 0.21 + 0.367100 + 0.02 -
@@ -761,41 +764,40 @@ following code extracts the causal direction towards x1. 1 x0 x1 - 3.004868 + 2.963177 1.00 2 x2 x1 - 2.092102 + 2.017539 1.00 3 x3 x1 - 20.931938 + 20.928254 1.00 - 10 + 15 x5 x1 - 0.011708 - 0.79 + -0.064703 + 0.02 16 x4 x1 - -0.004251 - 0.04 + 0.367100 + 0.02 -
Because it holds the raw data of the total causal effect (the original data @@ -887,43 +889,55 @@ variable X0 to variable X1. 0 [3, 0, 1] - 8.644765 - 0.99 + 8.893562 + 0.98 1 [3, 2, 1] - 11.653517 + 12.030408 0.96 2 - [3, 1] - 0.102936 - 0.10 + [3, 2, 0, 1] + 2.239175 + 0.03 3 - [3, 2, 0, 1] - 1.007787 - 0.08 + [3, 1] + -0.639462 + 0.02 4 - [3, 0, 5, 1] - 0.889629 - 0.05 + [3, 2, 4, 0, 1] + -3.194541 + 0.02 5 [3, 4, 0, 1] - 8.419805 + 9.820705 0.02 6 - [3, 2, 4, 0, 1] - -3.802326 + [3, 0, 2, 1] + 3.061033 + 0.01 + + + 7 + [3, 0, 5, 1] + 1.176834 + 0.01 + + + 8 + [3, 0, 5, 2, 1] + -2.719517 0.01 diff --git a/docs/tutorial/bottom_up_parce.rst b/docs/tutorial/bottom_up_parce.rst index ede67cc..806f2a8 100644 --- a/docs/tutorial/bottom_up_parce.rst +++ b/docs/tutorial/bottom_up_parce.rst @@ -66,8 +66,8 @@ In this example, we need to import ``numpy``, ``pandas``, and .. parsed-literal:: - ['1.16.2', '0.24.2', '0.11.1', '1.5.4'] - + ['1.24.4', '2.0.3', '0.20.1', '1.8.3'] + Test data --------- @@ -79,7 +79,7 @@ variable for x2 and x3. .. code-block:: python np.random.seed(1000) - + x6 = np.random.uniform(size=1000) x3 = 2.0*x6 + np.random.uniform(size=1000) x0 = 0.5*x3 + np.random.uniform(size=1000) @@ -87,10 +87,10 @@ variable for x2 and x3. x1 = 0.5*x0 + 0.5*x2 + np.random.uniform(size=1000) x5 = 0.5*x0 + np.random.uniform(size=1000) x4 = 0.5*x0 - 0.5*x2 + np.random.uniform(size=1000) - + # The latent variable x6 is not included. X = pd.DataFrame(np.array([x0, x1, x2, x3, x4, x5]).T, columns=['x0', 'x1', 'x2', 'x3', 'x4', 'x5']) - + X.head() @@ -209,16 +209,16 @@ variable for x2 and x3. [0.5, 0.0,-0.5, 0.0, 0.0, 0.0, 0.0], [0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]]) - + dot = make_dot(m) - + # Save pdf dot.render('dag') - + # Save png dot.format = 'png' dot.render('dag') - + dot @@ -244,7 +244,7 @@ call the ``fit`` method. .. parsed-literal:: - + @@ -278,12 +278,12 @@ between variables with latent confounders are np.nan. .. parsed-literal:: - array([[ 0. , 0. , 0. , 0.506, 0. , 0. ], - [ 0.499, 0. , 0.495, 0.007, 0. , 0. ], + array([[ 0. , 0. , 0. , 0.511, 0. , 0. ], + [ 0.504, 0. , 0.499, 0. , 0. , 0. ], [ 0. , 0. , 0. , nan, 0. , 0. ], [ 0. , 0. , nan, 0. , 0. , 0. ], - [ 0.448, 0. , -0.451, 0. , 0. , 0. ], - [ 0.48 , 0. , 0. , 0. , 0. , 0. ]]) + [ 0.481, 0. , -0.473, 0. , 0. , 0. ], + [ 0.519, 0. , 0. , 0. , 0. , 0. ]]) @@ -316,13 +316,13 @@ the error variables :math:`e_i` and :math:`e_j`. .. parsed-literal:: - [[0. 0.491 nan nan 0.763 0.2 ] - [0.491 0. nan nan 0.473 0.684] + [[0. 0.523 nan nan 0.8 0.399] + [0.523 0. nan nan 0.44 0.6 ] [ nan nan 0. nan nan nan] [ nan nan nan 0. nan nan] - [0.763 0.473 nan nan 0. 0.427] - [0.2 0.684 nan nan 0.427 0. ]] - + [0.8 0.44 nan nan 0. 0.446] + [0.399 0.6 nan nan 0.446 0. ]] + Bootstrapping ------------- @@ -366,10 +366,10 @@ We can check the result by utility function. x1 <--- x0 (b>0) (41.0%) x1 <--- x2 (b>0) (41.0%) x5 <--- x0 (b>0) (26.0%) - x1 <--- x3 (b>0) (21.0%) x0 <--- x3 (b>0) (12.0%) - x5 <--- x2 (b>0) (7.0%) - + x1 <--- x4 (b>0) (6.0%) + x4 <--- x1 (b>0) (4.0%) + Directed Acyclic Graphs ----------------------- @@ -394,13 +394,17 @@ We can check the result by utility function. .. parsed-literal:: DAG[0]: 33.0% - DAG[1]: 13.0% + DAG[1]: 12.0% x4 <--- x0 (b>0) x4 <--- x2 (b<0) - DAG[2]: 7.0% + DAG[2]: 10.0% + x0 <--- x3 (b>0) x1 <--- x0 (b>0) x1 <--- x2 (b>0) - + x4 <--- x0 (b>0) + x4 <--- x2 (b<0) + x5 <--- x0 (b>0) + Probability ----------- @@ -417,12 +421,12 @@ bootstrapping. .. parsed-literal:: [[0. 0.01 0. 0.12 0.01 0. ] - [0.41 0. 0.41 0.21 0. 0. ] + [0.41 0. 0.41 0. 0.06 0. ] [0. 0. 0. 0.02 0. 0. ] [0. 0. 0. 0. 0. 0. ] - [0.45 0.03 0.45 0.02 0. 0.07] - [0.26 0.01 0.07 0.02 0. 0. ]] - + [0.45 0.04 0.45 0.02 0. 0.01] + [0.26 0. 0. 0. 0. 0. ]] + Total Causal Effects -------------------- @@ -501,70 +505,84 @@ below. 0 x0 x5 - 0.515510 + 0.518064 0.12 1 x0 x1 - 0.477885 + 0.504613 0.11 2 x0 x4 - 0.494946 + 0.479543 0.11 3 x2 x1 - 0.482657 + 0.508531 0.02 4 x2 x4 - -0.490889 + -0.476555 0.02 5 x3 x0 - 0.511008 + 0.490217 0.01 6 x3 x1 - 0.653876 + 0.630292 0.01 7 + x4 + x1 + 0.097063 + 0.01 + + + 8 x3 x2 - 0.790837 + 0.796101 0.01 - 8 + 9 + x1 + x4 + 0.089596 + 0.01 + + + 10 x3 x4 - -0.126227 + -0.151733 0.01 - 9 + 11 x3 x5 - 0.265528 + 0.254280 0.01 @@ -633,38 +651,38 @@ We can easily perform sorting operations with pandas.DataFrame. - 7 + 8 x3 x2 - 0.790837 + 0.796101 0.01 6 x3 x1 - 0.653876 + 0.630292 0.01 0 x0 x5 - 0.515510 + 0.518064 0.12 - 5 - x3 - x0 - 0.511008 - 0.01 + 3 + x2 + x1 + 0.508531 + 0.02 - 2 + 1 x0 - x4 - 0.494946 + x1 + 0.504613 0.11 @@ -734,35 +752,35 @@ We can easily perform sorting operations with pandas.DataFrame. 5 x3 x0 - 0.511008 + 0.490217 0.01 6 x3 x1 - 0.653876 + 0.630292 0.01 7 - x3 - x2 - 0.790837 + x4 + x1 + 0.097063 0.01 8 x3 - x4 - -0.126227 + x2 + 0.796101 0.01 9 - x3 - x5 - 0.265528 + x1 + x4 + 0.089596 0.01 @@ -835,21 +853,28 @@ following code extracts the causal direction towards x1. 1 x0 x1 - 0.477885 + 0.504613 0.11 3 x2 x1 - 0.482657 + 0.508531 0.02 6 x3 x1 - 0.653876 + 0.630292 + 0.01 + + + 7 + x4 + x1 + 0.097063 0.01 @@ -946,20 +971,14 @@ variable X0 to variable X1. 0 - [3, 1] - 0.028621 - 0.23 - - - 1 [3, 0, 1] - 0.255185 + 0.263068 0.11 - 2 + 1 [3, 2, 1] - 0.372204 + 0.404828 0.02 diff --git a/docs/tutorial/longitudinal.rst b/docs/tutorial/longitudinal.rst index 0e90b65..7cfc331 100644 --- a/docs/tutorial/longitudinal.rst +++ b/docs/tutorial/longitudinal.rst @@ -61,8 +61,8 @@ In this example, we need to import ``numpy``, ``pandas``, and .. parsed-literal:: - ['1.16.2', '0.24.2', '0.11.1', '1.5.2'] - + ['1.24.4', '2.0.3', '0.20.1', '1.8.3'] + Test data --------- @@ -230,30 +230,29 @@ Also, using the :attr:`~lingam.LongitudinalLiNGAM.adjacency_matrices_` property, [nan nan nan nan nan] [nan nan nan nan nan]] B(1,1): - [[ 0. 0.099 0. 0. -0.52 ] + [[ 0. 0. 0. 0. -0.611] [ 0. 0. 0. 0.398 0. ] - [ 0. 0.384 0. -0.162 0. ] + [ 0. 0.328 0. 0. 0. ] [ 0. 0. 0. 0. 0. ] - [ 0. -0.249 -0.074 0. 0. ]] + [ 0. -0.338 0. 0. 0. ]] B(1,0): - [[ 0.025 0.116 -0.202 0.054 -0.216] + [[ 0.029 0.064 -0.27 0.065 -0.18 ] [ 0.139 -0.211 -0.43 0.558 0.051] - [-0.135 0.178 0.421 0.173 0.031] + [-0.181 0.178 0.466 0.214 0.079] [ 0.384 -0.083 -0.495 -0.072 -0.323] - [-0.206 -0.354 -0.199 -0.293 0.468]] + [-0.174 -0.383 -0.274 -0.275 0.457]] B(2,2): [[ 0. 0. 0. 0. 0. ] - [ 0. 0. -0.67 0. 0.46 ] - [ 0.187 0. 0. 0. 0. ] - [ 0. 0. -0.341 0. 0. ] + [ 0. 0. -0.696 0. 0.487] + [ 0.231 0. 0. 0. 0. ] + [ 0. 0. -0.409 0. 0. ] [ 0.25 0. 0. 0. 0. ]] B(2,1): [[ 0.194 0.2 0.031 -0.473 -0.002] - [-0.384 -0.037 0.158 0.255 0.095] - [ 0.126 0.275 -0.048 0.502 -0.019] - [ 0.238 -0.469 0.475 -0.029 -0.176] + [-0.376 -0.038 0.16 0.261 0.102] + [ 0.117 0.266 -0.05 0.523 -0.019] + [ 0.249 -0.448 0.473 -0.001 -0.177] [-0.177 0.309 -0.112 0.295 -0.273]] - .. code-block:: python @@ -311,12 +310,11 @@ the error variables :math:`e_i` and :math:`e_j`. .. parsed-literal:: - [[0. 0.167 0.107 0.534 0.313] - [0.167 0. 0.195 0.821 0.204] - [0.107 0.195 0. 0.005 0.105] - [0.534 0.821 0.005 0. 0.049] - [0.313 0.204 0.105 0.049 0. ]] - + [[0. 0.026 0.064 0.289 0.051] + [0.026 0. 0.363 0.821 0.581] + [0.064 0.363 0. 0.067 0.098] + [0.289 0.821 0.067 0. 0.059] + [0.051 0.581 0.098 0.059 0. ]] .. code-block:: python @@ -326,12 +324,12 @@ the error variables :math:`e_i` and :math:`e_j`. .. parsed-literal:: - [[0. 0.723 0.596 0.579 0.564] - [0.723 0. 0.612 0.688 0.412] - [0.596 0.612 0. 0.267 0.636] - [0.579 0.688 0.267 0. 0.421] - [0.564 0.412 0.636 0.421 0. ]] - + [[0. 0.715 0.719 0.593 0.564] + [0.715 0. 0.78 0.7 0.504] + [0.719 0.78 0. 0.532 0.591] + [0.593 0.7 0.532 0. 0.401] + [0.564 0.504 0.591 0.401 0. ]] + Bootstrapping ------------- @@ -361,19 +359,18 @@ Since :class:`~lingam.LongitudinalBootstrapResult` object is returned, we can ge .. parsed-literal:: - x4(1) <--- x4(0) (b>0) (100.0%) x2(1) <--- x0(0) (b<0) (100.0%) + x4(1) <--- x1(0) (b<0) (100.0%) + x4(1) <--- x1(1) (b<0) (100.0%) + x3(1) <--- x4(0) (b<0) (100.0%) + x3(1) <--- x2(0) (b<0) (100.0%) x3(1) <--- x0(0) (b>0) (100.0%) + x2(1) <--- x2(0) (b>0) (100.0%) x1(1) <--- x3(0) (b>0) (100.0%) x1(1) <--- x2(0) (b<0) (100.0%) - x3(1) <--- x2(0) (b<0) (100.0%) - x3(1) <--- x4(0) (b<0) (100.0%) x1(1) <--- x3(1) (b>0) (100.0%) + x4(1) <--- x4(0) (b>0) (100.0%) x0(1) <--- x4(1) (b<0) (100.0%) - x4(1) <--- x1(0) (b<0) (100.0%) - x4(1) <--- x1(1) (b<0) (100.0%) - x2(1) <--- x2(0) (b>0) (100.0%) - .. code-block:: python @@ -386,6 +383,7 @@ Since :class:`~lingam.LongitudinalBootstrapResult` object is returned, we can ge x0(2) <--- x0(1) (b>0) (100.0%) x4(2) <--- x1(1) (b>0) (100.0%) + x4(2) <--- x0(1) (b<0) (100.0%) x3(2) <--- x2(1) (b>0) (100.0%) x3(2) <--- x1(1) (b<0) (100.0%) x3(2) <--- x0(1) (b>0) (100.0%) @@ -395,8 +393,7 @@ Since :class:`~lingam.LongitudinalBootstrapResult` object is returned, we can ge x4(2) <--- x3(1) (b>0) (100.0%) x1(2) <--- x3(1) (b>0) (100.0%) x1(2) <--- x2(1) (b>0) (100.0%) - x1(2) <--- x0(1) (b<0) (100.0%) - + Directed Acyclic Graphs ----------------------- @@ -417,11 +414,13 @@ Also, using the :func:`~lingam.LongitudinalBootstrapResult.get_directed_acyclic_ .. parsed-literal:: DAG[0]: 2.0% + x0(1) <--- x1(1) (b>0) + x0(1) <--- x3(1) (b>0) x0(1) <--- x4(1) (b<0) - x0(1) <--- x0(0) (b>0) + x0(1) <--- x0(0) (b<0) x0(1) <--- x1(0) (b>0) x0(1) <--- x2(0) (b<0) - x0(1) <--- x3(0) (b>0) + x0(1) <--- x3(0) (b<0) x0(1) <--- x4(0) (b<0) x1(1) <--- x3(1) (b>0) x1(1) <--- x0(0) (b>0) @@ -438,6 +437,7 @@ Also, using the :func:`~lingam.LongitudinalBootstrapResult.get_directed_acyclic_ x3(1) <--- x0(0) (b>0) x3(1) <--- x1(0) (b<0) x3(1) <--- x2(0) (b<0) + x3(1) <--- x3(0) (b<0) x3(1) <--- x4(0) (b<0) x4(1) <--- x1(1) (b<0) x4(1) <--- x0(0) (b<0) @@ -445,13 +445,13 @@ Also, using the :func:`~lingam.LongitudinalBootstrapResult.get_directed_acyclic_ x4(1) <--- x2(0) (b<0) x4(1) <--- x3(0) (b<0) x4(1) <--- x4(0) (b>0) - DAG[1]: 1.0% - x0(1) <--- x2(1) (b<0) + DAG[1]: 2.0% + x0(1) <--- x1(1) (b>0) x0(1) <--- x4(1) (b<0) - x0(1) <--- x0(0) (b>0) - x0(1) <--- x1(0) (b<0) + x0(1) <--- x0(0) (b<0) + x0(1) <--- x1(0) (b>0) x0(1) <--- x2(0) (b<0) - x0(1) <--- x3(0) (b>0) + x0(1) <--- x3(0) (b<0) x0(1) <--- x4(0) (b<0) x1(1) <--- x3(1) (b>0) x1(1) <--- x0(0) (b>0) @@ -461,25 +461,24 @@ Also, using the :func:`~lingam.LongitudinalBootstrapResult.get_directed_acyclic_ x1(1) <--- x4(0) (b>0) x2(1) <--- x1(1) (b>0) x2(1) <--- x0(0) (b<0) + x2(1) <--- x1(0) (b>0) x2(1) <--- x2(0) (b>0) x2(1) <--- x3(0) (b>0) x2(1) <--- x4(0) (b>0) x3(1) <--- x0(0) (b>0) - x3(1) <--- x1(0) (b>0) + x3(1) <--- x1(0) (b<0) x3(1) <--- x2(0) (b<0) x3(1) <--- x3(0) (b<0) x3(1) <--- x4(0) (b<0) x4(1) <--- x1(1) (b<0) - x4(1) <--- x2(1) (b<0) - x4(1) <--- x3(1) (b>0) x4(1) <--- x0(0) (b<0) x4(1) <--- x1(0) (b<0) - x4(1) <--- x2(0) (b>0) - x4(1) <--- x3(0) (b>0) + x4(1) <--- x2(0) (b<0) + x4(1) <--- x3(0) (b<0) x4(1) <--- x4(0) (b>0) - DAG[2]: 1.0% - x0(1) <--- x1(1) (b>0) + DAG[2]: 2.0% x0(1) <--- x4(1) (b<0) + x0(1) <--- x0(0) (b<0) x0(1) <--- x1(0) (b>0) x0(1) <--- x2(0) (b<0) x0(1) <--- x3(0) (b>0) @@ -491,25 +490,25 @@ Also, using the :func:`~lingam.LongitudinalBootstrapResult.get_directed_acyclic_ x1(1) <--- x3(0) (b>0) x1(1) <--- x4(0) (b>0) x2(1) <--- x1(1) (b>0) + x2(1) <--- x3(1) (b<0) + x2(1) <--- x4(1) (b<0) x2(1) <--- x0(0) (b<0) x2(1) <--- x1(0) (b>0) x2(1) <--- x2(0) (b>0) x2(1) <--- x3(0) (b>0) x2(1) <--- x4(0) (b>0) x3(1) <--- x0(0) (b>0) - x3(1) <--- x1(0) (b<0) + x3(1) <--- x1(0) (b>0) x3(1) <--- x2(0) (b<0) x3(1) <--- x3(0) (b<0) x3(1) <--- x4(0) (b<0) x4(1) <--- x1(1) (b<0) - x4(1) <--- x2(1) (b<0) x4(1) <--- x3(1) (b>0) x4(1) <--- x0(0) (b<0) x4(1) <--- x1(0) (b<0) x4(1) <--- x2(0) (b<0) x4(1) <--- x3(0) (b<0) x4(1) <--- x4(0) (b>0) - .. code-block:: python @@ -520,7 +519,7 @@ Also, using the :func:`~lingam.LongitudinalBootstrapResult.get_directed_acyclic_ .. parsed-literal:: - DAG[0]: 3.0% + DAG[0]: 5.0% x0(2) <--- x0(1) (b>0) x0(2) <--- x1(1) (b>0) x0(2) <--- x2(1) (b>0) @@ -556,25 +555,24 @@ Also, using the :func:`~lingam.LongitudinalBootstrapResult.get_directed_acyclic_ x0(2) <--- x1(1) (b>0) x0(2) <--- x2(1) (b>0) x0(2) <--- x3(1) (b<0) - x0(2) <--- x4(1) (b>0) + x0(2) <--- x4(1) (b<0) x1(2) <--- x2(2) (b<0) x1(2) <--- x4(2) (b>0) x1(2) <--- x0(1) (b<0) x1(2) <--- x1(1) (b<0) x1(2) <--- x2(1) (b>0) x1(2) <--- x3(1) (b>0) - x1(2) <--- x4(1) (b<0) + x1(2) <--- x4(1) (b>0) x2(2) <--- x0(2) (b>0) x2(2) <--- x0(1) (b>0) x2(2) <--- x1(1) (b>0) - x2(2) <--- x2(1) (b<0) x2(2) <--- x3(1) (b>0) - x2(2) <--- x4(1) (b>0) + x2(2) <--- x4(1) (b<0) x3(2) <--- x2(2) (b<0) x3(2) <--- x0(1) (b>0) x3(2) <--- x1(1) (b<0) x3(2) <--- x2(1) (b>0) - x3(2) <--- x3(1) (b<0) + x3(2) <--- x3(1) (b>0) x3(2) <--- x4(1) (b<0) x4(2) <--- x0(2) (b>0) x4(2) <--- x0(1) (b<0) @@ -604,7 +602,7 @@ Also, using the :func:`~lingam.LongitudinalBootstrapResult.get_directed_acyclic_ x3(2) <--- x0(1) (b>0) x3(2) <--- x1(1) (b<0) x3(2) <--- x2(1) (b>0) - x3(2) <--- x3(1) (b<0) + x3(2) <--- x3(1) (b>0) x3(2) <--- x4(1) (b<0) x4(2) <--- x0(2) (b>0) x4(2) <--- x0(1) (b<0) @@ -612,7 +610,7 @@ Also, using the :func:`~lingam.LongitudinalBootstrapResult.get_directed_acyclic_ x4(2) <--- x2(1) (b<0) x4(2) <--- x3(1) (b>0) x4(2) <--- x4(1) (b<0) - + Probability ----------- @@ -627,18 +625,17 @@ Using the :func:`~lingam.LongitudinalBootstrapResult.get_probabilities` method, .. parsed-literal:: - [[[0. 0.51 0.09 0.15 1. ] + [[[0. 0.37 0.1 0.12 1. ] [0. 0. 0. 1. 0. ] - [0.02 0.99 0. 0.52 0.3 ] + [0. 0.98 0. 0.5 0.24] [0. 0. 0. 0. 0. ] - [0. 1. 0.23 0.3 0. ]] + [0. 1. 0.11 0.28 0. ]] - [[0.92 0.97 1. 0.94 0.99] + [[0.91 0.93 1. 0.94 0.97] [0.99 0.99 1. 1. 0.94] - [1. 0.97 1. 0.99 0.87] + [1. 1. 1. 0.99 0.84] [1. 0.98 1. 0.92 1. ] - [1. 1. 1. 1. 1. ]]] - + [0.98 1. 1. 1. 1. ]]] .. code-block:: python @@ -658,30 +655,30 @@ Using the :func:`~lingam.LongitudinalBootstrapResult.get_probabilities` method, .. parsed-literal:: B(1,1): - [[0. 0.51 0.09 0.15 1. ] + [[0. 0.37 0.1 0.12 1. ] [0. 0. 0. 1. 0. ] - [0.02 0.99 0. 0.52 0.3 ] + [0. 0.98 0. 0.5 0.24] [0. 0. 0. 0. 0. ] - [0. 1. 0.23 0.3 0. ]] + [0. 1. 0.11 0.28 0. ]] B(1,0): - [[0.92 0.97 1. 0.94 0.99] + [[0.91 0.93 1. 0.94 0.97] [0.99 0.99 1. 1. 0.94] - [1. 0.97 1. 0.99 0.87] + [1. 1. 1. 0.99 0.84] [1. 0.98 1. 0.92 1. ] - [1. 1. 1. 1. 1. ]] + [0.98 1. 1. 1. 1. ]] B(2,2): [[0. 0. 0. 0. 0. ] - [0.1 0. 1. 0.06 1. ] - [0.78 0. 0. 0. 0.13] - [0.13 0. 1. 0. 0.16] - [0.88 0. 0. 0. 0. ]] + [0.06 0. 1. 0.04 1. ] + [0.8 0. 0. 0. 0.07] + [0.03 0.02 1. 0. 0.1 ] + [0.91 0. 0. 0.01 0. ]] B(2,1): [[1. 1. 0.91 1. 0.92] - [1. 0.86 1. 1. 0.95] - [0.95 1. 0.96 1. 0.8 ] - [1. 1. 1. 0.92 1. ] - [0.99 1. 0.96 1. 1. ]] - + [1. 0.86 1. 1. 0.96] + [0.95 1. 0.95 1. 0.82] + [1. 1. 1. 0.92 0.99] + [1. 1. 0.97 1. 1. ]] + Total Causal Effects -------------------- @@ -760,274 +757,344 @@ below. 0 x1(1) x0(1) - 0.269441 + 0.257084 1.00 1 - x0(2) + x4(1) x4(2) - 0.119620 + -0.278507 1.00 2 - x4(1) + x3(1) x4(2) - -0.109855 + 0.185780 1.00 3 - x3(1) + x1(1) x4(2) - 0.260481 + 0.351397 1.00 4 - x1(1) - x4(2) - 0.297682 + x2(2) + x3(2) + -0.428210 1.00 5 - x2(2) + x3(1) x3(2) - -0.394208 + -0.161284 1.00 6 - x4(1) + x2(1) x3(2) - -0.152984 + 0.495256 1.00 7 - x3(1) + x1(1) x3(2) - -0.284373 + -0.579338 1.00 8 - x2(1) + x0(1) x3(2) - 0.425542 + 0.186140 1.00 9 - x1(1) - x3(2) - -0.263069 + x3(1) + x2(2) + 0.400577 1.00 10 - x0(2) + x1(1) x2(2) - 0.177046 + 0.326661 1.00 11 - x4(1) + x0(1) x2(2) - -0.110188 + 0.161875 1.00 12 - x3(1) x2(2) - 0.524608 + x1(2) + -0.692908 1.00 13 - x1(1) - x2(2) - 0.329232 + x0(1) + x1(2) + -0.563879 1.00 14 x4(2) x1(2) - 0.113916 + 0.476373 1.00 15 - x2(2) - x1(2) - -0.429614 + x3(1) + x0(2) + -0.495518 1.00 16 + x4(1) x0(1) - x2(2) - 0.202225 + -0.586968 1.00 17 + x3(1) x1(1) - x0(2) - 0.154852 + 0.388875 1.00 18 - x1(1) - x1(2) - -0.145485 + x0(1) + x0(2) + 0.202197 1.00 19 - x3(1) - x0(1) - 0.116298 + x1(1) + x0(2) + 0.191862 1.00 20 - x0(1) - x1(2) - -0.462228 + x1(1) + x4(1) + -0.356674 1.00 21 - x4(1) - x0(1) - -0.562721 + x1(1) + x2(1) + 0.357268 1.00 22 - x3(1) - x0(2) - -0.238794 - 1.00 + x1(1) + x1(2) + -0.100172 + 0.99 23 - x3(1) - x1(1) - 0.317693 - 1.00 + x2(1) + x1(2) + 0.169769 + 0.99 24 + x3(1) x4(1) - x1(2) - 0.222208 - 1.00 + -0.108293 + 0.98 25 - x1(1) - x2(1) - 0.187445 - 1.00 + x4(1) + x3(2) + -0.158863 + 0.98 26 - x1(1) - x4(1) - -0.280015 - 1.00 + x2(1) + x2(2) + -0.064596 + 0.97 27 + x0(1) x4(2) - x3(2) - -0.059277 - 0.92 + -0.146124 + 0.97 28 - x4(1) - x0(2) - -0.139972 - 0.91 + x3(1) + x0(1) + 0.080405 + 0.97 29 - x4(2) - x2(2) - 0.033740 - 0.69 + x3(1) + x2(1) + 0.032170 + 0.94 30 - x4(1) x2(1) - -0.050954 - 0.54 + x4(2) + -0.099157 + 0.94 31 - x2(1) - x4(1) - -0.102010 - 0.46 + x3(1) + x1(2) + 0.079244 + 0.93 32 - x2(1) + x4(1) x0(2) - 0.034217 - 0.35 + -0.005440 + 0.92 33 + x0(2) + x4(2) + 0.261939 + 0.91 + + + 34 x2(1) + x0(2) + 0.019144 + 0.91 + + + 35 + x0(2) x1(2) - 0.161172 - 0.34 + -0.029275 + 0.90 - 34 + 36 + x4(1) + x1(2) + -0.014277 + 0.90 + + + 37 + x4(1) x2(2) - x4(2) - 0.029630 - 0.31 + -0.019646 + 0.85 - 35 - x0(1) + 38 + x0(2) x3(2) - 0.106614 - 0.19 + -0.106739 + 0.84 - 36 - x0(1) + 39 x0(2) - 0.136141 - 0.15 + x2(2) + 0.250640 + 0.80 - 37 + 40 + x4(1) + x2(1) + -0.169832 + 0.24 + + + 41 + x2(1) + x0(1) + 0.015604 + 0.20 + + + 42 + x4(2) + x3(2) + -0.147539 + 0.18 + + + 43 x2(1) + x4(1) + -0.171814 + 0.11 + + + 44 + x4(2) x2(2) - -0.089162 - 0.12 + 0.155502 + 0.07 - 38 + 45 + x3(2) + x1(2) + -0.155433 + 0.05 + + + 46 + x1(2) + x3(2) + -0.174134 + 0.02 + + + 47 + x2(2) + x4(2) + 0.045734 + 0.01 + + + 48 x3(2) x4(2) - -0.081235 - 0.08 + -0.146344 + 0.01 @@ -1096,38 +1163,38 @@ We can easily perform sorting operations with pandas.DataFrame. - 12 - x3(1) - x2(2) - 0.524608 + 6 + x2(1) + x3(2) + 0.495256 1.0 - 8 - x2(1) - x3(2) - 0.425542 + 14 + x4(2) + x1(2) + 0.476373 1.0 - 13 - x1(1) + 9 + x3(1) x2(2) - 0.329232 + 0.400577 1.0 - 23 + 17 x3(1) x1(1) - 0.317693 + 0.388875 1.0 - 4 + 21 x1(1) - x4(2) - 0.297682 + x2(1) + 0.357268 1.0 @@ -1198,39 +1265,39 @@ following code extracts the causal direction towards x0(2). - 17 - x1(1) + 15 + x3(1) x0(2) - 0.154852 + -0.495518 1.00 - 22 - x3(1) + 18 + x0(1) x0(2) - -0.238794 + 0.202197 1.00 - 28 - x4(1) + 19 + x1(1) x0(2) - -0.139972 - 0.91 + 0.191862 + 1.00 32 - x2(1) + x4(1) x0(2) - 0.034217 - 0.35 + -0.005440 + 0.92 - 36 - x0(1) + 34 + x2(1) x0(2) - 0.136141 - 0.15 + 0.019144 + 0.91 diff --git a/docs/tutorial/multiple_dataset.rst b/docs/tutorial/multiple_dataset.rst index a11c968..816ff55 100644 --- a/docs/tutorial/multiple_dataset.rst +++ b/docs/tutorial/multiple_dataset.rst @@ -58,8 +58,8 @@ In this example, we need to import ``numpy``, ``pandas``, and .. parsed-literal:: - ['1.16.2', '0.24.2', '0.11.1', '1.5.4'] - + ['1.24.4', '2.0.3', '0.20.1', '1.8.3'] + Test data --------- @@ -358,7 +358,7 @@ To run causal discovery for multiple datasets, we create a :class:`~lingam.Multi .. parsed-literal:: - + @@ -387,13 +387,12 @@ Also, using the :attr:`~lingam.MultiGroupDirectLiNGAM.adjacency_matrix_` propert .. parsed-literal:: - [[0. 0. 0. 3.006 0. 0. ] - [2.873 0. 1.969 0. 0. 0. ] - [0. 0. 0. 5.882 0. 0. ] - [0. 0. 0. 0. 0. 0. ] - [6.095 0. 0. 0. 0. 0. ] - [3.967 0. 0. 0. 0. 0. ]] - + [[ 0. 0. 0. 3.006 0. 0. ] + [ 2.962 0. 2.015 0. 0. 0. ] + [ 0. 0. 0. 5.97 0. 0. ] + [ 0. 0. 0. 0. 0. 0. ] + [ 8.01 0. -1.006 0. 0. 0. ] + [ 3.998 0. 0. 0. 0. 0. ]] @@ -410,12 +409,12 @@ Also, using the :attr:`~lingam.MultiGroupDirectLiNGAM.adjacency_matrix_` propert .. parsed-literal:: [[ 0. 0. 0. 3.483 0. 0. ] - [ 3.516 0. 2.466 0.165 0. 0. ] - [ 0. 0. 0. 6.383 0. 0. ] + [ 3.526 0. 2.486 0. 0. 0. ] + [ 0. 0. 0. 6.503 0. 0. ] [ 0. 0. 0. 0. 0. 0. ] - [ 8.456 0. -1.471 0. 0. 0. ] - [ 4.446 0. 0. 0. 0. 0. ]] - + [ 8.478 0. -1.484 0. 0. 0. ] + [ 4.494 0. 0. 0. 0. 0. ]] + @@ -483,13 +482,12 @@ the error variables :math:`e_i` and :math:`e_j`. .. parsed-literal:: - [[0. 0.136 0.075 0.838 0. 0.832] - [0.136 0. 0.008 0. 0.544 0.403] - [0.075 0.008 0. 0.11 0. 0.511] - [0.838 0. 0.11 0. 0.039 0.049] - [0. 0.544 0. 0.039 0. 0.101] - [0.832 0.403 0.511 0.049 0.101 0. ]] - + [[0. 0.939 0.07 0.838 0.467 0.818] + [0.939 0. 0.195 0.755 0.053 0.254] + [0.07 0.195 0. 0.851 0.374 0.507] + [0.838 0.755 0.851 0. 0.422 0.755] + [0.467 0.053 0.374 0.422 0. 0.581] + [0.818 0.254 0.507 0.755 0.581 0. ]] .. code-block:: python @@ -498,13 +496,13 @@ the error variables :math:`e_i` and :math:`e_j`. .. parsed-literal:: - [[0. 0.545 0.908 0.285 0.525 0.728] - [0.545 0. 0.84 0.814 0.086 0.297] - [0.908 0.84 0. 0.032 0.328 0.026] - [0.285 0.814 0.032 0. 0.904 0. ] - [0.525 0.086 0.328 0.904 0. 0.237] - [0.728 0.297 0.026 0. 0.237 0. ]] - + [[0. 0.521 0.973 0.285 0.459 0.606] + [0.521 0. 0.805 0.785 0.078 0.395] + [0.973 0.805 0. 0.807 0.378 0.129] + [0.285 0.785 0.807 0. 0.913 0.99 ] + [0.459 0.078 0.378 0.913 0. 0.269] + [0.606 0.395 0.129 0.99 0.269 0. ]] + Bootstrapping ------------- @@ -533,10 +531,9 @@ The :func:`~lingam.MultiGroupDirectLiNGAM.bootstrap` method returns a list of mu x1 <--- x2 (100.0%) x2 <--- x3 (100.0%) x4 <--- x0 (100.0%) + x4 <--- x2 (100.0%) x5 <--- x0 (100.0%) - x4 <--- x2 (94.0%) - x4 <--- x5 (20.0%) - + x1 <--- x3 (4.0%) .. code-block:: python @@ -549,12 +546,12 @@ The :func:`~lingam.MultiGroupDirectLiNGAM.bootstrap` method returns a list of mu x0 <--- x3 (100.0%) x1 <--- x0 (100.0%) x1 <--- x2 (100.0%) + x5 <--- x0 (100.0%) x2 <--- x3 (100.0%) x4 <--- x0 (100.0%) x4 <--- x2 (100.0%) - x5 <--- x0 (100.0%) - x1 <--- x3 (72.0%) - + x4 <--- x3 (12.0%) + Directed Acyclic Graphs ----------------------- @@ -569,7 +566,7 @@ Also, using the :func:`~lingam.BootstrapResult.get_directed_acyclic_graph_counts .. parsed-literal:: - DAG[0]: 61.0% + DAG[0]: 87.0% x0 <--- x3 x1 <--- x0 x1 <--- x2 @@ -577,23 +574,25 @@ Also, using the :func:`~lingam.BootstrapResult.get_directed_acyclic_graph_counts x4 <--- x0 x4 <--- x2 x5 <--- x0 - DAG[1]: 13.0% + DAG[1]: 4.0% x0 <--- x3 x1 <--- x0 x1 <--- x2 x2 <--- x3 x4 <--- x0 x4 <--- x2 - x4 <--- x5 x5 <--- x0 - DAG[2]: 6.0% + x5 <--- x2 + x5 <--- x3 + DAG[2]: 4.0% x0 <--- x3 x1 <--- x0 x1 <--- x2 + x1 <--- x3 x2 <--- x3 x4 <--- x0 + x4 <--- x2 x5 <--- x0 - .. code-block:: python @@ -603,16 +602,15 @@ Also, using the :func:`~lingam.BootstrapResult.get_directed_acyclic_graph_counts .. parsed-literal:: - DAG[0]: 59.0% + DAG[0]: 60.0% x0 <--- x3 x1 <--- x0 x1 <--- x2 - x1 <--- x3 x2 <--- x3 x4 <--- x0 x4 <--- x2 x5 <--- x0 - DAG[1]: 17.0% + DAG[1]: 8.0% x0 <--- x3 x1 <--- x0 x1 <--- x2 @@ -620,17 +618,17 @@ Also, using the :func:`~lingam.BootstrapResult.get_directed_acyclic_graph_counts x4 <--- x0 x4 <--- x2 x5 <--- x0 - DAG[2]: 10.0% - x0 <--- x2 + x5 <--- x2 + DAG[2]: 7.0% x0 <--- x3 x1 <--- x0 x1 <--- x2 - x1 <--- x3 x2 <--- x3 x4 <--- x0 x4 <--- x2 + x4 <--- x3 x5 <--- x0 - + Probability ----------- @@ -645,13 +643,13 @@ Using the :func:`~lingam.BootstrapResult.get_probabilities` method, we can get t .. parsed-literal:: - [[0. 0. 0.08 1. 0. 0. ] - [1. 0. 1. 0.08 0. 0.05] - [0. 0. 0. 1. 0. 0. ] + [[0. 0. 0. 1. 0. 0. ] + [1. 0. 1. 0.04 0. 0.02] + [0.01 0. 0. 1. 0. 0. ] [0. 0. 0. 0. 0. 0. ] - [1. 0. 0.94 0. 0. 0.2 ] - [1. 0. 0. 0. 0.01 0. ]] - + [1. 0. 1. 0.02 0. 0. ] + [1. 0. 0.04 0.04 0. 0. ]] + Total Causal Effects -------------------- @@ -736,21 +734,21 @@ below. 1 x0 x1 - 2.990264 + 2.963048 1.00 2 x2 x1 - 2.091170 + 2.016516 1.00 3 x3 x1 - 20.937520 + 20.943993 1.00 @@ -764,77 +762,56 @@ below. 5 x0 x4 - 7.992477 + 8.011896 1.00 6 - x3 + x2 x4 - 18.058717 + -1.007165 1.00 7 - x0 - x5 - 3.970275 + x3 + x4 + 18.061596 1.00 8 - x3 + x0 x5 - 12.028240 + 4.001221 1.00 9 + x3 x5 - x1 - 0.148078 - 0.29 + 12.026086 + 1.00 10 + x2 x5 - x4 - 0.104561 - 0.21 + -0.119097 + 0.04 11 - x2 x5 - 0.152502 - 0.15 + x1 + 0.092263 + 0.02 12 - x5 - x2 - 0.078391 - 0.09 - - - 13 - x2 x0 - 0.035852 - 0.08 - - - 14 - x4 - x1 - -1.623188 - 0.03 - - - 15 - x4 - x5 - 0.027130 + x2 + 0.079547 0.01 @@ -907,28 +884,28 @@ We can easily perform sorting operations with pandas.DataFrame. 3 x3 x1 - 20.937520 + 20.943993 1.0 - 6 + 7 x3 x4 - 18.058717 + 18.061596 1.0 - 8 + 9 x3 x5 - 12.028240 + 12.026086 1.0 5 x0 x4 - 7.992477 + 8.011896 1.0 @@ -1009,36 +986,29 @@ following code extracts the causal direction towards x1. 1 x0 x1 - 2.990264 + 2.963048 1.00 2 x2 x1 - 2.091170 + 2.016516 1.00 3 x3 x1 - 20.937520 + 20.943993 1.00 - 9 + 11 x5 x1 - 0.148078 - 0.29 - - - 14 - x4 - x1 - -1.623188 - 0.03 + 0.092263 + 0.02 @@ -1111,32 +1081,32 @@ variable X0 to variable X1. 0 [3, 0, 1] - 8.561128 + 8.905047 1.00 1 [3, 2, 1] - 11.622379 + 12.049228 1.00 2 [3, 1] - 0.151715 - 0.08 + -0.733971 + 0.04 3 - [3, 2, 0, 1] - 0.618533 - 0.08 + [3, 0, 5, 1] + 1.096850 + 0.02 4 - [3, 0, 5, 1] - 0.967472 - 0.05 + [3, 0, 2, 1] + 0.493177 + 0.01 diff --git a/docs/tutorial/rcd.rst b/docs/tutorial/rcd.rst index ddc3631..119556a 100644 --- a/docs/tutorial/rcd.rst +++ b/docs/tutorial/rcd.rst @@ -47,8 +47,8 @@ In this example, we need to import ``numpy``, ``pandas``, and .. parsed-literal:: - ['1.16.2', '0.24.2', '0.11.1', '1.5.4'] - + ['1.24.4', '2.0.3', '0.20.1', '1.8.3'] + Test data --------- @@ -227,7 +227,7 @@ method. .. parsed-literal:: - + @@ -250,7 +250,7 @@ ancestors sets as a result of the causal discovery. M3={5} M4={0, 1, 3, 5} M5=set() - + Also, using the ``adjacency_matrix_`` properties, we can see the adjacency matrix as a result of the causal discovery. The coefficients @@ -305,7 +305,7 @@ the error variables :math:`e_i` and :math:`e_j`. [0.413 0.732 nan 0. nan 0.054] [ nan nan nan nan 0. nan] [0.68 0.382 nan 0.054 nan 0. ]] - + Bootstrapping ------------- @@ -344,15 +344,15 @@ We can check the result by utility function. .. parsed-literal:: - x0 <--- x1 (b>0) (100.0%) - x4 <--- x0 (b>0) (99.0%) - x1 <--- x5 (b>0) (97.0%) - x2 <--- x0 (b>0) (96.0%) - x0 <--- x3 (b>0) (92.0%) - x3 <--- x5 (b>0) (67.0%) - x2 <--- x4 (b>0) (13.0%) - x4 <--- x3 (b<0) (11.0%) - + x4 <--- x0 (b>0) (58.0%) + x0 <--- x5 (b>0) (51.0%) + x2 <--- x0 (b>0) (30.0%) + x3 <--- x5 (b>0) (30.0%) + x0 <--- x1 (b>0) (22.0%) + x0 <--- x3 (b>0) (18.0%) + x1 <--- x5 (b>0) (18.0%) + x2 <--- x5 (b>0) (15.0%) + Directed Acyclic Graphs ----------------------- @@ -376,28 +376,12 @@ We can check the result by utility function. .. parsed-literal:: - DAG[0]: 47.0% - x0 <--- x1 (b>0) - x0 <--- x3 (b>0) - x1 <--- x5 (b>0) - x2 <--- x0 (b>0) - x3 <--- x5 (b>0) - x4 <--- x0 (b>0) - DAG[1]: 20.0% - x0 <--- x1 (b>0) - x0 <--- x3 (b>0) - x1 <--- x5 (b>0) - x2 <--- x0 (b>0) + DAG[0]: 6.0% + DAG[1]: 4.0% x4 <--- x0 (b>0) - DAG[2]: 10.0% - x0 <--- x1 (b>0) - x0 <--- x3 (b>0) - x1 <--- x5 (b>0) + DAG[2]: 4.0% x2 <--- x0 (b>0) - x3 <--- x5 (b>0) - x4 <--- x0 (b>0) - x4 <--- x3 (b<0) - + Probability ----------- @@ -413,13 +397,13 @@ bootstrapping. .. parsed-literal:: - [[0. 1. 0. 0.92 0. 0.08] - [0. 0. 0. 0. 0. 0.97] - [0.96 0. 0. 0. 0.13 0. ] - [0. 0. 0. 0. 0. 0.67] - [0.99 0.01 0.02 0.12 0. 0. ] + [[0. 0.22 0. 0.18 0. 0.51] + [0. 0. 0. 0. 0. 0.18] + [0.3 0.13 0. 0.12 0.05 0.15] + [0. 0. 0. 0. 0. 0.3 ] + [0.58 0.11 0.02 0.11 0. 0.05] [0. 0. 0. 0. 0. 0. ]] - + Total Causal Effects -------------------- @@ -496,108 +480,87 @@ below. 0 - x1 + x3 x0 - 0.929241 - 0.97 + 1.055784 + 0.04 1 - x1 + x3 x2 - 0.642897 - 0.97 + 0.818606 + 0.04 2 - x1 x4 - 0.940142 - 0.96 + x2 + 0.484138 + 0.04 3 - x0 - x2 - 0.733251 - 0.91 + x3 + x4 + 1.016508 + 0.04 4 + x1 x0 - x4 - 0.976640 - 0.91 + 0.929668 + 0.03 5 - x3 x0 - 0.986875 - 0.66 + x2 + 0.781983 + 0.03 6 - x3 - x2 - 0.732515 - 0.66 + x0 + x4 + 1.003733 + 0.03 7 - x3 + x1 x4 - 0.899673 - 0.65 + 1.041410 + 0.03 8 - x5 - x0 - 1.021466 - 0.63 + x1 + x2 + 0.730836 + 0.02 9 x5 - x1 - 0.555707 - 0.63 + x0 + 0.961161 + 0.01 10 x5 - x2 - 0.741192 - 0.63 + x1 + 0.542628 + 0.01 11 x5 x3 - 0.563175 - 0.63 - - - 12 - x5 - x4 - 0.941773 - 0.61 - - - 13 - x4 - x2 - 0.225102 - 0.13 - - - 14 - x2 - x4 - 0.243174 - 0.03 + 0.559532 + 0.01 @@ -665,39 +628,39 @@ We can easily perform sorting operations with pandas.DataFrame. - 8 - x5 - x0 - 1.021466 - 0.63 - - - 5 + 0 x3 x0 - 0.986875 - 0.66 + 1.055784 + 0.04 - 4 - x0 + 7 + x1 x4 - 0.976640 - 0.91 + 1.041410 + 0.03 - 12 - x5 + 3 + x3 x4 - 0.941773 - 0.61 + 1.016508 + 0.04 - 2 - x1 + 6 + x0 x4 - 0.940142 - 0.96 + 1.003733 + 0.03 + + + 9 + x5 + x0 + 0.961161 + 0.01 @@ -763,39 +726,39 @@ We can easily perform sorting operations with pandas.DataFrame. - 14 - x2 - x4 - 0.243174 - 0.03 + 9 + x5 + x0 + 0.961161 + 0.01 - 13 - x4 - x2 - 0.225102 - 0.13 + 10 + x5 + x1 + 0.542628 + 0.01 - 12 + 11 x5 - x4 - 0.941773 - 0.61 + x3 + 0.559532 + 0.01 8 - x5 - x0 - 1.021466 - 0.63 + x1 + x2 + 0.730836 + 0.02 - 9 - x5 + 4 x1 - 0.555707 - 0.63 + x0 + 0.929668 + 0.03 @@ -892,39 +855,39 @@ variable X0 to variable X1. 0 - [5, 1, 0, 4] - 0.534675 - 0.96 + [5, 0, 4] + 0.970828 + 0.34 1 [5, 3, 0, 4] - 0.580992 - 0.65 + 0.522827 + 0.07 2 [5, 3, 4] - -0.197046 - 0.12 + 0.461104 + 0.06 3 - [5, 0, 4] - 0.505671 - 0.08 + [5, 4] + 0.821702 + 0.05 4 - [5, 1, 0, 2, 4] - 0.071415 - 0.01 + [5, 1, 0, 4] + 0.605828 + 0.02 5 [5, 1, 4] - 0.530308 - 0.01 + 0.574573 + 0.02 diff --git a/docs/tutorial/var.rst b/docs/tutorial/var.rst index 4f88ec2..c15ebc8 100644 --- a/docs/tutorial/var.rst +++ b/docs/tutorial/var.rst @@ -63,8 +63,8 @@ In this example, we need to import ``numpy``, ``pandas``, and .. parsed-literal:: - ['1.16.2', '0.24.2', '0.11.1', '1.5.2'] - + ['1.24.4', '2.0.3', '0.20.1', '1.8.3'] + Test data --------- @@ -107,7 +107,7 @@ To run causal discovery, we create a :class:`~lingam.VARLiNGAM` object and call .. parsed-literal:: - + @@ -138,11 +138,11 @@ Also, using the :attr:`~lingam.VARLiNGAM.adjacency_matrices_` properties, we can .. parsed-literal:: - array([[ 0. , -0.144, 0. , 0. , 0. ], + array([[ 0. , -0.136, 0. , 0. , 0. ], [ 0. , 0. , 0. , 0. , 0. ], - [-0.372, 0. , 0. , 0. , 0. ], - [ 0.069, -0.21 , 0. , 0. , 0. ], - [ 0.083, 0. , -0.033, 0. , 0. ]]) + [-0.484, 0. , 0. , 0. , 0. ], + [ 0.075, -0.21 , 0. , 0. , 0. ], + [ 0.168, 0. , 0. , 0. , 0. ]]) @@ -156,11 +156,11 @@ Also, using the :attr:`~lingam.VARLiNGAM.adjacency_matrices_` properties, we can .. parsed-literal:: - array([[-0.366, -0.011, 0.074, 0.297, 0.025], - [-0.083, -0.349, -0.168, -0.327, 0.43 ], - [ 0.077, -0.043, 0.427, 0.046, 0.49 ], - [-0.389, -0.097, -0.263, 0.014, -0.159], - [-0.018, 0.01 , 0.001, 0.071, 0.003]]) + array([[-0.358, 0. , 0.073, 0.302, 0. ], + [ 0. , -0.338, -0.154, -0.335, 0.423], + [ 0. , 0. , 0.424, 0.112, 0.493], + [-0.386, -0.1 , -0.266, 0. , -0.159], + [ 0. , 0. , 0. , 0. , 0. ]]) @@ -199,9 +199,9 @@ calculate B0 matrix. array([[ 0. , -0.144, 0. , 0. , 0. ], [ 0. , 0. , 0. , 0. , 0. ], - [-0.372, 0. , 0. , 0. , 0. ], - [ 0.069, -0.21 , 0. , 0. , 0. ], - [ 0.083, 0. , -0.033, 0. , 0. ]]) + [-0.456, 0. , 0. , 0. , 0. ], + [ 0. , -0.22 , 0. , 0. , 0. ], + [ 0.157, 0. , 0. , 0. , 0. ]]) @@ -235,12 +235,12 @@ the error variables :math:`e_i` and :math:`e_j`. .. parsed-literal:: - [[0. 0.065 0.068 0.038 0.249] - [0.065 0. 0.13 0.88 0.57 ] - [0.068 0.13 0. 0.321 0.231] - [0.038 0.88 0.321 0. 0.839] - [0.249 0.57 0.231 0.839 0. ]] - + [[0. 0.127 0.104 0.042 0.746] + [0.127 0. 0.086 0.874 0.739] + [0.104 0.086 0. 0.404 0.136] + [0.042 0.874 0.404 0. 0.763] + [0.746 0.739 0.136 0.763 0. ]] + Bootstrap --------- @@ -273,15 +273,15 @@ We can check the result by utility function. .. parsed-literal:: - x0(t) <--- x0(t-1) (b<0) (100.0%) - x1(t) <--- x1(t-1) (b<0) (100.0%) - x1(t) <--- x3(t-1) (b<0) (100.0%) - x1(t) <--- x4(t-1) (b>0) (100.0%) - x2(t) <--- x2(t-1) (b>0) (100.0%) x2(t) <--- x4(t-1) (b>0) (100.0%) - x3(t) <--- x0(t-1) (b<0) (100.0%) - x2(t) <--- x0(t) (b<0) (99.0%) - + x2(t) <--- x2(t-1) (b>0) (100.0%) + x0(t) <--- x0(t-1) (b<0) (95.0%) + x1(t) <--- x1(t-1) (b<0) (86.0%) + x1(t) <--- x4(t-1) (b>0) (85.0%) + x3(t) <--- x0(t-1) (b<0) (78.0%) + x2(t) <--- x4(t) (b<0) (60.0%) + x0(t) <--- x3(t-1) (b>0) (48.0%) + Directed Acyclic Graphs ----------------------- @@ -301,43 +301,51 @@ We can check the result by utility function. .. parsed-literal:: - DAG[0]: 57.0% + DAG[0]: 5.0% x0(t) <--- x0(t-1) (b<0) x0(t) <--- x3(t-1) (b>0) + x1(t) <--- x0(t) (b<0) + x1(t) <--- x0(t-1) (b<0) x1(t) <--- x1(t-1) (b<0) - x1(t) <--- x3(t-1) (b<0) x1(t) <--- x4(t-1) (b>0) x2(t) <--- x0(t) (b<0) + x2(t) <--- x4(t) (b<0) x2(t) <--- x2(t-1) (b>0) x2(t) <--- x4(t-1) (b>0) - x3(t) <--- x1(t) (b<0) + x3(t) <--- x0(t) (b>0) x3(t) <--- x0(t-1) (b<0) x3(t) <--- x2(t-1) (b<0) - DAG[1]: 42.0% + x3(t) <--- x4(t-1) (b<0) + DAG[1]: 5.0% x0(t) <--- x0(t-1) (b<0) x0(t) <--- x3(t-1) (b>0) + x1(t) <--- x0(t) (b<0) + x1(t) <--- x2(t) (b>0) + x1(t) <--- x0(t-1) (b<0) x1(t) <--- x1(t-1) (b<0) - x1(t) <--- x3(t-1) (b<0) x1(t) <--- x4(t-1) (b>0) x2(t) <--- x0(t) (b<0) + x2(t) <--- x4(t) (b<0) x2(t) <--- x2(t-1) (b>0) x2(t) <--- x4(t-1) (b>0) + x3(t) <--- x0(t) (b>0) x3(t) <--- x0(t-1) (b<0) x3(t) <--- x2(t-1) (b<0) - DAG[2]: 1.0% + DAG[2]: 5.0% x0(t) <--- x0(t-1) (b<0) x0(t) <--- x3(t-1) (b>0) x1(t) <--- x1(t-1) (b<0) x1(t) <--- x3(t-1) (b<0) x1(t) <--- x4(t-1) (b>0) - x2(t) <--- x0(t) (b<0) + x2(t) <--- x1(t) (b>0) + x2(t) <--- x3(t) (b>0) + x2(t) <--- x0(t-1) (b>0) x2(t) <--- x2(t-1) (b>0) x2(t) <--- x4(t-1) (b>0) x3(t) <--- x1(t) (b<0) x3(t) <--- x0(t-1) (b<0) x3(t) <--- x2(t-1) (b<0) - x4(t) <--- x0(t) (b>0) - + Probability ----------- @@ -354,18 +362,18 @@ Using the :func:`~lingam.BootstrapResult.get_probabilities` method, we can get t .. parsed-literal:: Probability of B0: - [[0. 0.98 0. 0.02 0. ] - [0. 0. 0. 0. 0. ] - [1. 0. 0. 0. 0.01] - [0.1 1. 0. 0. 0. ] - [0.51 0. 0.02 0.08 0. ]] + [[0. 0.6 0.04 0.06 0.14] + [0.39 0. 0.25 0.18 0.16] + [0.65 0.68 0. 0.67 0.84] + [0.51 0.6 0.07 0. 0.66] + [0.35 0.28 0.01 0.09 0. ]] Probability of B1: - [[1. 0. 0.02 1. 0. ] - [0. 1. 1. 1. 1. ] - [0.03 0. 1. 0.05 1. ] - [1. 0.16 1. 0. 1. ] - [0. 0. 0. 0.25 0. ]] - + [[1. 0. 0.3 1. 0.02] + [0.56 1. 0.94 0.67 1. ] + [0.8 0.02 1. 0.25 1. ] + [1. 0.24 1. 0.08 1. ] + [0.02 0. 0.03 0.07 0. ]] + Total Causal Effects -------------------- @@ -440,269 +448,318 @@ below. 0 - x1(t) - x0(t) - -0.131094 + x0(t-1) + x2(t) + 0.181032 1.00 1 - x4(t-1) + x2(t-1) x2(t) - 0.463646 + 0.388777 1.00 2 x4(t-1) - x3(t) - -0.224349 + x1(t) + 0.427308 1.00 3 - x0(t-1) - x0(t) - -0.297905 + x1(t-1) + x1(t) + -0.338691 1.00 4 - x1(t) + x0(t-1) x3(t) - -0.217983 + -0.397439 1.00 5 x3(t-1) x0(t) - 0.273013 + 0.345461 1.00 6 - x2(t-1) - x3(t) - -0.177952 + x4(t-1) + x2(t) + 0.501859 1.00 7 - x0(t-1) + x4(t-1) x3(t) - -0.269388 + -0.253700 1.00 8 - x1(t-1) - x1(t) - -0.260914 + x0(t-1) + x0(t) + -0.357296 1.00 9 x2(t-1) - x2(t) - 0.310371 + x3(t) + -0.222886 1.00 10 - x4(t-1) - x1(t) - 0.397907 + x3(t-1) + x3(t) + 0.101008 1.00 11 - x0(t) - x2(t) - -0.404106 - 1.00 + x3(t-1) + x1(t) + -0.315462 + 0.99 12 - x1(t) - x2(t) - 0.090684 - 1.00 + x2(t-1) + x0(t) + 0.090369 + 0.99 13 - x3(t-1) + x2(t-1) x1(t) - -0.206743 - 0.99 + -0.172693 + 0.98 14 - x3(t-1) - x3(t) - 0.091307 - 0.93 + x1(t-1) + x2(t) + -0.063602 + 0.89 15 - x2(t-1) - x1(t) - -0.121280 - 0.86 + x4(t) + x2(t) + -0.449165 + 0.89 16 - x0(t) - x4(t) - 0.106232 - 0.86 + x3(t-1) + x2(t) + -0.079600 + 0.89 17 - x0(t-1) + x0(t) x2(t) - 0.083258 - 0.79 + -0.280635 + 0.83 18 - x3(t-1) - x2(t) - -0.085736 - 0.73 + x1(t-1) + x0(t) + 0.057164 + 0.82 19 + x4(t-1) x0(t) - x3(t) - 0.075516 - 0.68 + -0.050805 + 0.79 20 - x2(t-1) - x0(t) - 0.070990 - 0.58 + x4(t) + x3(t) + -0.151835 + 0.76 21 - x1(t-1) + x1(t) x2(t) - -0.043181 - 0.55 + 0.211957 + 0.75 22 - x4(t-1) - x0(t) - -0.047978 - 0.50 + x1(t-1) + x3(t) + -0.021313 + 0.75 23 - x1(t-1) - x0(t) - 0.026918 - 0.32 + x3(t) + x2(t) + 0.248101 + 0.66 24 - x2(t) - x4(t) - -0.049998 - 0.29 + x0(t) + x3(t) + 0.259859 + 0.64 25 - x3(t) - x0(t) - 0.053440 - 0.23 + x3(t-1) + x4(t) + 0.061849 + 0.62 26 - x4(t) - x2(t) - -0.053585 - 0.22 + x1(t) + x3(t) + -0.218490 + 0.62 27 - x3(t) - x2(t) - -0.034164 - 0.22 + x1(t) + x0(t) + -0.199704 + 0.61 28 - x3(t-1) + x1(t) x4(t) - 0.069278 - 0.20 + -0.104466 + 0.56 29 + x0(t-1) x1(t) - x4(t) - -0.032277 - 0.17 + -0.119971 + 0.53 30 + x2(t-1) x4(t) - x3(t) - -0.041963 - 0.16 + 0.017608 + 0.50 31 - x1(t-1) - x3(t) - 0.018327 - 0.14 + x4(t-1) + x4(t) + -0.041991 + 0.47 32 - x2(t) - x3(t) - -0.017783 - 0.13 + x1(t-1) + x4(t) + 0.029382 + 0.42 33 x0(t-1) - x1(t) - 0.084306 - 0.04 + x4(t) + -0.055934 + 0.42 34 - x3(t) x4(t) - -0.117271 - 0.02 + x1(t) + -0.063677 + 0.42 35 x4(t) x0(t) - 0.081813 - 0.01 + -0.066867 + 0.40 36 - x0(t-1) - x4(t) - -0.085855 - 0.01 + x0(t) + x1(t) + -0.719255 + 0.39 37 - x1(t-1) + x0(t) x4(t) - 0.036685 - 0.01 + 0.174717 + 0.37 + + + 38 + x2(t) + x1(t) + 0.212699 + 0.25 + + + 39 + x3(t) + x1(t) + -0.308596 + 0.20 + + + 40 + x2(t) + x3(t) + -0.084192 + 0.18 + + + 41 + x3(t) + x0(t) + 0.154238 + 0.11 + + + 42 + x3(t) + x4(t) + -0.205918 + 0.10 + + + 43 + x2(t) + x0(t) + -0.217316 + 0.06 + + + 44 + x2(t) + x4(t) + -0.093614 + 0.03 @@ -771,39 +828,39 @@ We can easily perform sorting operations with pandas.DataFrame. - 1 + 6 x4(t-1) x2(t) - 0.463646 + 0.501859 1.00 - 10 + 2 x4(t-1) x1(t) - 0.397907 + 0.427308 1.00 - 9 + 1 x2(t-1) x2(t) - 0.310371 + 0.388777 1.00 5 x3(t-1) x0(t) - 0.273013 + 0.345461 1.00 - 16 + 24 x0(t) - x4(t) - 0.106232 - 0.86 + x3(t) + 0.259859 + 0.64 @@ -872,39 +929,39 @@ And with pandas.DataFrame, we can easily filter by keywords. The following code - 8 - x1(t-1) + 2 + x4(t-1) x1(t) - -0.260914 + 0.427308 1.00 - 10 - x4(t-1) + 3 + x1(t-1) x1(t) - 0.397907 + -0.338691 1.00 - 13 + 11 x3(t-1) x1(t) - -0.206743 + -0.315462 0.99 - 15 + 13 x2(t-1) x1(t) - -0.121280 - 0.86 + -0.172693 + 0.98 - 33 + 29 x0(t-1) x1(t) - 0.084306 - 0.04 + -0.119971 + 0.53 diff --git a/docs/tutorial/varma.rst b/docs/tutorial/varma.rst index 2ff093b..af14f5c 100644 --- a/docs/tutorial/varma.rst +++ b/docs/tutorial/varma.rst @@ -70,8 +70,8 @@ In this example, we need to import ``numpy``, ``pandas``, and .. parsed-literal:: - ['1.16.2', '0.24.2', '0.11.1', '1.5.2'] - + ['1.24.4', '2.0.3', '0.20.1', '1.8.3'] + Test data --------- @@ -152,11 +152,11 @@ Also, using the :attr:`~lingam.VARMALiNGAM.adjacency_matrices_` properties, we c .. parsed-literal:: - array([[ 0. , 0. , -0.238, 0. , 0. ], - [-0.392, 0. , 0.182, 0. , 0. ], + array([[ 0. , 0. , -0.194, 0. , 0. ], + [-0.354, 0. , 0.191, 0. , 0. ], [ 0. , 0. , 0. , 0. , 0. ], - [ 0.523, -0.149, 0. , 0. , 0. ], - [ 0. , 0. , 0. , 0. , 0. ]]) + [ 0.558, -0.228, 0. , 0. , 0. ], + [ 0.115, 0. , 0. , 0. , 0. ]]) @@ -170,11 +170,11 @@ Also, using the :attr:`~lingam.VARMALiNGAM.adjacency_matrices_` properties, we c .. parsed-literal:: - array([[-0.145, -0.288, -0.418, 0.041, 0.592], - [-0.324, 0.027, 0.024, 0.231, 0.379], - [-0.249, 0.191, -0.01 , 0.136, 0.261], - [ 0.182, 0.698, 0.21 , 0.197, -0.815], - [-0.486, 0.063, -0.263, 0.112, 0.26 ]]) + array([[ 0. , -0.394, -0.509, 0. , 0.659], + [-0.3 , 0. , 0. , 0.211, 0.404], + [-0.281, 0.21 , 0. , 0.118, 0.25 ], + [ 0.082, 0.762, 0.178, 0.137, -0.819], + [-0.507, 0. , -0.278, 0. , 0.336]]) @@ -188,11 +188,11 @@ Also, using the :attr:`~lingam.VARMALiNGAM.adjacency_matrices_` properties, we c .. parsed-literal:: - array([[ 0.247, -0.12 , -0.128, -0.124, 0.037], - [ 0.378, 0.319, -0.12 , -0.023, 0.573], - [-0.107, -0.624, 0.012, -0.303, -0.246], - [-0.22 , 0.26 , 0.313, 0.227, -0.057], - [ 0.255, 0.405, 0.41 , 0.256, -0.286]]) + array([[ 0. , 0. , 0. , 0. , 0. ], + [ 0.209, 0.365, 0. , 0. , 0.531], + [ 0. , -0.579, -0.105, -0.298, -0.235], + [ 0. , 0.171, 0.414, 0.302, 0. ], + [ 0.297, 0.435, 0.482, 0.376, -0.438]]) @@ -213,7 +213,7 @@ calculate psi0 matrix. array([[ 0. , 0. , -0.238, 0. , 0. ], [-0.392, 0. , 0.182, 0. , 0. ], [ 0. , 0. , 0. , 0. , 0. ], - [ 0.523, -0.149, 0. , 0. , 0. ], + [ 0.587, -0.209, 0. , 0. , 0. ], [ 0. , 0. , 0. , 0. , 0. ]]) @@ -247,12 +247,12 @@ the error variables :math:`e_i` and :math:`e_j`. .. parsed-literal:: - [[0. 0.517 0.793 0.004 0.001] - [0.517 0. 0.09 0.312 0.071] - [0.793 0.09 0. 0.058 0.075] - [0.004 0.312 0.058 0. 0.011] - [0.001 0.071 0.075 0.011 0. ]] - + [[0. 0.622 0.388 0. 0.539] + [0.622 0. 0.087 0.469 0.069] + [0.388 0.087 0. 0.248 0.229] + [0. 0.469 0.248 0. 0.021] + [0.539 0.069 0.229 0.021 0. ]] + Bootstrap --------- @@ -286,15 +286,15 @@ We can check the result by utility function. .. parsed-literal:: - y0(t) <--- y2(t-1) (b<0) (100.0%) - y0(t) <--- y4(t-1) (b>0) (100.0%) - y1(t) <--- e4(t-1) (b>0) (100.0%) - y2(t) <--- e1(t-1) (b<0) (100.0%) - y3(t) <--- y0(t) (b>0) (100.0%) - y3(t) <--- y1(t-1) (b>0) (100.0%) - y3(t) <--- y4(t-1) (b<0) (100.0%) - y4(t) <--- y0(t-1) (b<0) (100.0%) - + y3(t) <--- y4(t-1) (b<0) (98.0%) + y3(t) <--- y1(t-1) (b>0) (98.0%) + y0(t) <--- y4(t-1) (b>0) (96.0%) + y1(t) <--- e4(t-1) (b>0) (91.0%) + y2(t) <--- e1(t-1) (b<0) (80.0%) + y4(t) <--- e2(t-1) (b>0) (71.0%) + y1(t) <--- e0(t-1) (b>0) (64.0%) + y2(t) <--- e4(t-1) (b<0) (62.0%) + Directed Acyclic Graphs ----------------------- @@ -314,61 +314,121 @@ We can check the result by utility function. .. parsed-literal:: - DAG[0]: 40.0% + DAG[0]: 1.0% + y0(t) <--- y1(t) (b<0) + y0(t) <--- y1(t-1) (b<0) y0(t) <--- y2(t-1) (b<0) y0(t) <--- y4(t-1) (b>0) - y1(t) <--- y0(t) (b<0) - y1(t) <--- y0(t-1) (b<0) - y1(t) <--- y4(t-1) (b>0) + y0(t) <--- e0(t-1) (b>0) + y0(t) <--- e1(t-1) (b<0) + y0(t) <--- e3(t-1) (b>0) + y0(t) <--- e4(t-1) (b>0) + y1(t) <--- y2(t) (b>0) + y1(t) <--- y2(t-1) (b>0) + y1(t) <--- y3(t-1) (b>0) + y1(t) <--- y4(t-1) (b<0) y1(t) <--- e0(t-1) (b>0) - y1(t) <--- e1(t-1) (b>0) + y1(t) <--- e2(t-1) (b>0) + y1(t) <--- e3(t-1) (b>0) y1(t) <--- e4(t-1) (b>0) - y2(t) <--- e1(t-1) (b<0) + y2(t) <--- y4(t-1) (b>0) + y2(t) <--- e0(t-1) (b<0) + y2(t) <--- e2(t-1) (b<0) y2(t) <--- e3(t-1) (b<0) - y3(t) <--- y0(t) (b>0) + y2(t) <--- e4(t-1) (b<0) + y3(t) <--- y1(t) (b<0) + y3(t) <--- y2(t) (b>0) y3(t) <--- y1(t-1) (b>0) + y3(t) <--- y2(t-1) (b>0) + y3(t) <--- y3(t-1) (b>0) y3(t) <--- y4(t-1) (b<0) + y3(t) <--- e0(t-1) (b>0) y3(t) <--- e2(t-1) (b>0) - y4(t) <--- y0(t-1) (b<0) + y3(t) <--- e3(t-1) (b>0) + y3(t) <--- e4(t-1) (b>0) + y4(t) <--- y0(t) (b>0) + y4(t) <--- y1(t) (b>0) + y4(t) <--- y3(t) (b>0) + y4(t) <--- y1(t-1) (b>0) + y4(t) <--- y2(t-1) (b>0) + y4(t) <--- y3(t-1) (b>0) + y4(t) <--- y4(t-1) (b<0) + y4(t) <--- e0(t-1) (b<0) y4(t) <--- e1(t-1) (b>0) y4(t) <--- e2(t-1) (b>0) - DAG[1]: 19.0% + y4(t) <--- e3(t-1) (b<0) + y4(t) <--- e4(t-1) (b<0) + DAG[1]: 1.0% + y0(t) <--- y1(t-1) (b<0) y0(t) <--- y2(t-1) (b<0) y0(t) <--- y4(t-1) (b>0) - y1(t) <--- y0(t) (b<0) + y0(t) <--- e0(t-1) (b>0) + y1(t) <--- y3(t) (b<0) y1(t) <--- y0(t-1) (b<0) - y1(t) <--- y4(t-1) (b>0) + y1(t) <--- y1(t-1) (b>0) y1(t) <--- e0(t-1) (b>0) + y1(t) <--- e1(t-1) (b>0) y1(t) <--- e4(t-1) (b>0) + y2(t) <--- y1(t) (b>0) + y2(t) <--- y3(t) (b>0) + y2(t) <--- y4(t-1) (b>0) + y2(t) <--- e0(t-1) (b<0) y2(t) <--- e1(t-1) (b<0) - y2(t) <--- e3(t-1) (b<0) + y2(t) <--- e3(t-1) (b>0) + y2(t) <--- e4(t-1) (b<0) y3(t) <--- y0(t) (b>0) y3(t) <--- y1(t-1) (b>0) y3(t) <--- y4(t-1) (b<0) + y3(t) <--- e0(t-1) (b<0) + y3(t) <--- e1(t-1) (b>0) y3(t) <--- e2(t-1) (b>0) + y4(t) <--- y0(t) (b>0) y4(t) <--- y0(t-1) (b<0) + y4(t) <--- y1(t-1) (b>0) + y4(t) <--- y4(t-1) (b<0) + y4(t) <--- e0(t-1) (b<0) y4(t) <--- e1(t-1) (b>0) y4(t) <--- e2(t-1) (b>0) - DAG[2]: 7.0% - y0(t) <--- y2(t) (b<0) + DAG[2]: 1.0% + y0(t) <--- y1(t-1) (b<0) y0(t) <--- y2(t-1) (b<0) y0(t) <--- y4(t-1) (b>0) + y0(t) <--- e0(t-1) (b>0) y1(t) <--- y0(t) (b<0) - y1(t) <--- y0(t-1) (b<0) + y1(t) <--- y2(t) (b>0) y1(t) <--- y4(t-1) (b>0) y1(t) <--- e0(t-1) (b>0) y1(t) <--- e1(t-1) (b>0) + y1(t) <--- e2(t-1) (b>0) + y1(t) <--- e3(t-1) (b>0) y1(t) <--- e4(t-1) (b>0) + y2(t) <--- y0(t) (b<0) + y2(t) <--- y0(t-1) (b<0) + y2(t) <--- y4(t-1) (b>0) y2(t) <--- e1(t-1) (b<0) + y2(t) <--- e2(t-1) (b<0) y2(t) <--- e3(t-1) (b<0) - y3(t) <--- y0(t) (b>0) + y2(t) <--- e4(t-1) (b<0) + y3(t) <--- y1(t) (b<0) + y3(t) <--- y2(t) (b>0) y3(t) <--- y1(t-1) (b>0) + y3(t) <--- y2(t-1) (b>0) + y3(t) <--- y3(t-1) (b>0) y3(t) <--- y4(t-1) (b<0) + y3(t) <--- e1(t-1) (b>0) y3(t) <--- e2(t-1) (b>0) - y4(t) <--- y0(t-1) (b<0) - y4(t) <--- e1(t-1) (b>0) + y3(t) <--- e3(t-1) (b>0) + y3(t) <--- e4(t-1) (b>0) + y4(t) <--- y0(t) (b>0) + y4(t) <--- y1(t) (b>0) + y4(t) <--- y3(t) (b>0) + y4(t) <--- y1(t-1) (b>0) + y4(t) <--- y2(t-1) (b>0) + y4(t) <--- y4(t-1) (b<0) + y4(t) <--- e0(t-1) (b<0) y4(t) <--- e2(t-1) (b>0) - + y4(t) <--- e4(t-1) (b<0) + Probability ----------- @@ -386,24 +446,24 @@ Using the :func:`~lingam.BootstrapResult.get_probabilities` method, we can get t .. parsed-literal:: Probability of psi0: - [[0. 0. 1. 0. 0. ] - [1. 0. 0.95 0. 0. ] - [0. 0. 0. 0. 0. ] - [1. 0.96 0.24 0. 0. ] - [0.16 0.03 0.1 0.04 0. ]] + [[0. 0.26 0.46 0.26 0.3 ] + [0.53 0. 0.54 0.37 0.33] + [0.22 0.41 0. 0.38 0.12] + [0.6 0.62 0.35 0. 0.38] + [0.69 0.28 0.27 0.43 0. ]] Probability of psi1: - [[1. 1. 1. 0. 1. ] - [1. 0. 0. 1. 1. ] - [1. 1. 0. 1. 1. ] - [1. 1. 1. 1. 1. ] - [1. 0.19 1. 0.96 1. ]] + [[0.41 1. 1. 0.2 1. ] + [0.64 0.63 0.6 0.83 0.85] + [0.76 0.69 0.64 0.47 0.95] + [0.55 1. 0.71 0.73 1. ] + [0.94 0.79 0.71 0.53 0.74]] Probability of omega1: - [[1. 0.77 1. 0.96 0. ] - [1. 1. 1. 0. 1. ] - [1. 1. 0. 1. 1. ] - [1. 1. 1. 1. 0.04] - [1. 1. 1. 1. 1. ]] - + [[0.76 0.35 0.54 0.43 0.47] + [0.87 0.77 0.63 0.5 1. ] + [0.63 0.95 0.66 0.84 0.93] + [0.41 0.85 0.88 0.68 0.49] + [0.66 0.81 0.92 0.58 0.69]] + Total Causal Effects -------------------- @@ -478,262 +538,318 @@ below. 0 - y4(t-1) - y2(t) - 0.377029 + y0(t-1) + y4(t) + -0.454092 1.00 1 - y2(t) + y4(t-1) y3(t) - -0.238642 + -0.593869 1.00 2 - y1(t) + y1(t-1) y3(t) - -0.213468 + 0.514145 1.00 3 + y1(t-1) y0(t) - y3(t) - 0.563522 + -0.357521 1.00 4 - y3(t-1) - y4(t) - 0.343541 + y2(t-1) + y0(t) + -0.443562 1.00 5 - y0(t-1) - y2(t) - -0.254723 + y4(t-1) + y0(t) + 0.573678 1.00 6 y4(t-1) - y1(t) - 0.438051 - 1.00 + y2(t) + 0.360151 + 0.97 7 - y3(t-1) - y1(t) - 0.266735 - 1.00 + y4(t-1) + y4(t) + 0.213879 + 0.96 8 y1(t-1) y1(t) - 0.312631 - 1.00 + 0.206331 + 0.96 9 - y0(t-1) - y4(t) - -0.531720 - 1.00 + y4(t-1) + y1(t) + 0.235616 + 0.95 10 - y1(t-1) - y4(t) - 0.226082 - 1.00 + y0(t-1) + y1(t) + -0.364361 + 0.95 11 - y2(t) + y3(t-1) y1(t) - 0.231064 - 1.00 + 0.250602 + 0.94 12 - y0(t) - y1(t) - -0.310366 - 1.00 + y0(t-1) + y2(t) + -0.267122 + 0.94 13 - y4(t-1) - y0(t) - 0.210816 - 1.00 + y2(t-1) + y1(t) + 0.221743 + 0.93 14 - y3(t-1) - y0(t) - 0.375119 - 1.00 + y2(t-1) + y4(t) + -0.213938 + 0.92 15 - y2(t-1) - y0(t) - -0.377158 - 1.00 + y1(t-1) + y4(t) + 0.095743 + 0.92 16 - y2(t-1) - y4(t) - -0.368007 - 1.00 + y0(t-1) + y3(t) + 0.177089 + 0.91 17 - y0(t-1) - y1(t) - -0.419723 - 1.00 + y1(t-1) + y2(t) + 0.135946 + 0.90 18 - y1(t-1) - y2(t) - 0.329416 - 0.99 + y3(t-1) + y3(t) + 0.150796 + 0.88 19 - y0(t-1) - y0(t) - -0.188156 - 0.99 + y2(t-1) + y3(t) + -0.021971 + 0.84 20 - y1(t-1) - y3(t) - 0.120133 - 0.98 + y3(t-1) + y4(t) + 0.170749 + 0.79 21 - y0(t-1) - y3(t) - 0.217037 - 0.98 + y2(t-1) + y2(t) + -0.137767 + 0.77 22 - y4(t-1) - y3(t) - -0.186410 - 0.97 + y0(t-1) + y0(t) + -0.094192 + 0.75 23 - y3(t-1) - y2(t) - 0.184045 - 0.97 + y0(t) + y4(t) + 0.934934 + 0.70 24 - y4(t-1) - y4(t) - 0.287224 - 0.92 + y3(t-1) + y2(t) + 0.141032 + 0.66 25 - y2(t) y0(t) - -0.147135 - 0.91 + y3(t) + 0.636926 + 0.63 26 + y1(t) y3(t) - y4(t) - 0.056672 - 0.73 + -0.296396 + 0.63 27 y3(t-1) - y3(t) - -0.139039 + y0(t) + -0.027274 0.63 28 y0(t) - y4(t) - 0.086335 - 0.46 + y1(t) + -0.469409 + 0.61 29 - y2(t-1) + y2(t) y1(t) - 0.081208 - 0.41 + 0.815024 + 0.59 30 - y1(t-1) - y0(t) - -0.040277 - 0.26 + y2(t) + y3(t) + -0.102868 + 0.57 31 y2(t) - y4(t) - -0.088182 - 0.20 + y0(t) + -0.180943 + 0.53 32 - y2(t-1) y2(t) - -0.052064 - 0.19 + y4(t) + -0.054386 + 0.49 33 - y1(t) y4(t) - -0.056033 - 0.05 + y3(t) + 0.132928 + 0.45 34 - y4(t) y3(t) - 0.057538 - 0.04 + y4(t) + 0.453095 + 0.44 35 - y2(t-1) - y3(t) - -0.261473 - 0.02 + y0(t) + y2(t) + -0.149761 + 0.42 36 y4(t) y1(t) - 0.013746 - 0.01 + 0.119746 + 0.41 + + + 37 + y1(t) + y2(t) + 0.564823 + 0.41 + + + 38 + y3(t) + y1(t) + -0.706491 + 0.37 + + + 39 + y1(t) + y4(t) + -0.038562 + 0.37 + + + 40 + y3(t) + y2(t) + 0.111094 + 0.35 + + + 41 + y3(t) + y0(t) + 0.311717 + 0.34 + + + 42 + y1(t) + y0(t) + -0.300326 + 0.33 + + + 43 + y4(t) + y2(t) + 0.139237 + 0.32 + + + 44 + y4(t) + y0(t) + 0.405747 + 0.30 @@ -802,39 +918,39 @@ We can easily perform sorting operations with pandas.DataFrame. - 3 + 23 y0(t) - y3(t) - 0.563522 - 1.0 + y4(t) + 0.934934 + 0.70 - 6 - y4(t-1) + 29 + y2(t) y1(t) - 0.438051 - 1.0 + 0.815024 + 0.59 - 0 - y4(t-1) - y2(t) - 0.377029 - 1.0 + 25 + y0(t) + y3(t) + 0.636926 + 0.63 - 14 - y3(t-1) + 5 + y4(t-1) y0(t) - 0.375119 - 1.0 + 0.573678 + 1.00 - 4 - y3(t-1) - y4(t) - 0.343541 - 1.0 + 37 + y1(t) + y2(t) + 0.564823 + 0.41 @@ -904,39 +1020,39 @@ following code extracts the causal direction towards y2(t). - 0 + 6 y4(t-1) y2(t) - 0.377029 - 1.00 + 0.360151 + 0.97 - 5 + 12 y0(t-1) y2(t) - -0.254723 - 1.00 + -0.267122 + 0.94 - 18 + 17 y1(t-1) y2(t) - 0.329416 - 0.99 + 0.135946 + 0.90 - 23 - y3(t-1) + 21 + y2(t-1) y2(t) - 0.184045 - 0.97 + -0.137767 + 0.77 - 32 - y2(t-1) + 24 + y3(t-1) y2(t) - -0.052064 - 0.19 + 0.141032 + 0.66 diff --git a/examples/Bootstrap.ipynb b/examples/Bootstrap.ipynb index f5d9402..9b9223f 100644 --- a/examples/Bootstrap.ipynb +++ b/examples/Bootstrap.ipynb @@ -29,7 +29,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "['1.16.2', '0.24.2', '0.11.1', '1.5.4']\n" + "['1.24.4', '2.0.3', '0.20.1', '1.8.3']\n" ] } ], @@ -181,94 +181,107 @@ { "data": { "image/svg+xml": [ - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "%3\r\n", - "\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "\r\n", - "x0->x1\r\n", - "\r\n", - "\r\n", - "3.00\r\n", - "\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "\r\n", - "x0->x4\r\n", - "\r\n", - "\r\n", - "8.00\r\n", - "\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "\r\n", - "x0->x5\r\n", - "\r\n", - "\r\n", - "4.00\r\n", - "\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "\r\n", - "x2->x1\r\n", - "\r\n", - "\r\n", - "2.00\r\n", - "\r\n", - "\r\n", - "x2->x4\r\n", - "\r\n", - "\r\n", - "-1.00\r\n", - "\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "\r\n", - "x3->x0\r\n", - "\r\n", - "\r\n", - "3.00\r\n", - "\r\n", - "\r\n", - "x3->x2\r\n", - "\r\n", - "\r\n", - "6.00\r\n", - "\r\n", - "\r\n", - "\r\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "x0\n", + "\n", + "x0\n", + "\n", + "\n", + "\n", + "x1\n", + "\n", + "x1\n", + "\n", + "\n", + "\n", + "x0->x1\n", + "\n", + "\n", + "3.00\n", + "\n", + "\n", + "\n", + "x4\n", + "\n", + "x4\n", + "\n", + "\n", + "\n", + "x0->x4\n", + "\n", + "\n", + "8.00\n", + "\n", + "\n", + "\n", + "x5\n", + "\n", + "x5\n", + "\n", + "\n", + "\n", + "x0->x5\n", + "\n", + "\n", + "4.00\n", + "\n", + "\n", + "\n", + "x2\n", + "\n", + "x2\n", + "\n", + "\n", + "\n", + "x2->x1\n", + "\n", + "\n", + "2.00\n", + "\n", + "\n", + "\n", + "x2->x4\n", + "\n", + "\n", + "-1.00\n", + "\n", + "\n", + "\n", + "x3\n", + "\n", + "x3\n", + "\n", + "\n", + "\n", + "x3->x0\n", + "\n", + "\n", + "3.00\n", + "\n", + "\n", + "\n", + "x3->x2\n", + "\n", + "\n", + "6.00\n", + "\n", + "\n", + "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 3, @@ -353,14 +366,14 @@ "name": "stdout", "output_type": "stream", "text": [ + "x5 <--- x0 (b>0) (100.0%)\n", "x1 <--- x0 (b>0) (100.0%)\n", "x1 <--- x2 (b>0) (100.0%)\n", - "x5 <--- x0 (b>0) (100.0%)\n", - "x0 <--- x3 (b>0) (99.0%)\n", + "x4 <--- x2 (b<0) (100.0%)\n", + "x0 <--- x3 (b>0) (98.0%)\n", "x4 <--- x0 (b>0) (98.0%)\n", "x2 <--- x3 (b>0) (96.0%)\n", - "x4 <--- x2 (b<0) (94.0%)\n", - "x4 <--- x5 (b>0) (20.0%)\n" + "x3 <--- x2 (b>0) (4.0%)\n" ] } ], @@ -411,7 +424,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "DAG[0]: 54.0%\n", + "DAG[0]: 84.0%\n", "\tx0 <--- x3 (b>0)\n", "\tx1 <--- x0 (b>0)\n", "\tx1 <--- x2 (b>0)\n", @@ -419,20 +432,19 @@ "\tx4 <--- x0 (b>0)\n", "\tx4 <--- x2 (b<0)\n", "\tx5 <--- x0 (b>0)\n", - "DAG[1]: 16.0%\n", + "DAG[1]: 3.0%\n", "\tx0 <--- x3 (b>0)\n", "\tx1 <--- x0 (b>0)\n", "\tx1 <--- x2 (b>0)\n", - "\tx2 <--- x3 (b>0)\n", + "\tx3 <--- x2 (b>0)\n", "\tx4 <--- x0 (b>0)\n", "\tx4 <--- x2 (b<0)\n", - "\tx4 <--- x5 (b>0)\n", "\tx5 <--- x0 (b>0)\n", - "DAG[2]: 7.0%\n", + "DAG[2]: 2.0%\n", "\tx0 <--- x3 (b>0)\n", "\tx1 <--- x0 (b>0)\n", "\tx1 <--- x2 (b>0)\n", - "\tx1 <--- x3 (b>0)\n", + "\tx1 <--- x3 (b<0)\n", "\tx2 <--- x3 (b>0)\n", "\tx4 <--- x0 (b>0)\n", "\tx4 <--- x2 (b<0)\n", @@ -466,12 +478,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[0. 0. 0.1 0.99 0.02 0. ]\n", - " [1. 0. 1. 0.1 0. 0.05]\n", - " [0. 0. 0. 0.96 0. 0. ]\n", + "[[0. 0. 0.03 0.98 0.02 0. ]\n", + " [1. 0. 1. 0.02 0. 0.01]\n", + " [0.01 0. 0. 0.96 0. 0.01]\n", " [0. 0. 0.04 0. 0. 0. ]\n", - " [0.98 0. 0.94 0.02 0. 0.2 ]\n", - " [1. 0. 0. 0. 0. 0. ]]\n" + " [0.98 0.01 1. 0.02 0. 0.02]\n", + " [1. 0. 0.02 0.02 0. 0. ]]\n" ] } ], @@ -531,136 +543,176 @@ " 0\n", " x3\n", " x0\n", - " 3.006190\n", + " 3.004106\n", " 1.00\n", " \n", " \n", " 1\n", " x0\n", " x1\n", - " 3.004868\n", + " 2.963177\n", " 1.00\n", " \n", " \n", " 2\n", " x2\n", " x1\n", - " 2.092102\n", + " 2.017539\n", " 1.00\n", " \n", " \n", " 3\n", " x3\n", " x1\n", - " 20.931938\n", + " 20.928254\n", " 1.00\n", " \n", " \n", " 4\n", - " x3\n", - " x4\n", - " 18.077244\n", + " x0\n", + " x5\n", + " 3.997787\n", " 1.00\n", " \n", " \n", " 5\n", - " x0\n", - " x5\n", - " 3.966866\n", + " x3\n", + " x4\n", + " 18.077943\n", " 1.00\n", " \n", " \n", " 6\n", " x3\n", " x5\n", - " 12.024250\n", + " 12.012988\n", " 1.00\n", " \n", " \n", " 7\n", - " x0\n", + " x2\n", " x4\n", - " 7.993145\n", - " 0.98\n", + " -1.006362\n", + " 1.00\n", " \n", " \n", " 8\n", - " x3\n", - " x2\n", - " 5.970163\n", - " 0.96\n", + " x0\n", + " x4\n", + " 8.011818\n", + " 0.98\n", " \n", " \n", " 9\n", + " x3\n", " x2\n", - " x0\n", - " 0.490569\n", - " 0.04\n", + " 5.964879\n", + " 0.96\n", " \n", " \n", " 10\n", - " x4\n", - " x1\n", - " -0.659286\n", - " 0.04\n", + " x2\n", + " x5\n", + " 0.396327\n", + " 0.09\n", " \n", " \n", " 11\n", " x2\n", - " x3\n", - " 0.163050\n", - " 0.04\n", + " x0\n", + " 0.487915\n", + " 0.07\n", " \n", " \n", " 12\n", " x2\n", - " x4\n", - " 2.923907\n", + " x3\n", + " 0.164565\n", " 0.04\n", " \n", " \n", " 13\n", - " x2\n", " x5\n", - " 1.961195\n", - " 0.04\n", + " x4\n", + " 0.087437\n", + " 0.03\n", " \n", " \n", " 14\n", " x4\n", - " x0\n", - " 0.122301\n", + " x5\n", + " 0.496445\n", " 0.02\n", " \n", " \n", " 15\n", - " x4\n", " x5\n", - " 0.487542\n", + " x1\n", + " -0.064703\n", " 0.02\n", " \n", + " \n", + " 16\n", + " x4\n", + " x1\n", + " 0.367100\n", + " 0.02\n", + " \n", + " \n", + " 17\n", + " x4\n", + " x0\n", + " 0.124114\n", + " 0.02\n", + " \n", + " \n", + " 18\n", + " x0\n", + " x2\n", + " 0.056261\n", + " 0.01\n", + " \n", + " \n", + " 19\n", + " x1\n", + " x4\n", + " -0.097108\n", + " 0.01\n", + " \n", + " \n", + " 20\n", + " x5\n", + " x2\n", + " -0.111894\n", + " 0.01\n", + " \n", " \n", "\n", "" ], "text/plain": [ " from to effect probability\n", - "0 x3 x0 3.006190 1.00\n", - "1 x0 x1 3.004868 1.00\n", - "2 x2 x1 2.092102 1.00\n", - "3 x3 x1 20.931938 1.00\n", - "4 x3 x4 18.077244 1.00\n", - "5 x0 x5 3.966866 1.00\n", - "6 x3 x5 12.024250 1.00\n", - "7 x0 x4 7.993145 0.98\n", - "8 x3 x2 5.970163 0.96\n", - "9 x2 x0 0.490569 0.04\n", - "10 x4 x1 -0.659286 0.04\n", - "11 x2 x3 0.163050 0.04\n", - "12 x2 x4 2.923907 0.04\n", - "13 x2 x5 1.961195 0.04\n", - "14 x4 x0 0.122301 0.02\n", - "15 x4 x5 0.487542 0.02" + "0 x3 x0 3.004106 1.00\n", + "1 x0 x1 2.963177 1.00\n", + "2 x2 x1 2.017539 1.00\n", + "3 x3 x1 20.928254 1.00\n", + "4 x0 x5 3.997787 1.00\n", + "5 x3 x4 18.077943 1.00\n", + "6 x3 x5 12.012988 1.00\n", + "7 x2 x4 -1.006362 1.00\n", + "8 x0 x4 8.011818 0.98\n", + "9 x3 x2 5.964879 0.96\n", + "10 x2 x5 0.396327 0.09\n", + "11 x2 x0 0.487915 0.07\n", + "12 x2 x3 0.164565 0.04\n", + "13 x5 x4 0.087437 0.03\n", + "14 x4 x5 0.496445 0.02\n", + "15 x5 x1 -0.064703 0.02\n", + "16 x4 x1 0.367100 0.02\n", + "17 x4 x0 0.124114 0.02\n", + "18 x0 x2 0.056261 0.01\n", + "19 x1 x4 -0.097108 0.01\n", + "20 x5 x2 -0.111894 0.01" ] }, "execution_count": 10, @@ -728,35 +780,35 @@ " 3\n", " x3\n", " x1\n", - " 20.931938\n", + " 20.928254\n", " 1.00\n", " \n", " \n", - " 4\n", + " 5\n", " x3\n", " x4\n", - " 18.077244\n", + " 18.077943\n", " 1.00\n", " \n", " \n", " 6\n", " x3\n", " x5\n", - " 12.024250\n", + " 12.012988\n", " 1.00\n", " \n", " \n", - " 7\n", + " 8\n", " x0\n", " x4\n", - " 7.993145\n", + " 8.011818\n", " 0.98\n", " \n", " \n", - " 8\n", + " 9\n", " x3\n", " x2\n", - " 5.970163\n", + " 5.964879\n", " 0.96\n", " \n", " \n", @@ -765,11 +817,11 @@ ], "text/plain": [ " from to effect probability\n", - "3 x3 x1 20.931938 1.00\n", - "4 x3 x4 18.077244 1.00\n", - "6 x3 x5 12.024250 1.00\n", - "7 x0 x4 7.993145 0.98\n", - "8 x3 x2 5.970163 0.96" + "3 x3 x1 20.928254 1.00\n", + "5 x3 x4 18.077943 1.00\n", + "6 x3 x5 12.012988 1.00\n", + "8 x0 x4 8.011818 0.98\n", + "9 x3 x2 5.964879 0.96" ] }, "execution_count": 11, @@ -820,39 +872,39 @@ " \n", " \n", " \n", - " 14\n", - " x4\n", + " 20\n", + " x5\n", + " x2\n", + " -0.111894\n", + " 0.01\n", + " \n", + " \n", + " 18\n", " x0\n", - " 0.122301\n", - " 0.02\n", + " x2\n", + " 0.056261\n", + " 0.01\n", " \n", " \n", - " 15\n", + " 19\n", + " x1\n", " x4\n", - " x5\n", - " 0.487542\n", - " 0.02\n", + " -0.097108\n", + " 0.01\n", " \n", " \n", - " 9\n", - " x2\n", + " 17\n", + " x4\n", " x0\n", - " 0.490569\n", - " 0.04\n", + " 0.124114\n", + " 0.02\n", " \n", " \n", - " 10\n", + " 16\n", " x4\n", " x1\n", - " -0.659286\n", - " 0.04\n", - " \n", - " \n", - " 11\n", - " x2\n", - " x3\n", - " 0.163050\n", - " 0.04\n", + " 0.367100\n", + " 0.02\n", " \n", " \n", "\n", @@ -860,11 +912,11 @@ ], "text/plain": [ " from to effect probability\n", - "14 x4 x0 0.122301 0.02\n", - "15 x4 x5 0.487542 0.02\n", - "9 x2 x0 0.490569 0.04\n", - "10 x4 x1 -0.659286 0.04\n", - "11 x2 x3 0.163050 0.04" + "20 x5 x2 -0.111894 0.01\n", + "18 x0 x2 0.056261 0.01\n", + "19 x1 x4 -0.097108 0.01\n", + "17 x4 x0 0.124114 0.02\n", + "16 x4 x1 0.367100 0.02" ] }, "execution_count": 12, @@ -925,29 +977,36 @@ " 1\n", " x0\n", " x1\n", - " 3.004868\n", + " 2.963177\n", " 1.00\n", " \n", " \n", " 2\n", " x2\n", " x1\n", - " 2.092102\n", + " 2.017539\n", " 1.00\n", " \n", " \n", " 3\n", " x3\n", " x1\n", - " 20.931938\n", + " 20.928254\n", " 1.00\n", " \n", " \n", - " 10\n", + " 15\n", + " x5\n", + " x1\n", + " -0.064703\n", + " 0.02\n", + " \n", + " \n", + " 16\n", " x4\n", " x1\n", - " -0.659286\n", - " 0.04\n", + " 0.367100\n", + " 0.02\n", " \n", " \n", "\n", @@ -955,10 +1014,11 @@ ], "text/plain": [ " from to effect probability\n", - "1 x0 x1 3.004868 1.00\n", - "2 x2 x1 2.092102 1.00\n", - "3 x3 x1 20.931938 1.00\n", - "10 x4 x1 -0.659286 0.04" + "1 x0 x1 2.963177 1.00\n", + "2 x2 x1 2.017539 1.00\n", + "3 x3 x1 20.928254 1.00\n", + "15 x5 x1 -0.064703 0.02\n", + "16 x4 x1 0.367100 0.02" ] }, "execution_count": 13, @@ -990,10 +1050,10 @@ { "data": { "text/plain": [ - "(array([ 4., 0., 0., 0., 0., 0., 0., 0., 0., 96.]),\n", - " array([2.82 , 2.839, 2.857, 2.876, 2.895, 2.913, 2.932, 2.95 , 2.969,\n", - " 2.988, 3.006]),\n", - " )" + "(array([ 1., 8., 10., 17., 19., 20., 13., 9., 1., 2.]),\n", + " array([2.936, 2.951, 2.965, 2.98 , 2.994, 3.008, 3.023, 3.037, 3.051,\n", + " 3.066, 3.08 ]),\n", + " )" ] }, "execution_count": 14, @@ -1002,7 +1062,7 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAEBCAYAAACQbKXWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAEZJJREFUeJzt3X+QXWV9x/H3bmKTSDb+WK+TKEjHIl+plkQl2A5qbI04TEvRaYEKotCC0haLU9DRAUWd6pQWUXGqUNAJbVqhAxYRSMeKHcHpQKUVrGC+QzuIRlbNbFUSJEDY7R/nLLmu7O7de87d3fi8XzPM3Pvc5zz3e588+7nnnnvuYWhychJJUlmGF7sASdLCM/wlqUCGvyQVyPCXpAIZ/pJUIMNfkgpk+EtSgQx/SSqQ4S9JBTL8JalAy3vpFBFrgH8Hficzvx0Rm4GLgVXA1Zl5ft1vA3AFsAa4BTgzM/cOpHJJUt+G5rq2T0S8HLgceCFwKPADIIFNwHeBG4GPZea2iPgmcHpm3hYRnwbuyMxP9VjLCmAjMAY83s+LkaQCLQPWAV8DHul1o172/M8A/hT4+/r+kcC9mXkfQERsBY6PiHuAVZl5W91vC/ABoNfw3wjc2mNfSdLPeiXw1V47zxn+mXk6QERMNT2Hau98yhhw4CztvRoD+NGPHmJiov0rjY6OrmZ8fHfr47bJGtthje2wxnYMusbh4SGe8YwD4Gfzd049HfOf/lxAdzoPAROztPfqcWDqRQzE6OjqgY3dFmtshzW2wxrbsUA1zutweT/hv4Pq+NKUtcADs7TPy/j47oHs+Xc6I+zcuav1cdtkje2wxnZYYzsGXePw8FBfby79nOp5OxARcUhELANOArZl5v3Anog4qu53CrCtj/ElSQM27/DPzD3AqcC1wD3AduCa+uGTgY9GxHZgNXBJO2VKktrU82GfzPzlrts3A+ufpM9dVGcDSZKWMH/hK0kFMvwlqUCGvyQVqJ9TPSXpF9LImlWsXNF+LHY6I3P22fPIXnY9+HDrzz0Tw1+SaitXLOfYcz6/KM/9hY8cx0L+YsHDPpJUIMNfkgpk+EtSgQx/SSqQ4S9JBTL8JalAhr8kFcjwl6QCGf6SVCDDX5IKZPhLUoEMf0kqkOEvSQUy/CWpQIa/JBXI8JekAhn+klQgw1+SCmT4S1KBDH9JKpDhL0kFMvwlqUCGvyQVyPCXpAIZ/pJUIMNfkgpk+EtSgQx/SSqQ4S9JBVreZOOIeBPwnvrutsw8NyI2AFcAa4BbgDMzc2+zMiVJbep7zz8ingpcAmwC1gOvjIjNwFbgrMw8FBgCzmijUElSe5oc9llWb38A8JT6v8eAVZl5W91nC3B8kwIlSe3rO/wzcxfwXmA7sAP4NvAoMNbVbQw4sEF9kqQB6PuYf0QcDvwhcDDwE6rDPUcDk13dhoCJ+Yw7Orq635Lm1OmMDGzstlhjO6yxHda4sBbytTT5wvd1wM2Z+UOAiNgCnAus6+qzFnhgPoOOj+9mYmJy7o7z1OmMsHPnrtbHbZM1tsMa21FijYv9RtLPaxkeHuprp7nJMf+7gM0RcUBEDAHHAl8B9kTEUXWfU4BtDZ5DkjQATY75fxH4LPCfwDeovvD9S+Bk4KMRsR1YTXVGkCRpCWl0nn9mXghcOK35LuDIJuNKkgbLX/hKUoEMf0kqkOEvSQUy/CWpQIa/JBXI8JekAhn+klQgw1+SCmT4S1KBDH9JKpDhL0kFMvwlqUCGvyQVyPCXpAIZ/pJUIMNfkgpk+EtSgQx/SSqQ4S9JBTL8JalAhr8kFcjwl6QCGf6SVCDDX5IKZPhLUoEMf0kqkOEvSQUy/CWpQIa/JBXI8JekAhn+klQgw1+SCmT4S1KBDH9JKtDyJhtHxLHABcABwBcz8+yI2AxcDKwCrs7M85uXKUlqU997/hHxfOBS4PXA4cBLI+IY4DPAccBhwMa6TZK0hDQ57PMGqj37HZn5GHAi8FPg3sy8LzP3AluB41uoU5LUoiaHfQ4BHo2I64HnATcAdwNjXX3GgAMbPIckaQCahP9y4FXAq4HdwPXAw8BkV58hYGI+g46Orm5Q0uw6nZGBjd0Wa2yHNbbDGhfWQr6WJuH/feBLmbkTICL+meoQz+NdfdYCD8xn0PHx3UxMTM7dcZ46nRF27tzV+rhtssZ2WGM7Sqxxsd9I+nktw8NDfe00Nwn/G4ArI+LpwC7gGOAa4N0RcQhwH3AS1RfAkqQlpO8vfDPzduCvgK8C9wD3A58CTgWurdu2U70hSJKWkEbn+WfmZ/j5PfubgfVNxpUkDZa/8JWkAhn+klQgw1+SCmT4S1KBDH9JKpDhL0kFMvwlqUCGvyQVyPCXpAIZ/pJUIMNfkgpk+EtSgQx/SSqQ4S9JBTL8JalAhr8kFcjwl6QCGf6SVCDDX5IKZPhLUoEMf0kqkOEvSQUy/CWpQIa/JBXI8JekAhn+klQgw1+SCmT4S1KBDH9JKpDhL0kFMvwlqUCGvyQVyPCXpAIZ/pJUoOVNB4iIi4BnZeapEbEBuAJYA9wCnJmZe5s+hySpXY32/CPiNcBbupq2Amdl5qHAEHBGk/ElSYPRd/hHxDOBDwEfru8fDKzKzNvqLluA45sWKElqX5M9/8uA84Af1fefA4x1PT4GHNhgfEnSgPR1zD8iTge+m5k3R8SpdfMwMNnVbQiYmO/Yo6Or+ympJ53OyMDGbos1tsMa22GNC2shX0u/X/ieCKyLiDuBZwKrqYJ/XVeftcAD8x14fHw3ExOTc3ecp05nhJ07d7U+bpussR3W2I4Sa1zsN5J+Xsvw8FBfO819HfbJzNdm5oszcwPwPuD6zDwN2BMRR9XdTgG29TO+JGmw2j7P/2TgoxGxnerTwCUtjy9JakHj8/wzcwvVmT1k5l3AkU3HlCQNlr/wlaQCGf6SVCDDX5IKZPhLUoEMf0kqkOEvSQUy/CWpQIa/JBXI8JekAhn+klQgw1+SCmT4S1KBDH9JKpDhL0kFMvwlqUCGvyQVyPCXpAIZ/pJUIMNfkgpk+EtSgQx/SSqQ4S9JBTL8JalAhr8kFcjwl6QCGf6SVCDDX5IKZPhLUoEMf0kqkOEvSQUy/CWpQIa/JBXI8JekAhn+klSg5U02jogLgBPquzdm5rsiYjNwMbAKuDozz29YoySpZX3v+dchfzTwEmAD8LKIeCPwGeA44DBgY0Qc00ahkqT2NDnsMwack5mPZuZjwLeAQ4F7M/O+zNwLbAWOb6FOSVKL+j7sk5l3T92OiBdQHf75BNWbwpQx4MC+q5MkDUSjY/4AEfEi4EbgncBeqr3/KUPAxHzGGx1d3bSkGXU6IwMbuy3W2A5rbIc1LqyFfC1Nv/A9CrgWeEdmXhURm4B1XV3WAg/MZ8zx8d1MTEw2KetJdToj7Ny5q/Vx22SN7bDGdpRY42K/kfTzWoaHh/raae47/CPiIOA64MTM/HLdfHv1UBwC3AecRPUFsCRpCWmy538usBK4OCKm2i4FTqX6NLASuAm4psFzSJIGoMkXvmcDZ8/w8Pp+x5UkDZ6/8JWkAhn+klQgw1+SCmT4S1KBDH9JKpDhL0kFMvwlqUCGvyQVyPCXpAIZ/pJUIMNfkgpk+EtSgQx/SSqQ4S9JBTL8JalAhr8kFcjwl6QCGf6SVCDDX5IKZPhLUoEMf0kqkOEvSQUy/CWpQIa/JBXI8JekAhn+klQgw1+SCmT4S1KBDH9JKpDhL0kFWr7YBbRlZM0qVq6Y/eV0OiMDee49j+xl14MPD2RsSRqEX5jwX7liOcee8/lFee4vfOQ4di3KM0tSfzzsI0kFMvwlqUCGvyQVaCDH/CPiJOB84CnAxzLzbwbxPJKk/rS+5x8RzwU+BLwC2AC8NSJ+te3nkST1bxB7/puBL2fm/wFExDXA7wMfnGO7ZQDDw0N9P/Gzn7Gq722balL3IMYZJGtshzW2o+0a97cc6dpm2Xy2G5qcnJz3k80mIt4DHJCZ59f3TweOzMy3zrHpK4BbWy1GksrxSuCrvXYexJ7/MND9jjIETPSw3deoih8DHh9AXZL0i2gZsI4qQ3s2iPDfQRXiU9YCD/Sw3SPM411LkvSE/53vBoMI/y8B74+IDvAQ8HvAXId8JEkLqPWzfTLze8B5wL8BdwL/mJn/0fbzSJL61/oXvpKkpc9f+EpSgQx/SSqQ4S9JBTL8JalA++3/zCUiLgBOqO/emJnvmvb4S4HLgF8Cvgu8KTN/HBGH1e1rgIeBP87MOyPiYOCb7Dtf9geZ+bpFqnET8Lm6DeDrmXlaRDwd+Afg+cBO4ITM/P4i1XgH+9bPKuBXgOcCK2lxHnuo7xjgwvrufwNvy8zdM81VRPwS8GngCKp//5Myc3u/9TWscSmtxZlqXEprcaYaF2Qt1jV8kOpyNZPApzPz4mmPbwCuoPo3vQU4MzP3RsTzgK3As4EETp5tnTapsVf75Z5/RGwGjgZeQnXxuJdFxBumdfs48L7MXE812efW7ZcDF2bmBqpTUq+s24+gOi11Q/1f00XSpMYjgIu6ajmtbv8L4NbMPKx+HR9frBoz84ip+oDb6z4/oMV5nKu++g/nSuAPMvNw4C7gw/XDM83VnwEP1e3vALb0W18LNS6JtThHjUtiLc5W40KsxbqGTcBvAYfXY789ImJat63AWZl5KNXVDc6o2z8JfDIzXwjcAby3bm91Hudjvwx/qktAnJOZj2bmY8C3gOdN67OM6t0X4KlUe1ZQvSv/S337G13bbQReHBF3RsSXI+LXFrHGjcDREfGNiLg+Ig6q23+bai8B4LPAMRHxlEWqEYCIeA2wnn17ZG3O41z1vQC4PzPvqe/fALy+vj3TXD3Rnpm3AJ16r2wxalwqa3G2GpfKWpytRmDga5HM/Arwm5m5l2oPfjnVD1mnnv9gYFVm3lY3bQGOr+flVcA13e317bbnsWf7Zfhn5t1TExwRL6D6qHjTtG5/DlweEWPAa4FL6223ZObUtYM+CFxX395D9a79UuAi4Lr6EMGC1wj8GPhEvYdzE3BV3f4cqj8S6gX4INBZpBqnfAA4r2tOW5vHHuq7FzgoItbX90+gupwIzDxXT7TXxoAD+6mvaY1LaC3ONo9LZS3OVuOUga3Frjofi4gPAPcANwPf63p4prX1LODBep66239mmzbmcT72y/CfEhEvAv4VeGdm3tvVvorquO7mzFxH9ZHr77oeH4qIi4Bfp/roT2a+PzM/lZkTmXkTsBs4bDFqzMwzM/Nz9e1LgRdFxNOoPkZ26/Wiea3X2LXdszLzhqm2QczjTPVl5o+BNwN/GxFfo7qG1KP1wzPNVb8XHhxEjUtiLc5W41JZiz3M44KsxXrcC6gC+iD2HdaBmdfW9HbYN1cDmcde7LfhHxFHUb3zvjszr5z28IuBh3PfZSUuA15db7ec6mPWRqqPcD+p298eEaNdYwwBjy10jRExHBHnRcT0a3PvpdrLWNv1OkaA8YWusevx1wNXTxuv1Xmcrb56jnZk5sszcyPwdfZ9uTfTXO2gugLilF4vPNh6jUtlLc5U41Jai3P8W8PCrMUX1l/okpk/pfoi/PCuLjOtrR8CT+uax3XsW3Otz2Ov9svwr487Xkd1psZVT9Llf6g+Ik59GXMc+y53ehHVMeyjp/7YapuAP6rH30R1rLvvs0D6rTEzJ4A3UF0Qj4h4M3B7Zj5E9TH4zXX/E6m+KGqymJvMI8Bv8PP/D4bW5rGH+iaBL0bEcyNiiOoQ1VQAzDRXT7RHxCuAPZn5nX7qa6HGpbIWn7TGJbYWZ5tHGPBarD2f6hDoivrw0XF0XYk4M+8H9tRvYgCnANvqebmVap6gmrdt9e1W53E+9tdTPc+lOo3r4n25xKXA71J9039HRJwK/FO9UH4InBbVlUbPAu4Dbp/aNquzBM4GttQL/GHgjfXiX9Aa635voVpkF9TtU4vjvXWNd1Mdiz25QX1Na4Tqj2HHtDHbnMde6nsb1ZemK6iuKPvXdb+Z5uoTwGV1+yNUf6BN9FXjElyLM83jUlqLM9UIg1+LZOZNEXEk1aeOx4FrM/OqiLhpqkaqebg8ItYA/wVcUm/+J8CVEXE+8B3gjXV72/PYMy/sJkkF2i8P+0iSmjH8JalAhr8kFcjwl6QCGf6SVCDDX5IKZPhLUoEMf0kq0P8DFMKE4aZ/GnAAAAAASUVORK5CYII=\n", + "image/png": "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", "text/plain": [ "
" ] @@ -1072,43 +1132,55 @@ " \n", " 0\n", " [3, 0, 1]\n", - " 8.644765\n", - " 0.99\n", + " 8.893562\n", + " 0.98\n", " \n", " \n", " 1\n", " [3, 2, 1]\n", - " 11.653517\n", + " 12.030408\n", " 0.96\n", " \n", " \n", " 2\n", - " [3, 1]\n", - " 0.102936\n", - " 0.10\n", + " [3, 2, 0, 1]\n", + " 2.239175\n", + " 0.03\n", " \n", " \n", " 3\n", - " [3, 2, 0, 1]\n", - " 1.007787\n", - " 0.08\n", + " [3, 1]\n", + " -0.639462\n", + " 0.02\n", " \n", " \n", " 4\n", - " [3, 0, 5, 1]\n", - " 0.889629\n", - " 0.05\n", + " [3, 2, 4, 0, 1]\n", + " -3.194541\n", + " 0.02\n", " \n", " \n", " 5\n", " [3, 4, 0, 1]\n", - " 8.419805\n", + " 9.820705\n", " 0.02\n", " \n", " \n", " 6\n", - " [3, 2, 4, 0, 1]\n", - " -3.802326\n", + " [3, 0, 2, 1]\n", + " 3.061033\n", + " 0.01\n", + " \n", + " \n", + " 7\n", + " [3, 0, 5, 1]\n", + " 1.176834\n", + " 0.01\n", + " \n", + " \n", + " 8\n", + " [3, 0, 5, 2, 1]\n", + " -2.719517\n", " 0.01\n", " \n", " \n", @@ -1117,13 +1189,15 @@ ], "text/plain": [ " path effect probability\n", - "0 [3, 0, 1] 8.644765 0.99\n", - "1 [3, 2, 1] 11.653517 0.96\n", - "2 [3, 1] 0.102936 0.10\n", - "3 [3, 2, 0, 1] 1.007787 0.08\n", - "4 [3, 0, 5, 1] 0.889629 0.05\n", - "5 [3, 4, 0, 1] 8.419805 0.02\n", - "6 [3, 2, 4, 0, 1] -3.802326 0.01" + "0 [3, 0, 1] 8.893562 0.98\n", + "1 [3, 2, 1] 12.030408 0.96\n", + "2 [3, 2, 0, 1] 2.239175 0.03\n", + "3 [3, 1] -0.639462 0.02\n", + "4 [3, 2, 4, 0, 1] -3.194541 0.02\n", + "5 [3, 4, 0, 1] 9.820705 0.02\n", + "6 [3, 0, 2, 1] 3.061033 0.01\n", + "7 [3, 0, 5, 1] 1.176834 0.01\n", + "8 [3, 0, 5, 2, 1] -2.719517 0.01" ] }, "execution_count": 15, @@ -1141,7 +1215,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -1155,7 +1229,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.8.10" }, "toc": { "base_numbering": 1, @@ -1169,8 +1243,15 @@ "toc_position": {}, "toc_section_display": true, "toc_window_display": false + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": {}, + "version_major": 2, + "version_minor": 0 + } } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/examples/BottomUpParceLiNGAM.ipynb b/examples/BottomUpParceLiNGAM.ipynb index 05434a5..5fd255d 100644 --- a/examples/BottomUpParceLiNGAM.ipynb +++ b/examples/BottomUpParceLiNGAM.ipynb @@ -17,7 +17,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2021-06-25T06:59:57.385770Z", @@ -29,7 +29,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "['1.16.2', '0.24.2', '0.11.1', '1.5.4']\n" + "['1.24.4', '2.0.3', '0.20.1', '1.8.3']\n" ] } ], @@ -58,7 +58,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2021-06-25T06:59:59.105787Z", @@ -154,7 +154,7 @@ "4 1.940721 2.974182 2.140298 1.886342 0.451992 1.770786" ] }, - "execution_count": 22, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -178,7 +178,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2021-06-25T07:00:01.201484Z", @@ -189,108 +189,123 @@ { "data": { "image/svg+xml": [ - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "%3\r\n", - "\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "\r\n", - "x0->x1\r\n", - "\r\n", - "\r\n", - "0.50\r\n", - "\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "\r\n", - "x0->x4\r\n", - "\r\n", - "\r\n", - "0.50\r\n", - "\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "\r\n", - "x0->x5\r\n", - "\r\n", - "\r\n", - "0.50\r\n", - "\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "\r\n", - "x2->x1\r\n", - "\r\n", - "\r\n", - "0.50\r\n", - "\r\n", - "\r\n", - "x2->x4\r\n", - "\r\n", - "\r\n", - "-0.50\r\n", - "\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "\r\n", - "x3->x0\r\n", - "\r\n", - "\r\n", - "0.50\r\n", - "\r\n", - "\r\n", - "x6\r\n", - "\r\n", - "x6\r\n", - "\r\n", - "\r\n", - "x6->x2\r\n", - "\r\n", - "\r\n", - "2.00\r\n", - "\r\n", - "\r\n", - "x6->x3\r\n", - "\r\n", - "\r\n", - "2.00\r\n", - "\r\n", - "\r\n", - "\r\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "x0\n", + "\n", + "x0\n", + "\n", + "\n", + "\n", + "x1\n", + "\n", + "x1\n", + "\n", + "\n", + "\n", + "x0->x1\n", + "\n", + "\n", + "0.50\n", + "\n", + "\n", + "\n", + "x4\n", + "\n", + "x4\n", + "\n", + "\n", + "\n", + "x0->x4\n", + "\n", + "\n", + "0.50\n", + "\n", + "\n", + "\n", + "x5\n", + "\n", + "x5\n", + "\n", + "\n", + "\n", + "x0->x5\n", + "\n", + "\n", + "0.50\n", + "\n", + "\n", + "\n", + "x2\n", + "\n", + "x2\n", + "\n", + "\n", + "\n", + "x2->x1\n", + "\n", + "\n", + "0.50\n", + "\n", + "\n", + "\n", + "x2->x4\n", + "\n", + "\n", + "-0.50\n", + "\n", + "\n", + "\n", + "x3\n", + "\n", + "x3\n", + "\n", + "\n", + "\n", + "x3->x0\n", + "\n", + "\n", + "0.50\n", + "\n", + "\n", + "\n", + "x6\n", + "\n", + "x6\n", + "\n", + "\n", + "\n", + "x6->x2\n", + "\n", + "\n", + "2.00\n", + "\n", + "\n", + "\n", + "x6->x3\n", + "\n", + "\n", + "2.00\n", + "\n", + "\n", + "\n" ], "text/plain": [ - "" + "" ] }, - "execution_count": 23, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -326,7 +341,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2021-06-25T07:00:31.798259Z", @@ -337,10 +352,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 24, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -359,7 +374,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2021-06-25T07:00:31.814217Z", @@ -373,7 +388,7 @@ "[[2, 3], 0, 5, 1, 4]" ] }, - "execution_count": 25, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -396,7 +411,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2021-06-25T07:00:31.855308Z", @@ -407,15 +422,15 @@ { "data": { "text/plain": [ - "array([[ 0. , 0. , 0. , 0.506, 0. , 0. ],\n", - " [ 0.499, 0. , 0.495, 0.007, 0. , 0. ],\n", + "array([[ 0. , 0. , 0. , 0.511, 0. , 0. ],\n", + " [ 0.504, 0. , 0.499, 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , nan, 0. , 0. ],\n", " [ 0. , 0. , nan, 0. , 0. , 0. ],\n", - " [ 0.448, 0. , -0.451, 0. , 0. , 0. ],\n", - " [ 0.48 , 0. , 0. , 0. , 0. , 0. ]])" + " [ 0.481, 0. , -0.473, 0. , 0. , 0. ],\n", + " [ 0.519, 0. , 0. , 0. , 0. , 0. ]])" ] }, - "execution_count": 26, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -433,7 +448,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2021-06-25T07:00:32.302957Z", @@ -444,97 +459,110 @@ { "data": { "image/svg+xml": [ - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "%3\r\n", - "\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "\r\n", - "x0->x1\r\n", - "\r\n", - "\r\n", - "0.50\r\n", - "\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "\r\n", - "x0->x4\r\n", - "\r\n", - "\r\n", - "0.45\r\n", - "\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "\r\n", - "x0->x5\r\n", - "\r\n", - "\r\n", - "0.48\r\n", - "\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "\r\n", - "x2->x1\r\n", - "\r\n", - "\r\n", - "0.49\r\n", - "\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "\r\n", - "x2->x3\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "x2->x4\r\n", - "\r\n", - "\r\n", - "-0.45\r\n", - "\r\n", - "\r\n", - "x3->x0\r\n", - "\r\n", - "\r\n", - "0.51\r\n", - "\r\n", - "\r\n", - "\r\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "x0\n", + "\n", + "x0\n", + "\n", + "\n", + "\n", + "x1\n", + "\n", + "x1\n", + "\n", + "\n", + "\n", + "x0->x1\n", + "\n", + "\n", + "0.50\n", + "\n", + "\n", + "\n", + "x4\n", + "\n", + "x4\n", + "\n", + "\n", + "\n", + "x0->x4\n", + "\n", + "\n", + "0.48\n", + "\n", + "\n", + "\n", + "x5\n", + "\n", + "x5\n", + "\n", + "\n", + "\n", + "x0->x5\n", + "\n", + "\n", + "0.52\n", + "\n", + "\n", + "\n", + "x2\n", + "\n", + "x2\n", + "\n", + "\n", + "\n", + "x2->x1\n", + "\n", + "\n", + "0.50\n", + "\n", + "\n", + "\n", + "x3\n", + "\n", + "x3\n", + "\n", + "\n", + "\n", + "x2->x3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "x2->x4\n", + "\n", + "\n", + "-0.47\n", + "\n", + "\n", + "\n", + "x3->x0\n", + "\n", + "\n", + "0.51\n", + "\n", + "\n", + "\n" ], "text/plain": [ - "" + "" ] }, - "execution_count": 27, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -565,12 +593,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[0. 0.491 nan nan 0.763 0.2 ]\n", - " [0.491 0. nan nan 0.473 0.684]\n", + "[[0. 0.523 nan nan 0.8 0.399]\n", + " [0.523 0. nan nan 0.44 0.6 ]\n", " [ nan nan 0. nan nan nan]\n", " [ nan nan nan 0. nan nan]\n", - " [0.763 0.473 nan nan 0. 0.427]\n", - " [0.2 0.684 nan nan 0.427 0. ]]\n" + " [0.8 0.44 nan nan 0. 0.446]\n", + " [0.399 0.6 nan nan 0.446 0. ]]\n" ] } ], @@ -654,9 +682,9 @@ "x1 <--- x0 (b>0) (41.0%)\n", "x1 <--- x2 (b>0) (41.0%)\n", "x5 <--- x0 (b>0) (26.0%)\n", - "x1 <--- x3 (b>0) (21.0%)\n", "x0 <--- x3 (b>0) (12.0%)\n", - "x5 <--- x2 (b>0) (7.0%)\n" + "x1 <--- x4 (b>0) (6.0%)\n", + "x4 <--- x1 (b>0) (4.0%)\n" ] } ], @@ -708,12 +736,16 @@ "output_type": "stream", "text": [ "DAG[0]: 33.0%\n", - "DAG[1]: 13.0%\n", + "DAG[1]: 12.0%\n", "\tx4 <--- x0 (b>0)\n", "\tx4 <--- x2 (b<0)\n", - "DAG[2]: 7.0%\n", + "DAG[2]: 10.0%\n", + "\tx0 <--- x3 (b>0)\n", "\tx1 <--- x0 (b>0)\n", - "\tx1 <--- x2 (b>0)\n" + "\tx1 <--- x2 (b>0)\n", + "\tx4 <--- x0 (b>0)\n", + "\tx4 <--- x2 (b<0)\n", + "\tx5 <--- x0 (b>0)\n" ] } ], @@ -744,11 +776,11 @@ "output_type": "stream", "text": [ "[[0. 0.01 0. 0.12 0.01 0. ]\n", - " [0.41 0. 0.41 0.21 0. 0. ]\n", + " [0.41 0. 0.41 0. 0.06 0. ]\n", " [0. 0. 0. 0.02 0. 0. ]\n", " [0. 0. 0. 0. 0. 0. ]\n", - " [0.45 0.03 0.45 0.02 0. 0.07]\n", - " [0.26 0.01 0.07 0.02 0. 0. ]]\n" + " [0.45 0.04 0.45 0.02 0. 0.01]\n", + " [0.26 0. 0. 0. 0. 0. ]]\n" ] } ], @@ -808,70 +840,84 @@ " 0\n", " x0\n", " x5\n", - " 0.515510\n", + " 0.518064\n", " 0.12\n", " \n", " \n", " 1\n", " x0\n", " x1\n", - " 0.477885\n", + " 0.504613\n", " 0.11\n", " \n", " \n", " 2\n", " x0\n", " x4\n", - " 0.494946\n", + " 0.479543\n", " 0.11\n", " \n", " \n", " 3\n", " x2\n", " x1\n", - " 0.482657\n", + " 0.508531\n", " 0.02\n", " \n", " \n", " 4\n", " x2\n", " x4\n", - " -0.490889\n", + " -0.476555\n", " 0.02\n", " \n", " \n", " 5\n", " x3\n", " x0\n", - " 0.511008\n", + " 0.490217\n", " 0.01\n", " \n", " \n", " 6\n", " x3\n", " x1\n", - " 0.653876\n", + " 0.630292\n", " 0.01\n", " \n", " \n", " 7\n", + " x4\n", + " x1\n", + " 0.097063\n", + " 0.01\n", + " \n", + " \n", + " 8\n", " x3\n", " x2\n", - " 0.790837\n", + " 0.796101\n", " 0.01\n", " \n", " \n", - " 8\n", + " 9\n", + " x1\n", + " x4\n", + " 0.089596\n", + " 0.01\n", + " \n", + " \n", + " 10\n", " x3\n", " x4\n", - " -0.126227\n", + " -0.151733\n", " 0.01\n", " \n", " \n", - " 9\n", + " 11\n", " x3\n", " x5\n", - " 0.265528\n", + " 0.254280\n", " 0.01\n", " \n", " \n", @@ -879,17 +925,19 @@ "" ], "text/plain": [ - " from to effect probability\n", - "0 x0 x5 0.515510 0.12\n", - "1 x0 x1 0.477885 0.11\n", - "2 x0 x4 0.494946 0.11\n", - "3 x2 x1 0.482657 0.02\n", - "4 x2 x4 -0.490889 0.02\n", - "5 x3 x0 0.511008 0.01\n", - "6 x3 x1 0.653876 0.01\n", - "7 x3 x2 0.790837 0.01\n", - "8 x3 x4 -0.126227 0.01\n", - "9 x3 x5 0.265528 0.01" + " from to effect probability\n", + "0 x0 x5 0.518064 0.12\n", + "1 x0 x1 0.504613 0.11\n", + "2 x0 x4 0.479543 0.11\n", + "3 x2 x1 0.508531 0.02\n", + "4 x2 x4 -0.476555 0.02\n", + "5 x3 x0 0.490217 0.01\n", + "6 x3 x1 0.630292 0.01\n", + "7 x4 x1 0.097063 0.01\n", + "8 x3 x2 0.796101 0.01\n", + "9 x1 x4 0.089596 0.01\n", + "10 x3 x4 -0.151733 0.01\n", + "11 x3 x5 0.254280 0.01" ] }, "execution_count": 15, @@ -954,38 +1002,38 @@ " \n", " \n", " \n", - " 7\n", + " 8\n", " x3\n", " x2\n", - " 0.790837\n", + " 0.796101\n", " 0.01\n", " \n", " \n", " 6\n", " x3\n", " x1\n", - " 0.653876\n", + " 0.630292\n", " 0.01\n", " \n", " \n", " 0\n", " x0\n", " x5\n", - " 0.515510\n", + " 0.518064\n", " 0.12\n", " \n", " \n", - " 5\n", - " x3\n", - " x0\n", - " 0.511008\n", - " 0.01\n", + " 3\n", + " x2\n", + " x1\n", + " 0.508531\n", + " 0.02\n", " \n", " \n", - " 2\n", + " 1\n", " x0\n", - " x4\n", - " 0.494946\n", + " x1\n", + " 0.504613\n", " 0.11\n", " \n", " \n", @@ -994,11 +1042,11 @@ ], "text/plain": [ " from to effect probability\n", - "7 x3 x2 0.790837 0.01\n", - "6 x3 x1 0.653876 0.01\n", - "0 x0 x5 0.515510 0.12\n", - "5 x3 x0 0.511008 0.01\n", - "2 x0 x4 0.494946 0.11" + "8 x3 x2 0.796101 0.01\n", + "6 x3 x1 0.630292 0.01\n", + "0 x0 x5 0.518064 0.12\n", + "3 x2 x1 0.508531 0.02\n", + "1 x0 x1 0.504613 0.11" ] }, "execution_count": 16, @@ -1052,35 +1100,35 @@ " 5\n", " x3\n", " x0\n", - " 0.511008\n", + " 0.490217\n", " 0.01\n", " \n", " \n", " 6\n", " x3\n", " x1\n", - " 0.653876\n", + " 0.630292\n", " 0.01\n", " \n", " \n", " 7\n", - " x3\n", - " x2\n", - " 0.790837\n", + " x4\n", + " x1\n", + " 0.097063\n", " 0.01\n", " \n", " \n", " 8\n", " x3\n", - " x4\n", - " -0.126227\n", + " x2\n", + " 0.796101\n", " 0.01\n", " \n", " \n", " 9\n", - " x3\n", - " x5\n", - " 0.265528\n", + " x1\n", + " x4\n", + " 0.089596\n", " 0.01\n", " \n", " \n", @@ -1089,11 +1137,11 @@ ], "text/plain": [ " from to effect probability\n", - "5 x3 x0 0.511008 0.01\n", - "6 x3 x1 0.653876 0.01\n", - "7 x3 x2 0.790837 0.01\n", - "8 x3 x4 -0.126227 0.01\n", - "9 x3 x5 0.265528 0.01" + "5 x3 x0 0.490217 0.01\n", + "6 x3 x1 0.630292 0.01\n", + "7 x4 x1 0.097063 0.01\n", + "8 x3 x2 0.796101 0.01\n", + "9 x1 x4 0.089596 0.01" ] }, "execution_count": 17, @@ -1154,21 +1202,28 @@ " 1\n", " x0\n", " x1\n", - " 0.477885\n", + " 0.504613\n", " 0.11\n", " \n", " \n", " 3\n", " x2\n", " x1\n", - " 0.482657\n", + " 0.508531\n", " 0.02\n", " \n", " \n", " 6\n", " x3\n", " x1\n", - " 0.653876\n", + " 0.630292\n", + " 0.01\n", + " \n", + " \n", + " 7\n", + " x4\n", + " x1\n", + " 0.097063\n", " 0.01\n", " \n", " \n", @@ -1177,9 +1232,10 @@ ], "text/plain": [ " from to effect probability\n", - "1 x0 x1 0.477885 0.11\n", - "3 x2 x1 0.482657 0.02\n", - "6 x3 x1 0.653876 0.01" + "1 x0 x1 0.504613 0.11\n", + "3 x2 x1 0.508531 0.02\n", + "6 x3 x1 0.630292 0.01\n", + "7 x4 x1 0.097063 0.01" ] }, "execution_count": 18, @@ -1212,8 +1268,8 @@ "data": { "text/plain": [ "(array([74., 0., 0., 0., 0., 0., 0., 0., 0., 12.]),\n", - " array([0. , 0.052, 0.103, 0.155, 0.206, 0.258, 0.309, 0.361, 0.412,\n", - " 0.464, 0.516]),\n", + " array([0. , 0.054, 0.108, 0.161, 0.215, 0.269, 0.323, 0.377, 0.431,\n", + " 0.484, 0.538]),\n", " )" ] }, @@ -1223,7 +1279,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -1297,20 +1353,14 @@ " \n", " \n", " 0\n", - " [3, 1]\n", - " 0.028621\n", - " 0.23\n", - " \n", - " \n", - " 1\n", " [3, 0, 1]\n", - " 0.255185\n", + " 0.263068\n", " 0.11\n", " \n", " \n", - " 2\n", + " 1\n", " [3, 2, 1]\n", - " 0.372204\n", + " 0.404828\n", " 0.02\n", " \n", " \n", @@ -1319,9 +1369,8 @@ ], "text/plain": [ " path effect probability\n", - "0 [3, 1] 0.028621 0.23\n", - "1 [3, 0, 1] 0.255185 0.11\n", - "2 [3, 2, 1] 0.372204 0.02" + "0 [3, 0, 1] 0.263068 0.11\n", + "1 [3, 2, 1] 0.404828 0.02" ] }, "execution_count": 20, @@ -1346,7 +1395,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -1360,7 +1409,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.8.10" }, "toc": { "base_numbering": 1, diff --git a/examples/LongitudinalLiNGAM.ipynb b/examples/LongitudinalLiNGAM.ipynb index c970030..2bb5243 100644 --- a/examples/LongitudinalLiNGAM.ipynb +++ b/examples/LongitudinalLiNGAM.ipynb @@ -173,7 +173,7 @@ "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 3, @@ -287,7 +287,7 @@ "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 4, @@ -394,7 +394,7 @@ "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -580,7 +580,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -592,7 +592,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -1158,343 +1158,343 @@ " 0\n", " x1(1)\n", " x0(1)\n", - " 0.356312\n", + " 0.257084\n", " 1.00\n", " \n", " \n", " 1\n", " x4(1)\n", " x4(2)\n", - " -0.312503\n", + " -0.278507\n", " 1.00\n", " \n", " \n", " 2\n", - " x1(1)\n", + " x3(1)\n", " x4(2)\n", - " 0.402765\n", + " 0.185780\n", " 1.00\n", " \n", " \n", " 3\n", - " x4(1)\n", - " x0(1)\n", - " -0.605405\n", + " x1(1)\n", + " x4(2)\n", + " 0.351397\n", " 1.00\n", " \n", " \n", " 4\n", - " x3(1)\n", - " x1(1)\n", - " 0.380285\n", + " x2(2)\n", + " x3(2)\n", + " -0.428210\n", " 1.00\n", " \n", " \n", " 5\n", - " x2(2)\n", + " x3(1)\n", " x3(2)\n", - " -0.422725\n", + " -0.161284\n", " 1.00\n", " \n", " \n", " 6\n", - " x1(1)\n", + " x2(1)\n", " x3(2)\n", - " -0.606700\n", + " 0.495256\n", " 1.00\n", " \n", " \n", " 7\n", " x1(1)\n", - " x4(1)\n", - " -0.360513\n", + " x3(2)\n", + " -0.579338\n", " 1.00\n", " \n", " \n", " 8\n", - " x3(1)\n", - " x2(2)\n", - " 0.638816\n", + " x0(1)\n", + " x3(2)\n", + " 0.186140\n", " 1.00\n", " \n", " \n", " 9\n", - " x1(1)\n", + " x3(1)\n", " x2(2)\n", - " 0.483889\n", + " 0.400577\n", " 1.00\n", " \n", " \n", " 10\n", - " x0(1)\n", + " x1(1)\n", " x2(2)\n", - " 0.361587\n", + " 0.326661\n", " 1.00\n", " \n", " \n", " 11\n", + " x0(1)\n", " x2(2)\n", - " x1(2)\n", - " -0.648662\n", + " 0.161875\n", " 1.00\n", " \n", " \n", " 12\n", - " x0(1)\n", + " x2(2)\n", " x1(2)\n", - " -0.545148\n", + " -0.692908\n", " 1.00\n", " \n", " \n", " 13\n", - " x3(1)\n", - " x0(2)\n", - " -0.294724\n", + " x0(1)\n", + " x1(2)\n", + " -0.563879\n", " 1.00\n", " \n", " \n", " 14\n", - " x1(1)\n", - " x2(1)\n", - " 0.371357\n", - " 0.99\n", + " x4(2)\n", + " x1(2)\n", + " 0.476373\n", + " 1.00\n", " \n", " \n", " 15\n", - " x4(2)\n", - " x1(2)\n", - " 0.410175\n", - " 0.97\n", + " x3(1)\n", + " x0(2)\n", + " -0.495518\n", + " 1.00\n", " \n", " \n", " 16\n", - " x3(1)\n", - " x4(2)\n", - " 0.378325\n", - " 0.96\n", + " x4(1)\n", + " x0(1)\n", + " -0.586968\n", + " 1.00\n", " \n", " \n", " 17\n", " x3(1)\n", - " x3(2)\n", - " -0.331722\n", - " 0.96\n", + " x1(1)\n", + " 0.388875\n", + " 1.00\n", " \n", " \n", " 18\n", - " x2(1)\n", - " x3(2)\n", - " 0.312832\n", - " 0.96\n", + " x0(1)\n", + " x0(2)\n", + " 0.202197\n", + " 1.00\n", " \n", " \n", " 19\n", - " x0(1)\n", + " x1(1)\n", " x0(2)\n", - " 0.280881\n", - " 0.92\n", + " 0.191862\n", + " 1.00\n", " \n", " \n", " 20\n", - " x0(2)\n", - " x4(2)\n", - " 0.251346\n", - " 0.88\n", + " x1(1)\n", + " x4(1)\n", + " -0.356674\n", + " 1.00\n", " \n", " \n", " 21\n", - " x0(2)\n", - " x2(2)\n", - " 0.252320\n", - " 0.85\n", + " x1(1)\n", + " x2(1)\n", + " 0.357268\n", + " 1.00\n", " \n", " \n", " 22\n", - " x4(1)\n", - " x0(2)\n", - " -0.197740\n", - " 0.72\n", + " x1(1)\n", + " x1(2)\n", + " -0.100172\n", + " 0.99\n", " \n", " \n", " 23\n", - " x4(1)\n", - " x2(2)\n", - " -0.247571\n", - " 0.61\n", + " x2(1)\n", + " x1(2)\n", + " 0.169769\n", + " 0.99\n", " \n", " \n", " 24\n", - " x0(1)\n", - " x4(2)\n", - " 0.164835\n", - " 0.57\n", + " x3(1)\n", + " x4(1)\n", + " -0.108293\n", + " 0.98\n", " \n", " \n", " 25\n", - " x0(1)\n", + " x4(1)\n", " x3(2)\n", - " 0.180850\n", - " 0.50\n", + " -0.158863\n", + " 0.98\n", " \n", " \n", " 26\n", " x2(1)\n", - " x0(2)\n", - " 0.180950\n", - " 0.49\n", + " x2(2)\n", + " -0.064596\n", + " 0.97\n", " \n", " \n", " 27\n", - " x3(1)\n", " x0(1)\n", - " 0.204589\n", - " 0.46\n", + " x4(2)\n", + " -0.146124\n", + " 0.97\n", " \n", " \n", " 28\n", " x3(1)\n", - " x1(2)\n", - " -0.216301\n", - " 0.36\n", + " x0(1)\n", + " 0.080405\n", + " 0.97\n", " \n", " \n", " 29\n", + " x3(1)\n", " x2(1)\n", - " x1(2)\n", - " 0.248526\n", - " 0.35\n", + " 0.032170\n", + " 0.94\n", " \n", " \n", " 30\n", - " x1(1)\n", - " x1(2)\n", - " -0.215555\n", - " 0.35\n", + " x2(1)\n", + " x4(2)\n", + " -0.099157\n", + " 0.94\n", " \n", " \n", " 31\n", - " x4(1)\n", - " x3(2)\n", - " -0.192516\n", - " 0.30\n", + " x3(1)\n", + " x1(2)\n", + " 0.079244\n", + " 0.93\n", " \n", " \n", " 32\n", + " x4(1)\n", " x0(2)\n", - " x3(2)\n", - " -0.197880\n", - " 0.30\n", + " -0.005440\n", + " 0.92\n", " \n", " \n", " 33\n", - " x4(1)\n", - " x2(1)\n", - " -0.145828\n", - " 0.27\n", + " x0(2)\n", + " x4(2)\n", + " 0.261939\n", + " 0.91\n", " \n", " \n", " 34\n", " x2(1)\n", - " x4(1)\n", - " -0.144632\n", - " 0.21\n", + " x0(2)\n", + " 0.019144\n", + " 0.91\n", " \n", " \n", " 35\n", - " x1(1)\n", " x0(2)\n", - " 0.162793\n", - " 0.17\n", + " x1(2)\n", + " -0.029275\n", + " 0.90\n", " \n", " \n", " 36\n", - " x2(1)\n", - " x4(2)\n", - " 0.184265\n", - " 0.16\n", + " x4(1)\n", + " x1(2)\n", + " -0.014277\n", + " 0.90\n", " \n", " \n", " 37\n", - " x4(2)\n", - " x3(2)\n", - " -0.185479\n", - " 0.15\n", + " x4(1)\n", + " x2(2)\n", + " -0.019646\n", + " 0.85\n", " \n", " \n", " 38\n", - " x4(2)\n", - " x2(2)\n", - " 0.147407\n", - " 0.11\n", + " x0(2)\n", + " x3(2)\n", + " -0.106739\n", + " 0.84\n", " \n", " \n", " 39\n", - " x4(1)\n", - " x1(2)\n", - " 0.382785\n", - " 0.10\n", + " x0(2)\n", + " x2(2)\n", + " 0.250640\n", + " 0.80\n", " \n", " \n", " 40\n", - " x3(1)\n", " x4(1)\n", - " -0.133301\n", - " 0.09\n", + " x2(1)\n", + " -0.169832\n", + " 0.24\n", " \n", " \n", " 41\n", - " x3(2)\n", - " x1(2)\n", - " -0.190639\n", - " 0.09\n", + " x2(1)\n", + " x0(1)\n", + " 0.015604\n", + " 0.20\n", " \n", " \n", " 42\n", - " x3(1)\n", - " x2(1)\n", - " -0.141276\n", - " 0.08\n", + " x4(2)\n", + " x3(2)\n", + " -0.147539\n", + " 0.18\n", " \n", " \n", " 43\n", " x2(1)\n", - " x0(1)\n", - " -0.165738\n", - " 0.07\n", + " x4(1)\n", + " -0.171814\n", + " 0.11\n", " \n", " \n", " 44\n", - " x0(2)\n", - " x1(2)\n", - " -0.183096\n", - " 0.05\n", + " x4(2)\n", + " x2(2)\n", + " 0.155502\n", + " 0.07\n", " \n", " \n", " 45\n", - " x2(1)\n", - " x2(2)\n", - " 0.212210\n", - " 0.04\n", + " x3(2)\n", + " x1(2)\n", + " -0.155433\n", + " 0.05\n", " \n", " \n", " 46\n", - " x2(2)\n", - " x4(2)\n", - " 0.112127\n", + " x1(2)\n", + " x3(2)\n", + " -0.174134\n", " 0.02\n", " \n", " \n", " 47\n", - " x1(2)\n", - " x3(2)\n", - " -0.166523\n", - " 0.02\n", + " x2(2)\n", + " x4(2)\n", + " 0.045734\n", + " 0.01\n", " \n", " \n", " 48\n", " x3(2)\n", " x4(2)\n", - " -0.173216\n", + " -0.146344\n", " 0.01\n", " \n", " \n", @@ -1503,55 +1503,55 @@ ], "text/plain": [ " from to effect probability\n", - "0 x1(1) x0(1) 0.356312 1.00\n", - "1 x4(1) x4(2) -0.312503 1.00\n", - "2 x1(1) x4(2) 0.402765 1.00\n", - "3 x4(1) x0(1) -0.605405 1.00\n", - "4 x3(1) x1(1) 0.380285 1.00\n", - "5 x2(2) x3(2) -0.422725 1.00\n", - "6 x1(1) x3(2) -0.606700 1.00\n", - "7 x1(1) x4(1) -0.360513 1.00\n", - "8 x3(1) x2(2) 0.638816 1.00\n", - "9 x1(1) x2(2) 0.483889 1.00\n", - "10 x0(1) x2(2) 0.361587 1.00\n", - "11 x2(2) x1(2) -0.648662 1.00\n", - "12 x0(1) x1(2) -0.545148 1.00\n", - "13 x3(1) x0(2) -0.294724 1.00\n", - "14 x1(1) x2(1) 0.371357 0.99\n", - "15 x4(2) x1(2) 0.410175 0.97\n", - "16 x3(1) x4(2) 0.378325 0.96\n", - "17 x3(1) x3(2) -0.331722 0.96\n", - "18 x2(1) x3(2) 0.312832 0.96\n", - "19 x0(1) x0(2) 0.280881 0.92\n", - "20 x0(2) x4(2) 0.251346 0.88\n", - "21 x0(2) x2(2) 0.252320 0.85\n", - "22 x4(1) x0(2) -0.197740 0.72\n", - "23 x4(1) x2(2) -0.247571 0.61\n", - "24 x0(1) x4(2) 0.164835 0.57\n", - "25 x0(1) x3(2) 0.180850 0.50\n", - "26 x2(1) x0(2) 0.180950 0.49\n", - "27 x3(1) x0(1) 0.204589 0.46\n", - "28 x3(1) x1(2) -0.216301 0.36\n", - "29 x2(1) x1(2) 0.248526 0.35\n", - "30 x1(1) x1(2) -0.215555 0.35\n", - "31 x4(1) x3(2) -0.192516 0.30\n", - "32 x0(2) x3(2) -0.197880 0.30\n", - "33 x4(1) x2(1) -0.145828 0.27\n", - "34 x2(1) x4(1) -0.144632 0.21\n", - "35 x1(1) x0(2) 0.162793 0.17\n", - "36 x2(1) x4(2) 0.184265 0.16\n", - "37 x4(2) x3(2) -0.185479 0.15\n", - "38 x4(2) x2(2) 0.147407 0.11\n", - "39 x4(1) x1(2) 0.382785 0.10\n", - "40 x3(1) x4(1) -0.133301 0.09\n", - "41 x3(2) x1(2) -0.190639 0.09\n", - "42 x3(1) x2(1) -0.141276 0.08\n", - "43 x2(1) x0(1) -0.165738 0.07\n", - "44 x0(2) x1(2) -0.183096 0.05\n", - "45 x2(1) x2(2) 0.212210 0.04\n", - "46 x2(2) x4(2) 0.112127 0.02\n", - "47 x1(2) x3(2) -0.166523 0.02\n", - "48 x3(2) x4(2) -0.173216 0.01" + "0 x1(1) x0(1) 0.257084 1.00\n", + "1 x4(1) x4(2) -0.278507 1.00\n", + "2 x3(1) x4(2) 0.185780 1.00\n", + "3 x1(1) x4(2) 0.351397 1.00\n", + "4 x2(2) x3(2) -0.428210 1.00\n", + "5 x3(1) x3(2) -0.161284 1.00\n", + "6 x2(1) x3(2) 0.495256 1.00\n", + "7 x1(1) x3(2) -0.579338 1.00\n", + "8 x0(1) x3(2) 0.186140 1.00\n", + "9 x3(1) x2(2) 0.400577 1.00\n", + "10 x1(1) x2(2) 0.326661 1.00\n", + "11 x0(1) x2(2) 0.161875 1.00\n", + "12 x2(2) x1(2) -0.692908 1.00\n", + "13 x0(1) x1(2) -0.563879 1.00\n", + "14 x4(2) x1(2) 0.476373 1.00\n", + "15 x3(1) x0(2) -0.495518 1.00\n", + "16 x4(1) x0(1) -0.586968 1.00\n", + "17 x3(1) x1(1) 0.388875 1.00\n", + "18 x0(1) x0(2) 0.202197 1.00\n", + "19 x1(1) x0(2) 0.191862 1.00\n", + "20 x1(1) x4(1) -0.356674 1.00\n", + "21 x1(1) x2(1) 0.357268 1.00\n", + "22 x1(1) x1(2) -0.100172 0.99\n", + "23 x2(1) x1(2) 0.169769 0.99\n", + "24 x3(1) x4(1) -0.108293 0.98\n", + "25 x4(1) x3(2) -0.158863 0.98\n", + "26 x2(1) x2(2) -0.064596 0.97\n", + "27 x0(1) x4(2) -0.146124 0.97\n", + "28 x3(1) x0(1) 0.080405 0.97\n", + "29 x3(1) x2(1) 0.032170 0.94\n", + "30 x2(1) x4(2) -0.099157 0.94\n", + "31 x3(1) x1(2) 0.079244 0.93\n", + "32 x4(1) x0(2) -0.005440 0.92\n", + "33 x0(2) x4(2) 0.261939 0.91\n", + "34 x2(1) x0(2) 0.019144 0.91\n", + "35 x0(2) x1(2) -0.029275 0.90\n", + "36 x4(1) x1(2) -0.014277 0.90\n", + "37 x4(1) x2(2) -0.019646 0.85\n", + "38 x0(2) x3(2) -0.106739 0.84\n", + "39 x0(2) x2(2) 0.250640 0.80\n", + "40 x4(1) x2(1) -0.169832 0.24\n", + "41 x2(1) x0(1) 0.015604 0.20\n", + "42 x4(2) x3(2) -0.147539 0.18\n", + "43 x2(1) x4(1) -0.171814 0.11\n", + "44 x4(2) x2(2) 0.155502 0.07\n", + "45 x3(2) x1(2) -0.155433 0.05\n", + "46 x1(2) x3(2) -0.174134 0.02\n", + "47 x2(2) x4(2) 0.045734 0.01\n", + "48 x3(2) x4(2) -0.146344 0.01" ] }, "execution_count": 23, @@ -1611,39 +1611,39 @@ " \n", " \n", " \n", - " 8\n", - " x3(1)\n", - " x2(2)\n", - " 0.638816\n", - " 1.00\n", - " \n", - " \n", - " 9\n", - " x1(1)\n", - " x2(2)\n", - " 0.483889\n", - " 1.00\n", + " 6\n", + " x2(1)\n", + " x3(2)\n", + " 0.495256\n", + " 1.0\n", " \n", " \n", - " 15\n", + " 14\n", " x4(2)\n", " x1(2)\n", - " 0.410175\n", - " 0.97\n", + " 0.476373\n", + " 1.0\n", " \n", " \n", - " 2\n", + " 9\n", + " x3(1)\n", + " x2(2)\n", + " 0.400577\n", + " 1.0\n", + " \n", + " \n", + " 17\n", + " x3(1)\n", " x1(1)\n", - " x4(2)\n", - " 0.402765\n", - " 1.00\n", + " 0.388875\n", + " 1.0\n", " \n", " \n", - " 39\n", - " x4(1)\n", - " x1(2)\n", - " 0.382785\n", - " 0.10\n", + " 21\n", + " x1(1)\n", + " x2(1)\n", + " 0.357268\n", + " 1.0\n", " \n", " \n", "\n", @@ -1651,11 +1651,11 @@ ], "text/plain": [ " from to effect probability\n", - "8 x3(1) x2(2) 0.638816 1.00\n", - "9 x1(1) x2(2) 0.483889 1.00\n", - "15 x4(2) x1(2) 0.410175 0.97\n", - "2 x1(1) x4(2) 0.402765 1.00\n", - "39 x4(1) x1(2) 0.382785 0.10" + "6 x2(1) x3(2) 0.495256 1.0\n", + "14 x4(2) x1(2) 0.476373 1.0\n", + "9 x3(1) x2(2) 0.400577 1.0\n", + "17 x3(1) x1(1) 0.388875 1.0\n", + "21 x1(1) x2(1) 0.357268 1.0" ] }, "execution_count": 24, @@ -1708,39 +1708,39 @@ " \n", " \n", " \n", - " 13\n", + " 15\n", " x3(1)\n", " x0(2)\n", - " -0.294724\n", + " -0.495518\n", " 1.00\n", " \n", " \n", - " 19\n", + " 18\n", " x0(1)\n", " x0(2)\n", - " 0.280881\n", - " 0.92\n", + " 0.202197\n", + " 1.00\n", " \n", " \n", - " 22\n", - " x4(1)\n", + " 19\n", + " x1(1)\n", " x0(2)\n", - " -0.197740\n", - " 0.72\n", + " 0.191862\n", + " 1.00\n", " \n", " \n", - " 26\n", - " x2(1)\n", + " 32\n", + " x4(1)\n", " x0(2)\n", - " 0.180950\n", - " 0.49\n", + " -0.005440\n", + " 0.92\n", " \n", " \n", - " 35\n", - " x1(1)\n", + " 34\n", + " x2(1)\n", " x0(2)\n", - " 0.162793\n", - " 0.17\n", + " 0.019144\n", + " 0.91\n", " \n", " \n", "\n", @@ -1748,11 +1748,11 @@ ], "text/plain": [ " from to effect probability\n", - "13 x3(1) x0(2) -0.294724 1.00\n", - "19 x0(1) x0(2) 0.280881 0.92\n", - "22 x4(1) x0(2) -0.197740 0.72\n", - "26 x2(1) x0(2) 0.180950 0.49\n", - "35 x1(1) x0(2) 0.162793 0.17" + "15 x3(1) x0(2) -0.495518 1.00\n", + "18 x0(1) x0(2) 0.202197 1.00\n", + "19 x1(1) x0(2) 0.191862 1.00\n", + "32 x4(1) x0(2) -0.005440 0.92\n", + "34 x2(1) x0(2) 0.019144 0.91" ] }, "execution_count": 25, @@ -1779,9 +1779,9 @@ { "data": { "text/plain": [ - "(array([ 1., 4., 8., 13., 20., 18., 16., 12., 5., 3.]),\n", - " array([0.153, 0.192, 0.232, 0.272, 0.312, 0.352, 0.392, 0.431, 0.471,\n", - " 0.511, 0.551]),\n", + "(array([ 6., 8., 13., 12., 19., 16., 9., 10., 6., 1.]),\n", + " array([0.026, 0.057, 0.088, 0.119, 0.15 , 0.181, 0.212, 0.243, 0.274,\n", + " 0.304, 0.335]),\n", " )" ] }, @@ -1791,7 +1791,7 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAD7CAYAAACCEpQdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8WgzjOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAVsElEQVR4nO3de4ydd33n8feMk9gOdrgMwy03b7H9VQRpXdyoywoWrRRIiZoQLmmCIKEL2wSCsHaJtV1AS6OuEkUY1BACigsqubTKVm4rJ6RRKEhNm0CjJQsWhO5+40ASu3YihoHKMUtiZ2b2j/MMnAxzOZfnzHlmfu+XZPk5z+33nec853Oe81xHZmZmkCSVZXTYBUiSlp/hL0kFMvwlqUCGvyQVyPCXpAKdMOwCOrAWOAd4Epgaci2StFKsAV4JfAt4du7AlRD+5wD3D7sISVqh3gg8MLfnSgj/JwF++tOfMT3d+TUJY2MbmJw8OrCietXUuqC5tVlXd5paFzS3ttVY1+joCC9+8QugytC5VkL4TwFMT890Ff6z0zRRU+uC5tZmXd1pal3Q3NpWcV3z7i73gK8kFcjwl6QCGf6SVCDDX5IKtOQB34gYA24HXg0cA/YDV2bmRET8W2A3sB54HHhvZv5onnmcDHwZ2A48B+zMzLvr+iMkSd3pZMt/BvhUZkZmng38ALg+IkaBPwc+nJlbgX8Erl9gHjuBI5m5GbgA+FJEbOi/fElSL5YM/8z8SWbe19brQeBMWlvxz2Tm7MUDNwO/t8BsLqH1C4HM3A88BLy1x5olSX3q6jz/amv/Q8BdwBnAE7PDMvPHETEaES/JzJ/MmfR54wIHgNO7aXtsrPsfCuPjG7ueZjk0tS5obm1L1XXs+BQnnbhmmar5pRe+6OShtLuUpr6P0NzaSqur24u8PgccBW4C3l5/OQubnDza1cUO4+MbmZh4eoAV9aapdUFza+ukrvHxjVxw9Z3LVNEvfeUzb2vcMmvq+wjNrW011jU6OrLoRnPHZ/tExKeBLcAlmTlNa+v9zLbhLwWm59nqZ+64tH4JHOy0bUlSvToK/4i4jtY+/osyc/bucP8bWB8Rb6hefxDYs8As9gBXVvPaQutmbff2WrQkqT+dnOr5GuBjwCPANyMC4LHMfHtEXAbsjoh1VKd6tk23Dzg/Mw8Du4BbIuJRWveZuCIzm/cbS5IKsWT4Z+b3gZEFhn0TOHuBYdvaun8GXNxbiZKkunmFryQVyPCXpAIZ/pJUIMNfkgpk+EtSgQx/SSqQ4S9JBTL8JalAhr8kFcjwl6QCGf6SVCDDX5IKZPhLUoEMf0kqkOEvSQXq9hm+ktocOz41tAd/P/Psczx95OdDaVsrX0fhXz2/953AJuDszHw4IjYBe9tGexFwSma+ZJ7prwGuAg5Xvb6RmR/utWipKU46cc1QHhwPrYfH+zg89arTLf+9wGeB+2d7ZObjwLbZ1xFxwxLzuy0zd3ZboCSpfh2Ff2Y+AFA9v/dXRMRJwHuA82qrTJI0MHXt878QOJSZ315knEsj4i3AU8AfZeY/1dS2JKlLdYX/+4E/W2T4zcC1mXk8It4M3BkRZ2XmZKcNjI1t6LqoYR2IW0pT64Lm1tbUuoZtoeXS5OXV1NpKq6vv8I+IU4E3AZctNE5mPtXW/bWIOAi8FviHTtuZnDzK9PRMx3WNj29kYqJ5h8OaWhc0t7ZO6mrqB3fQ5lsuTX0fobm1rca6RkdHFt1oruM8//cBf7vYVnz1BTHbvY3WWUNZQ9uSpB50eqrnjcA7gFcAX4+Iycx8TTX494Ed80xzD/DJzHwIuC4itgNTwDHgsvZfA5Kk5dXp2T47mCfgq2FbF+h/flv3+3qqTpI0EN7eQZIKZPhLUoEMf0kqkOEvSQUy/CWpQIa/JBXI8JekAhn+klQgw1+SCmT4S1KBDH9JKpAPcJdWqMUeHj/IW1z74PjVwfCXVqhhPTzeB8evDu72kaQCGf6SVCDDX5IKZPhLUoE6fYzjp4F30nr27tmZ+XDV/3HgmeofwB9m5lfnmf5k4MvAduA5YGdm3t1v8ZKk3nR6ts9e4LPA/fMMe9fsl8EidgJHMnNzRGwB7o+IzZl5tPNSJUl16Wi3T2Y+kJkH+2jnEmB3Na/9wEPAW/uYnySpD3Wc5/8XETECPAB8PDP/dZ5xzgCeaHt9ADi9hrYlST3oN/zfmJkHI2ItcANwE/Devquax9jYhq6nGeRVjv1oal3Q3NqaWlep+nk/mvpellZXX+E/uysoM5+NiC8Ady0w6gHgTGCien0G8PfdtDU5eZTp6ZmOxx8f38jERPOuQ2xqXdDc2jqpq6kf3NWq1/VkJa9jw9BPXaOjI4tuNPd8qmdEvCAiXlh1jwCXAvsWGH0PcGU17hbgHODeXtuWJPWn01M9bwTeAbwC+HpETAIXAH8dEWuANcA/A1e1TbMPOD8zDwO7gFsi4lFgCrgiM5v3NStJhego/DNzB7BjnkG/ucg029q6fwZc3G1xkqTB8ApfSSqQ4S9JBTL8JalAhr8kFcjwl6QCGf6SVCDDX5IKZPhLUoEMf0kqkOEvSQUy/CWpQIa/JBXI8JekAhn+klQgw1+SCmT4S1KB+n2Au/Q8G09Zz7q19a9WPqNXqlenj3H8NPBOYBNwdmY+HBFjwO3Aq4FjwH7gysycmGf6W4BzgR9XvfZk5rV9V6/GWbf2BC64+s5lb/crn3nbsrcprWSdbqLtBT4L3N/Wbwb4VGbeBxARu4DrgQ8sMI/rM/Om3sqUJNWp02f4PgAQEe39fgLc1zbag8CHaqxNkjQgtRzwjYhRWsF/1yKjfTQivhcReyPirDralST1pq4jc58DjgIL7db5BPBkZk5HxOXAvRHxa5k51WkDY2Mbui6qqQcJm1oXNLs2NUc/60lT17HS6uo7/KuDwVuACzJzer5xMvNQW/dtEfEnwGnAE522Mzl5lOnpmY7rGh/fyMTE0x2Pv1yaWhfUU1tTP0CqV6/rSVPX/9VY1+joyKIbzX3t9omI64DtwEWZ+ewi453a1n0eMAUcWmh8SdJgdXqq543AO4BXAF+PiEng94CPAY8A36wOBj+WmW+vptkHnJ+Zh4FbI+LlwDRwBLgwM5+r+W+RJHWo07N9dgA75hk0ssg029q6z+26MknSwHiFr6SuHDs+NbQDvs88+xxPH/l5z9Prlwx/SV056cQ1Q7mKG1pXcjfvsOzK5I3dJKlAhr8kFcjwl6QCGf6SVCDDX5IKZPhLUoEMf0kqkOEvSQUy/CWpQIa/JBXI8JekAhn+klQgw1+SCmT4S1KBDH9JKtCS9/OvHtD+TmATcHZmPlz13wrcCowBk8Dlmbl/nunXADcCvwPMANdn5pfq+gMkSd3rZMt/L/DvgSfm9L8Z+HxmbgU+D+xeYPr3AJuBLcDrgWsiYlMvxUqS6rFk+GfmA5l5sL1fRLwMeB1wR9XrDuB1ETE+zywuAb6YmdOZOUHry+TivqqWJPWl133+pwOHMnMKoPr/cNV/rjN4/q+GAwuMJ0laJivmGb5jYxu6nqafB0UPUlPrgmbXJsHg1tGmrvuDqqvX8D8InBoRazJzqjqo+6qq/1wHgDOBb1Wv5/4S6Mjk5FGmp2c6Hn98fCMTE8171HNT64J6amvqB0irxyA+P039XPZT1+joyKIbzT3t9snMHwH7gHdXvd4NfKfapz/XHuAPImK0OiZwEfBXvbQrSarHkuEfETdGxL8ApwFfj4jvV4M+CHwkIh4BPlK9np3mnoj4rerl7cAPgf3Ag8AfZ+ZjNf4NkqQuLbnbJzN3ADvm6f9/gd9eYJrz27qngA/1UaMkqWZe4StJBTL8JalAhr8kFcjwl6QCGf6SVCDDX5IKZPhLUoEMf0kqkOEvSQUy/CWpQIa/JBXI8JekAhn+klQgw1+SCmT4S1KBVswzfNW5jaesZ93a3t5aH8MolcHwX4XWrT2BC66+cyhtf+UzbxtKu5K601f4R8QmYG9brxcBp2TmS+aMdw1wFXC46vWNzPxwP21LknrXV/hn5uPAttnXEXHDIvO8LTN39tOeJKkete32iYiTgPcA59U1T0nSYNS5z/9C4FBmfnuB4ZdGxFuAp4A/ysx/qrFtSVIX6gz/9wN/tsCwm4FrM/N4RLwZuDMizsrMyU5nPja2oeuCmnrmSlPrklaCQX1+mvq5HFRdtYR/RJwKvAm4bL7hmflUW/fXIuIg8FrgHzptY3LyKNPTMx3XND6+kYmJpzsef7ksR11NXYmlOgzi87Ma82J0dGTRjea6LvJ6H/C3C23JV18Os93bgE1A1tS2JKlLde32+X1gR3uPiLgH+GRmPgRcFxHbgSngGHBZ+68BSdLyqiX8M3PrPP3Ob+t+Xx3tSJLq4b19JKlAhr8kFcjwl6QCGf6SVCDDX5IKZPhLUoEMf0kqkOEvSQUy/CWpQIa/JBXI8JekAhn+klQgw1+SCmT4S1KBDH9JKpDhL0kFMvwlqUB9P8krIh4Hnqn+AfxhZn51zjgnA18GtgPPATsz8+5+25Yk9aauZ/i+KzMfXmT4TuBIZm6OiC3A/RGxOTOP1tS+JKkLy7Xb5xJgN0Bm7gceAt66TG1Lkuaoa8v/LyJiBHgA+Hhm/uuc4WcAT7S9PgCcXlPbkqQu1RH+b8zMgxGxFrgBuAl4bw3zfZ6xsQ1dTzM+vrHuMmrR1Lqkpjt2fGpgn5/F5nvs+BQnnbhmIO0uZVB/b9/hn5kHq/+fjYgvAHfNM9oB4Exgonp9BvD33bQzOXmU6emZjscfH9/IxMTT3TSxLJajLr9ctFqddOIaLrj6zmVv9yufedtQ8qSfvBgdHVl0o7mvff4R8YKIeGHVPQJcCuybZ9Q9wJXVeFuAc4B7+2lbktS7fg/4vhy4LyK+CzwMbAWuAoiIfRHxqmq8XcCLIuJR4G7gisxs3ma5JBWir90+mflD4DcXGLatrftnwMX9tCVJqo9X+EpSgQx/SSqQ4S9JBTL8JalAhr8kFaiu2ztoHhtPWc+6tb+6iL0IS9KwGf4DtG7tCUO7GlGSFuNuH0kqkOEvSQUy/CWpQIa/JBXI8JekAhn+klQgw1+SCmT4S1KBvMhLkpYwyGcHL2XjKet5+sjPa5+v4S9JSxjWs4OhdcX+IB572Ff4R8QYcDvwauAYsB+4MjMn5ox3C3Au8OOq157MvLaftiVJvet3y38G+FRm3gcQEbuA64EPzDPu9Zl5U5/tSZJq0O8zfH8C3NfW60HgQ/3MU5I0eLXt84+IUVrBf9cCo3w0Iq4EfgB8LDP/TzfzHxvb0HVN3jpZ0mowiCyr84Dv54CjwHy7dj4BPJmZ0xFxOXBvRPxaZk51OvPJyaNMT890XMz4+EYmJgZxmKRzfvlIqkMvWTY6OrLoRnMt5/lHxKeBLcAlmTk9d3hmHprtn5m3ARuA0+poW5LUvb7DPyKuA7YDF2XmswuMc2pb93nAFHCo37YlSb3p91TP1wAfAx4BvhkRAI9l5tsjYh9wfmYeBm6NiJcD08AR4MLMfK6vyiVJPev3bJ/vAyMLDNvW1n1uP+1IkurlvX0kqUCGvyQVyPCXpAIZ/pJUIMNfkgpk+EtSgQx/SSqQ4S9JBTL8JalAhr8kFWjVP8N34ynrWbd21f+ZktSVVZ+K69aeMNQHL0tSE7nbR5IKZPhLUoEMf0kqkOEvSQUy/CWpQH2f7RMRW4FbgTFgErg8M/fPGWcNcCPwO8AMcH1mfqnftiVJvaljy/9m4POZuRX4PLB7nnHeA2wGtgCvB66JiE01tC1J6kG/D3B/GfA64M1VrzuAmyJiPDMn2ka9BPhiZk4DExGxF7gY2NVBM2sARkfnfVTwomanedmL13c9bV2G1bZ/8+pvd5ht+zcvr37yjypD5xqZmZnpuaCI2A7clpmvaev3z8B7M/Pbbf2+B7w/M79Vvf6vwGmZuaODZt4A3N9zkZJUtjcCD8ztuRKu8P0WreKfBKaGXIskrRRrgFfSytBf0W/4HwROjYg1mTlVHdh9VdW/3QHgzLYizgCe6LCNZ5nnW0uStKQfLDSgrwO+mfkjYB/w7qrXu4HvzNnfD7AH+IOIGI2IceAi4K/6aVuS1Ls6zvb5IPCRiHgE+Ej1moi4JyJ+qxrnduCHwH7gQeCPM/OxGtqWJPWgrwO+kqSVySt8JalAhr8kFcjwl6QCGf6SVKCVcJHX83R4I7m3ANcBZwOfy8ydbcOuAa4CDle9vpGZH16muv47cCmti9WOAx/PzK9Ww04GvgxsB54Ddmbm3Q2o6xbgXODH1eh7MvPaZarrPwL/BZimdcHKFzPzxmrYwG4WWENt1zCkdaxt3AC+A3xhdv0f5jq2RF23MLx17BoWeK8Gtbxqqu0W+lxmK3HLv5Mbyf0Q+E8sfO+g2zJzW/Wv7w9lF3X9L+CczPx14P3AX0bE7A1DdgJHMnMzcAHwpYjY0IC6oBWss8ur7w9lF3X9NfAbmbkN+HfA1RHx69WwQd4ssN/aYHjr2OwX425g75xBw1zHFqsLhreOwcLv1aCWVx21QZ/LbEWFf9uN5O6oet0BvK66cOwXMvPRzNxH69u6SXV9NTP/X/Xyu8AIrW9+aN38bnc13n7gIeCtDairdl3UdSQzZ89FPhk4kdZWPrTdLLC6qHAvrZsFNqG22nVaV+W/AXcDj8zpP7R1bIm6atdlXQupfXnVWFvfVlT4A6cDhzJzCqD6/3DVvxuXRsR3I+LvIuL1Q6rrcuAHmfkv1eu5t7w4sMT0y1UXwEcj4nsRsTcizuqzpq7qiogLI+L7tJbNrsz8XjVoEMurrtpgSOtYRPwGcB7wJ/PMY2jr2BJ1wRDXMRZ+r4a+ji1SG/S5zFZa+NfhZuDfVLs4dgF3RsTAtnLnExFvAv4Hv7wtRiMsUNcngM2ZeTbwN8C91c/3ZZGZd1V3jd0KXFbtM26ERWobyjoWEScCfwp8cDZYmqCDuoa5jg09DxaxWG19L7OVFv6/uJEc/GIf4nw3kltQZj6Vmcer7q9V0752ueqqvr3/HLgoM7Nt0OzN72adMd/0y11XZh7K1nMYyMzbgA3AactVV1sdB2gdm/jdqtcgllcttQ1xHXsl8Grgnoh4HPjPtO6p9afV8GGtY4vWNcx1bIn3aqjr2GK11bHMVlT4Z+c3kltQRJza1r0N2ATkQuPXWVdEnAP8JfCubHveQWUPcGU13hbgHODeYdc1Z3mdR+uMoEPLVNdZbd0vBf4DMLtrZSA3C6yjtmGtY5l5IDNfmpmbMnMTcAOt4yJXVKMMZR1bqq4hr2OLvVe1L6+6aqtjma24Uz1p3Tju1oj4JPBTWvuoiYh7gE9m5kMR8QbgfwKnACMRcSnwgWydvnhdtB5CMwUcAy7LzKeWoy7gC8B6YHfb3ovLqn3Fu4BbIuLRqrYrMvPpBtR1a0S8nNYpjUeACzOzjgPpndR1RbRO2z1O6yD0TZn5d9X0twO/TetmgVDvzQL7rW2Y69hihrmOLWaY69hi79WgllcdtfW9zLyxmyQVaEXt9pEk1cPwl6QCGf6SVCDDX5IKZPhLUoEMf0kqkOEvSQUy/CWpQP8fn2pHA1HM2kEAAAAASUVORK5CYII=\n", + "image/png": "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", "text/plain": [ "
" ] @@ -1816,7 +1816,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -1831,13 +1831,6 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" - }, - "widgets": { - "application/vnd.jupyter.widget-state+json": { - "state": {}, - "version_major": 2, - "version_minor": 0 - } } }, "nbformat": 4, diff --git a/examples/MultiGroupDirectLiNGAM.ipynb b/examples/MultiGroupDirectLiNGAM.ipynb index d001990..0f5d99f 100644 --- a/examples/MultiGroupDirectLiNGAM.ipynb +++ b/examples/MultiGroupDirectLiNGAM.ipynb @@ -29,7 +29,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "['1.16.2', '0.24.2', '0.11.1', '1.5.4']\n" + "['1.24.4', '2.0.3', '0.20.1', '1.8.3']\n" ] } ], @@ -181,94 +181,107 @@ { "data": { "image/svg+xml": [ - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "%3\r\n", - "\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "\r\n", - "x0->x1\r\n", - "\r\n", - "\r\n", - "3.00\r\n", - "\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "\r\n", - "x0->x4\r\n", - "\r\n", - "\r\n", - "8.00\r\n", - "\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "\r\n", - "x0->x5\r\n", - "\r\n", - "\r\n", - "4.00\r\n", - "\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "\r\n", - "x2->x1\r\n", - "\r\n", - "\r\n", - "2.00\r\n", - "\r\n", - "\r\n", - "x2->x4\r\n", - "\r\n", - "\r\n", - "-1.00\r\n", - "\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "\r\n", - "x3->x0\r\n", - "\r\n", - "\r\n", - "3.00\r\n", - "\r\n", - "\r\n", - "x3->x2\r\n", - "\r\n", - "\r\n", - "6.00\r\n", - "\r\n", - "\r\n", - "\r\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "x0\n", + "\n", + "x0\n", + "\n", + "\n", + "\n", + "x1\n", + "\n", + "x1\n", + "\n", + "\n", + "\n", + "x0->x1\n", + "\n", + "\n", + "3.00\n", + "\n", + "\n", + "\n", + "x4\n", + "\n", + "x4\n", + "\n", + "\n", + "\n", + "x0->x4\n", + "\n", + "\n", + "8.00\n", + "\n", + "\n", + "\n", + "x5\n", + "\n", + "x5\n", + "\n", + "\n", + "\n", + "x0->x5\n", + "\n", + "\n", + "4.00\n", + "\n", + "\n", + "\n", + "x2\n", + "\n", + "x2\n", + "\n", + "\n", + "\n", + "x2->x1\n", + "\n", + "\n", + "2.00\n", + "\n", + "\n", + "\n", + "x2->x4\n", + "\n", + "\n", + "-1.00\n", + "\n", + "\n", + "\n", + "x3\n", + "\n", + "x3\n", + "\n", + "\n", + "\n", + "x3->x0\n", + "\n", + "\n", + "3.00\n", + "\n", + "\n", + "\n", + "x3->x2\n", + "\n", + "\n", + "6.00\n", + "\n", + "\n", + "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 3, @@ -414,94 +427,107 @@ { "data": { "image/svg+xml": [ - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "%3\r\n", - "\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "\r\n", - "x0->x1\r\n", - "\r\n", - "\r\n", - "3.50\r\n", - "\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "\r\n", - "x0->x4\r\n", - "\r\n", - "\r\n", - "8.50\r\n", - "\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "\r\n", - "x0->x5\r\n", - "\r\n", - "\r\n", - "4.50\r\n", - "\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "\r\n", - "x2->x1\r\n", - "\r\n", - "\r\n", - "2.50\r\n", - "\r\n", - "\r\n", - "x2->x4\r\n", - "\r\n", - "\r\n", - "-1.50\r\n", - "\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "\r\n", - "x3->x0\r\n", - "\r\n", - "\r\n", - "3.50\r\n", - "\r\n", - "\r\n", - "x3->x2\r\n", - "\r\n", - "\r\n", - "6.50\r\n", - "\r\n", - "\r\n", - "\r\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "x0\n", + "\n", + "x0\n", + "\n", + "\n", + "\n", + "x1\n", + "\n", + "x1\n", + "\n", + "\n", + "\n", + "x0->x1\n", + "\n", + "\n", + "3.50\n", + "\n", + "\n", + "\n", + "x4\n", + "\n", + "x4\n", + "\n", + "\n", + "\n", + "x0->x4\n", + "\n", + "\n", + "8.50\n", + "\n", + "\n", + "\n", + "x5\n", + "\n", + "x5\n", + "\n", + "\n", + "\n", + "x0->x5\n", + "\n", + "\n", + "4.50\n", + "\n", + "\n", + "\n", + "x2\n", + "\n", + "x2\n", + "\n", + "\n", + "\n", + "x2->x1\n", + "\n", + "\n", + "2.50\n", + "\n", + "\n", + "\n", + "x2->x4\n", + "\n", + "\n", + "-1.50\n", + "\n", + "\n", + "\n", + "x3\n", + "\n", + "x3\n", + "\n", + "\n", + "\n", + "x3->x0\n", + "\n", + "\n", + "3.50\n", + "\n", + "\n", + "\n", + "x3->x2\n", + "\n", + "\n", + "6.50\n", + "\n", + "\n", + "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -562,7 +588,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 7, @@ -633,99 +659,118 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[0. 0. 0. 3.006 0. 0. ]\n", - " [2.873 0. 1.969 0. 0. 0. ]\n", - " [0. 0. 0. 5.882 0. 0. ]\n", - " [0. 0. 0. 0. 0. 0. ]\n", - " [6.095 0. 0. 0. 0. 0. ]\n", - " [3.967 0. 0. 0. 0. 0. ]]\n" + "[[ 0. 0. 0. 3.006 0. 0. ]\n", + " [ 2.962 0. 2.015 0. 0. 0. ]\n", + " [ 0. 0. 0. 5.97 0. 0. ]\n", + " [ 0. 0. 0. 0. 0. 0. ]\n", + " [ 8.01 0. -1.006 0. 0. 0. ]\n", + " [ 3.998 0. 0. 0. 0. 0. ]]\n" ] }, { "data": { "image/svg+xml": [ - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "%3\r\n", - "\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "\r\n", - "x0->x1\r\n", - "\r\n", - "\r\n", - "2.87\r\n", - "\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "\r\n", - "x0->x4\r\n", - "\r\n", - "\r\n", - "6.09\r\n", - "\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "\r\n", - "x0->x5\r\n", - "\r\n", - "\r\n", - "3.97\r\n", - "\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "\r\n", - "x2->x1\r\n", - "\r\n", - "\r\n", - "1.97\r\n", - "\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "\r\n", - "x3->x0\r\n", - "\r\n", - "\r\n", - "3.01\r\n", - "\r\n", - "\r\n", - "x3->x2\r\n", - "\r\n", - "\r\n", - "5.88\r\n", - "\r\n", - "\r\n", - "\r\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "x0\n", + "\n", + "x0\n", + "\n", + "\n", + "\n", + "x1\n", + "\n", + "x1\n", + "\n", + "\n", + "\n", + "x0->x1\n", + "\n", + "\n", + "2.96\n", + "\n", + "\n", + "\n", + "x4\n", + "\n", + "x4\n", + "\n", + "\n", + "\n", + "x0->x4\n", + "\n", + "\n", + "8.01\n", + "\n", + "\n", + "\n", + "x5\n", + "\n", + "x5\n", + "\n", + "\n", + "\n", + "x0->x5\n", + "\n", + "\n", + "4.00\n", + "\n", + "\n", + "\n", + "x2\n", + "\n", + "x2\n", + "\n", + "\n", + "\n", + "x2->x1\n", + "\n", + "\n", + "2.02\n", + "\n", + "\n", + "\n", + "x2->x4\n", + "\n", + "\n", + "-1.01\n", + "\n", + "\n", + "\n", + "x3\n", + "\n", + "x3\n", + "\n", + "\n", + "\n", + "x3->x0\n", + "\n", + "\n", + "3.01\n", + "\n", + "\n", + "\n", + "x3->x2\n", + "\n", + "\n", + "5.97\n", + "\n", + "\n", + "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 9, @@ -753,110 +798,117 @@ "output_type": "stream", "text": [ "[[ 0. 0. 0. 3.483 0. 0. ]\n", - " [ 3.516 0. 2.466 0.165 0. 0. ]\n", - " [ 0. 0. 0. 6.383 0. 0. ]\n", + " [ 3.526 0. 2.486 0. 0. 0. ]\n", + " [ 0. 0. 0. 6.503 0. 0. ]\n", " [ 0. 0. 0. 0. 0. 0. ]\n", - " [ 8.456 0. -1.471 0. 0. 0. ]\n", - " [ 4.446 0. 0. 0. 0. 0. ]]\n" + " [ 8.478 0. -1.484 0. 0. 0. ]\n", + " [ 4.494 0. 0. 0. 0. 0. ]]\n" ] }, { "data": { "image/svg+xml": [ - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "%3\r\n", - "\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "\r\n", - "x0->x1\r\n", - "\r\n", - "\r\n", - "3.52\r\n", - "\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "\r\n", - "x0->x4\r\n", - "\r\n", - "\r\n", - "8.46\r\n", - "\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "\r\n", - "x0->x5\r\n", - "\r\n", - "\r\n", - "4.45\r\n", - "\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "\r\n", - "x2->x1\r\n", - "\r\n", - "\r\n", - "2.47\r\n", - "\r\n", - "\r\n", - "x2->x4\r\n", - "\r\n", - "\r\n", - "-1.47\r\n", - "\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "\r\n", - "x3->x0\r\n", - "\r\n", - "\r\n", - "3.48\r\n", - "\r\n", - "\r\n", - "x3->x1\r\n", - "\r\n", - "\r\n", - "0.17\r\n", - "\r\n", - "\r\n", - "x3->x2\r\n", - "\r\n", - "\r\n", - "6.38\r\n", - "\r\n", - "\r\n", - "\r\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "x0\n", + "\n", + "x0\n", + "\n", + "\n", + "\n", + "x1\n", + "\n", + "x1\n", + "\n", + "\n", + "\n", + "x0->x1\n", + "\n", + "\n", + "3.53\n", + "\n", + "\n", + "\n", + "x4\n", + "\n", + "x4\n", + "\n", + "\n", + "\n", + "x0->x4\n", + "\n", + "\n", + "8.48\n", + "\n", + "\n", + "\n", + "x5\n", + "\n", + "x5\n", + "\n", + "\n", + "\n", + "x0->x5\n", + "\n", + "\n", + "4.49\n", + "\n", + "\n", + "\n", + "x2\n", + "\n", + "x2\n", + "\n", + "\n", + "\n", + "x2->x1\n", + "\n", + "\n", + "2.49\n", + "\n", + "\n", + "\n", + "x2->x4\n", + "\n", + "\n", + "-1.48\n", + "\n", + "\n", + "\n", + "x3\n", + "\n", + "x3\n", + "\n", + "\n", + "\n", + "x3->x0\n", + "\n", + "\n", + "3.48\n", + "\n", + "\n", + "\n", + "x3->x2\n", + "\n", + "\n", + "6.50\n", + "\n", + "\n", + "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 10, @@ -947,124 +999,149 @@ { "data": { "image/svg+xml": [ - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "%3\r\n", - "\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "\r\n", - "x0->x4\r\n", - "\r\n", - "\r\n", - "8.98\r\n", - "\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "\r\n", - "x1->x0\r\n", - "\r\n", - "\r\n", - "-0.03\r\n", - "\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "\r\n", - "x1->x2\r\n", - "\r\n", - "\r\n", - "0.32\r\n", - "\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "\r\n", - "x1->x3\r\n", - "\r\n", - "\r\n", - "-0.02\r\n", - "\r\n", - "\r\n", - "x1->x4\r\n", - "\r\n", - "\r\n", - "-0.25\r\n", - "\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "\r\n", - "x1->x5\r\n", - "\r\n", - "\r\n", - "0.56\r\n", - "\r\n", - "\r\n", - "x2->x3\r\n", - "\r\n", - "\r\n", - "0.19\r\n", - "\r\n", - "\r\n", - "x2->x4\r\n", - "\r\n", - "\r\n", - "-0.66\r\n", - "\r\n", - "\r\n", - "x3->x0\r\n", - "\r\n", - "\r\n", - "0.99\r\n", - "\r\n", - "\r\n", - "x5->x0\r\n", - "\r\n", - "\r\n", - "0.22\r\n", - "\r\n", - "\r\n", - "x5->x2\r\n", - "\r\n", - "\r\n", - "-0.17\r\n", - "\r\n", - "\r\n", - "x5->x3\r\n", - "\r\n", - "\r\n", - "0.03\r\n", - "\r\n", - "\r\n", - "\r\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "x0\n", + "\n", + "x0\n", + "\n", + "\n", + "\n", + "x4\n", + "\n", + "x4\n", + "\n", + "\n", + "\n", + "x0->x4\n", + "\n", + "\n", + "9.06\n", + "\n", + "\n", + "\n", + "x1\n", + "\n", + "x1\n", + "\n", + "\n", + "\n", + "x1->x0\n", + "\n", + "\n", + "-0.07\n", + "\n", + "\n", + "\n", + "x2\n", + "\n", + "x2\n", + "\n", + "\n", + "\n", + "x1->x2\n", + "\n", + "\n", + "0.32\n", + "\n", + "\n", + "\n", + "x3\n", + "\n", + "x3\n", + "\n", + "\n", + "\n", + "x1->x3\n", + "\n", + "\n", + "-0.02\n", + "\n", + "\n", + "\n", + "x1->x4\n", + "\n", + "\n", + "-0.25\n", + "\n", + "\n", + "\n", + "x5\n", + "\n", + "x5\n", + "\n", + "\n", + "\n", + "x1->x5\n", + "\n", + "\n", + "0.56\n", + "\n", + "\n", + "\n", + "x2->x0\n", + "\n", + "\n", + "0.13\n", + "\n", + "\n", + "\n", + "x2->x3\n", + "\n", + "\n", + "0.19\n", + "\n", + "\n", + "\n", + "x2->x4\n", + "\n", + "\n", + "-0.66\n", + "\n", + "\n", + "\n", + "x3->x0\n", + "\n", + "\n", + "0.55\n", + "\n", + "\n", + "\n", + "x5->x0\n", + "\n", + "\n", + "0.26\n", + "\n", + "\n", + "\n", + "x5->x2\n", + "\n", + "\n", + "-0.17\n", + "\n", + "\n", + "\n", + "x5->x3\n", + "\n", + "\n", + "0.03\n", + "\n", + "\n", + "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 13, @@ -1098,12 +1175,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[0. 0.136 0.075 0.838 0. 0.832]\n", - " [0.136 0. 0.008 0. 0.544 0.403]\n", - " [0.075 0.008 0. 0.11 0. 0.511]\n", - " [0.838 0. 0.11 0. 0.039 0.049]\n", - " [0. 0.544 0. 0.039 0. 0.101]\n", - " [0.832 0.403 0.511 0.049 0.101 0. ]]\n" + "[[0. 0.939 0.07 0.838 0.467 0.818]\n", + " [0.939 0. 0.195 0.755 0.053 0.254]\n", + " [0.07 0.195 0. 0.851 0.374 0.507]\n", + " [0.838 0.755 0.851 0. 0.422 0.755]\n", + " [0.467 0.053 0.374 0.422 0. 0.581]\n", + " [0.818 0.254 0.507 0.755 0.581 0. ]]\n" ] } ], @@ -1126,12 +1203,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[0. 0.545 0.908 0.285 0.525 0.728]\n", - " [0.545 0. 0.84 0.814 0.086 0.297]\n", - " [0.908 0.84 0. 0.032 0.328 0.026]\n", - " [0.285 0.814 0.032 0. 0.904 0. ]\n", - " [0.525 0.086 0.328 0.904 0. 0.237]\n", - " [0.728 0.297 0.026 0. 0.237 0. ]]\n" + "[[0. 0.521 0.973 0.285 0.459 0.606]\n", + " [0.521 0. 0.805 0.785 0.078 0.395]\n", + " [0.973 0.805 0. 0.807 0.378 0.129]\n", + " [0.285 0.785 0.807 0. 0.913 0.99 ]\n", + " [0.459 0.078 0.378 0.913 0. 0.269]\n", + " [0.606 0.395 0.129 0.99 0.269 0. ]]\n" ] } ], @@ -1194,9 +1271,9 @@ "x1 <--- x2 (100.0%)\n", "x2 <--- x3 (100.0%)\n", "x4 <--- x0 (100.0%)\n", + "x4 <--- x2 (100.0%)\n", "x5 <--- x0 (100.0%)\n", - "x4 <--- x2 (94.0%)\n", - "x4 <--- x5 (20.0%)\n" + "x1 <--- x3 (4.0%)\n" ] } ], @@ -1222,11 +1299,11 @@ "x0 <--- x3 (100.0%)\n", "x1 <--- x0 (100.0%)\n", "x1 <--- x2 (100.0%)\n", + "x5 <--- x0 (100.0%)\n", "x2 <--- x3 (100.0%)\n", "x4 <--- x0 (100.0%)\n", "x4 <--- x2 (100.0%)\n", - "x5 <--- x0 (100.0%)\n", - "x1 <--- x3 (72.0%)\n" + "x4 <--- x3 (12.0%)\n" ] } ], @@ -1257,7 +1334,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "DAG[0]: 61.0%\n", + "DAG[0]: 87.0%\n", "\tx0 <--- x3 \n", "\tx1 <--- x0 \n", "\tx1 <--- x2 \n", @@ -1265,21 +1342,24 @@ "\tx4 <--- x0 \n", "\tx4 <--- x2 \n", "\tx5 <--- x0 \n", - "DAG[1]: 13.0%\n", + "DAG[1]: 4.0%\n", "\tx0 <--- x3 \n", "\tx1 <--- x0 \n", "\tx1 <--- x2 \n", "\tx2 <--- x3 \n", "\tx4 <--- x0 \n", "\tx4 <--- x2 \n", - "\tx4 <--- x5 \n", "\tx5 <--- x0 \n", - "DAG[2]: 6.0%\n", + "\tx5 <--- x2 \n", + "\tx5 <--- x3 \n", + "DAG[2]: 4.0%\n", "\tx0 <--- x3 \n", "\tx1 <--- x0 \n", "\tx1 <--- x2 \n", + "\tx1 <--- x3 \n", "\tx2 <--- x3 \n", "\tx4 <--- x0 \n", + "\tx4 <--- x2 \n", "\tx5 <--- x0 \n" ] } @@ -1303,16 +1383,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "DAG[0]: 59.0%\n", + "DAG[0]: 60.0%\n", "\tx0 <--- x3 \n", "\tx1 <--- x0 \n", "\tx1 <--- x2 \n", - "\tx1 <--- x3 \n", "\tx2 <--- x3 \n", "\tx4 <--- x0 \n", "\tx4 <--- x2 \n", "\tx5 <--- x0 \n", - "DAG[1]: 17.0%\n", + "DAG[1]: 8.0%\n", "\tx0 <--- x3 \n", "\tx1 <--- x0 \n", "\tx1 <--- x2 \n", @@ -1320,15 +1399,15 @@ "\tx4 <--- x0 \n", "\tx4 <--- x2 \n", "\tx5 <--- x0 \n", - "DAG[2]: 10.0%\n", - "\tx0 <--- x2 \n", + "\tx5 <--- x2 \n", + "DAG[2]: 7.0%\n", "\tx0 <--- x3 \n", "\tx1 <--- x0 \n", "\tx1 <--- x2 \n", - "\tx1 <--- x3 \n", "\tx2 <--- x3 \n", "\tx4 <--- x0 \n", "\tx4 <--- x2 \n", + "\tx4 <--- x3 \n", "\tx5 <--- x0 \n" ] } @@ -1360,12 +1439,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[0. 0. 0.08 1. 0. 0. ]\n", - " [1. 0. 1. 0.08 0. 0.05]\n", - " [0. 0. 0. 1. 0. 0. ]\n", + "[[0. 0. 0. 1. 0. 0. ]\n", + " [1. 0. 1. 0.04 0. 0.02]\n", + " [0.01 0. 0. 1. 0. 0. ]\n", " [0. 0. 0. 0. 0. 0. ]\n", - " [1. 0. 0.94 0. 0. 0.2 ]\n", - " [1. 0. 0. 0. 0.01 0. ]]\n" + " [1. 0. 1. 0.02 0. 0. ]\n", + " [1. 0. 0.04 0.04 0. 0. ]]\n" ] } ], @@ -1432,21 +1511,21 @@ " 1\n", " x0\n", " x1\n", - " 2.990264\n", + " 2.963048\n", " 1.00\n", " \n", " \n", " 2\n", " x2\n", " x1\n", - " 2.091170\n", + " 2.016516\n", " 1.00\n", " \n", " \n", " 3\n", " x3\n", " x1\n", - " 20.937520\n", + " 20.943993\n", " 1.00\n", " \n", " \n", @@ -1460,77 +1539,56 @@ " 5\n", " x0\n", " x4\n", - " 7.992477\n", + " 8.011896\n", " 1.00\n", " \n", " \n", " 6\n", - " x3\n", + " x2\n", " x4\n", - " 18.058717\n", + " -1.007165\n", " 1.00\n", " \n", " \n", " 7\n", - " x0\n", - " x5\n", - " 3.970275\n", + " x3\n", + " x4\n", + " 18.061596\n", " 1.00\n", " \n", " \n", " 8\n", - " x3\n", + " x0\n", " x5\n", - " 12.028240\n", + " 4.001221\n", " 1.00\n", " \n", " \n", " 9\n", + " x3\n", " x5\n", - " x1\n", - " 0.148078\n", - " 0.29\n", + " 12.026086\n", + " 1.00\n", " \n", " \n", " 10\n", + " x2\n", " x5\n", - " x4\n", - " 0.104561\n", - " 0.21\n", + " -0.119097\n", + " 0.04\n", " \n", " \n", " 11\n", - " x2\n", " x5\n", - " 0.152502\n", - " 0.15\n", + " x1\n", + " 0.092263\n", + " 0.02\n", " \n", " \n", " 12\n", - " x5\n", - " x2\n", - " 0.078391\n", - " 0.09\n", - " \n", - " \n", - " 13\n", - " x2\n", " x0\n", - " 0.035852\n", - " 0.08\n", - " \n", - " \n", - " 14\n", - " x4\n", - " x1\n", - " -1.623188\n", - " 0.03\n", - " \n", - " \n", - " 15\n", - " x4\n", - " x5\n", - " 0.027130\n", + " x2\n", + " 0.079547\n", " 0.01\n", " \n", " \n", @@ -1540,21 +1598,18 @@ "text/plain": [ " from to effect probability\n", "0 x3 x0 3.005604 1.00\n", - "1 x0 x1 2.990264 1.00\n", - "2 x2 x1 2.091170 1.00\n", - "3 x3 x1 20.937520 1.00\n", + "1 x0 x1 2.963048 1.00\n", + "2 x2 x1 2.016516 1.00\n", + "3 x3 x1 20.943993 1.00\n", "4 x3 x2 5.969457 1.00\n", - "5 x0 x4 7.992477 1.00\n", - "6 x3 x4 18.058717 1.00\n", - "7 x0 x5 3.970275 1.00\n", - "8 x3 x5 12.028240 1.00\n", - "9 x5 x1 0.148078 0.29\n", - "10 x5 x4 0.104561 0.21\n", - "11 x2 x5 0.152502 0.15\n", - "12 x5 x2 0.078391 0.09\n", - "13 x2 x0 0.035852 0.08\n", - "14 x4 x1 -1.623188 0.03\n", - "15 x4 x5 0.027130 0.01" + "5 x0 x4 8.011896 1.00\n", + "6 x2 x4 -1.007165 1.00\n", + "7 x3 x4 18.061596 1.00\n", + "8 x0 x5 4.001221 1.00\n", + "9 x3 x5 12.026086 1.00\n", + "10 x2 x5 -0.119097 0.04\n", + "11 x5 x1 0.092263 0.02\n", + "12 x0 x2 0.079547 0.01" ] }, "execution_count": 22, @@ -1621,28 +1676,28 @@ " 3\n", " x3\n", " x1\n", - " 20.937520\n", + " 20.943993\n", " 1.0\n", " \n", " \n", - " 6\n", + " 7\n", " x3\n", " x4\n", - " 18.058717\n", + " 18.061596\n", " 1.0\n", " \n", " \n", - " 8\n", + " 9\n", " x3\n", " x5\n", - " 12.028240\n", + " 12.026086\n", " 1.0\n", " \n", " \n", " 5\n", " x0\n", " x4\n", - " 7.992477\n", + " 8.011896\n", " 1.0\n", " \n", " \n", @@ -1658,10 +1713,10 @@ ], "text/plain": [ " from to effect probability\n", - "3 x3 x1 20.937520 1.0\n", - "6 x3 x4 18.058717 1.0\n", - "8 x3 x5 12.028240 1.0\n", - "5 x0 x4 7.992477 1.0\n", + "3 x3 x1 20.943993 1.0\n", + "7 x3 x4 18.061596 1.0\n", + "9 x3 x5 12.026086 1.0\n", + "5 x0 x4 8.011896 1.0\n", "4 x3 x2 5.969457 1.0" ] }, @@ -1723,36 +1778,29 @@ " 1\n", " x0\n", " x1\n", - " 2.990264\n", + " 2.963048\n", " 1.00\n", " \n", " \n", " 2\n", " x2\n", " x1\n", - " 2.091170\n", + " 2.016516\n", " 1.00\n", " \n", " \n", " 3\n", " x3\n", " x1\n", - " 20.937520\n", + " 20.943993\n", " 1.00\n", " \n", " \n", - " 9\n", + " 11\n", " x5\n", " x1\n", - " 0.148078\n", - " 0.29\n", - " \n", - " \n", - " 14\n", - " x4\n", - " x1\n", - " -1.623188\n", - " 0.03\n", + " 0.092263\n", + " 0.02\n", " \n", " \n", "\n", @@ -1760,11 +1808,10 @@ ], "text/plain": [ " from to effect probability\n", - "1 x0 x1 2.990264 1.00\n", - "2 x2 x1 2.091170 1.00\n", - "3 x3 x1 20.937520 1.00\n", - "9 x5 x1 0.148078 0.29\n", - "14 x4 x1 -1.623188 0.03" + "1 x0 x1 2.963048 1.00\n", + "2 x2 x1 2.016516 1.00\n", + "3 x3 x1 20.943993 1.00\n", + "11 x5 x1 0.092263 0.02" ] }, "execution_count": 24, @@ -1799,7 +1846,7 @@ "(array([ 4., 8., 10., 19., 16., 14., 14., 8., 6., 1.]),\n", " array([2.941, 2.955, 2.969, 2.984, 2.998, 3.012, 3.026, 3.04 , 3.055,\n", " 3.069, 3.083]),\n", - " )" + " )" ] }, "execution_count": 25, @@ -1808,7 +1855,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -1840,7 +1887,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 26, "metadata": { "ExecuteTime": { "end_time": "2021-06-25T04:07:31.680360Z", @@ -1878,32 +1925,32 @@ " \n", " 0\n", " [3, 0, 1]\n", - " 8.561128\n", + " 8.905047\n", " 1.00\n", " \n", " \n", " 1\n", " [3, 2, 1]\n", - " 11.622379\n", + " 12.049228\n", " 1.00\n", " \n", " \n", " 2\n", " [3, 1]\n", - " 0.151715\n", - " 0.08\n", + " -0.733971\n", + " 0.04\n", " \n", " \n", " 3\n", - " [3, 2, 0, 1]\n", - " 0.618533\n", - " 0.08\n", + " [3, 0, 5, 1]\n", + " 1.096850\n", + " 0.02\n", " \n", " \n", " 4\n", - " [3, 0, 5, 1]\n", - " 0.967472\n", - " 0.05\n", + " [3, 0, 2, 1]\n", + " 0.493177\n", + " 0.01\n", " \n", " \n", "\n", @@ -1911,14 +1958,14 @@ ], "text/plain": [ " path effect probability\n", - "0 [3, 0, 1] 8.561128 1.00\n", - "1 [3, 2, 1] 11.622379 1.00\n", - "2 [3, 1] 0.151715 0.08\n", - "3 [3, 2, 0, 1] 0.618533 0.08\n", - "4 [3, 0, 5, 1] 0.967472 0.05" + "0 [3, 0, 1] 8.905047 1.00\n", + "1 [3, 2, 1] 12.049228 1.00\n", + "2 [3, 1] -0.733971 0.04\n", + "3 [3, 0, 5, 1] 1.096850 0.02\n", + "4 [3, 0, 2, 1] 0.493177 0.01" ] }, - "execution_count": 27, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -1940,7 +1987,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -1954,7 +2001,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.8.10" }, "toc": { "base_numbering": 1, @@ -1971,5 +2018,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/examples/RCD.ipynb b/examples/RCD.ipynb index ef1aa80..c5bb970 100644 --- a/examples/RCD.ipynb +++ b/examples/RCD.ipynb @@ -29,7 +29,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "['1.16.2', '0.24.2', '0.11.1', '1.5.4']\n" + "['1.24.4', '2.0.3', '0.20.1', '1.8.3']\n" ] } ], @@ -192,105 +192,120 @@ { "data": { "image/svg+xml": [ - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "%3\r\n", - "\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "\r\n", - "x0->x2\r\n", - "\r\n", - "\r\n", - "0.80\r\n", - "\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "\r\n", - "x0->x4\r\n", - "\r\n", - "\r\n", - "1.00\r\n", - "\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "\r\n", - "x1->x0\r\n", - "\r\n", - "\r\n", - "1.00\r\n", - "\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "\r\n", - "x3->x0\r\n", - "\r\n", - "\r\n", - "1.00\r\n", - "\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "\r\n", - "x5->x1\r\n", - "\r\n", - "\r\n", - "0.60\r\n", - "\r\n", - "\r\n", - "x5->x3\r\n", - "\r\n", - "\r\n", - "0.50\r\n", - "\r\n", - "\r\n", - "f1(x6)\r\n", - "\r\n", - "f1(x6)\r\n", - "\r\n", - "\r\n", - "f1(x6)->x2\r\n", - "\r\n", - "\r\n", - "-0.60\r\n", - "\r\n", - "\r\n", - "f1(x6)->x4\r\n", - "\r\n", - "\r\n", - "-0.50\r\n", - "\r\n", - "\r\n", - "\r\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "x0\n", + "\n", + "x0\n", + "\n", + "\n", + "\n", + "x2\n", + "\n", + "x2\n", + "\n", + "\n", + "\n", + "x0->x2\n", + "\n", + "\n", + "0.80\n", + "\n", + "\n", + "\n", + "x4\n", + "\n", + "x4\n", + "\n", + "\n", + "\n", + "x0->x4\n", + "\n", + "\n", + "1.00\n", + "\n", + "\n", + "\n", + "x1\n", + "\n", + "x1\n", + "\n", + "\n", + "\n", + "x1->x0\n", + "\n", + "\n", + "1.00\n", + "\n", + "\n", + "\n", + "x3\n", + "\n", + "x3\n", + "\n", + "\n", + "\n", + "x3->x0\n", + "\n", + "\n", + "1.00\n", + "\n", + "\n", + "\n", + "x5\n", + "\n", + "x5\n", + "\n", + "\n", + "\n", + "x5->x1\n", + "\n", + "\n", + "0.60\n", + "\n", + "\n", + "\n", + "x5->x3\n", + "\n", + "\n", + "0.50\n", + "\n", + "\n", + "\n", + "f1(x6)\n", + "\n", + "f1(x6)\n", + "\n", + "\n", + "\n", + "f1(x6)->x2\n", + "\n", + "\n", + "-0.60\n", + "\n", + "\n", + "\n", + "f1(x6)->x4\n", + "\n", + "\n", + "-0.50\n", + "\n", + "\n", + "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 3, @@ -339,7 +354,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 4, @@ -439,94 +454,107 @@ { "data": { "image/svg+xml": [ - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "%3\r\n", - "\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "\r\n", - "x0->x2\r\n", - "\r\n", - "\r\n", - "0.75\r\n", - "\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "\r\n", - "x0->x4\r\n", - "\r\n", - "\r\n", - "1.02\r\n", - "\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "\r\n", - "x1->x0\r\n", - "\r\n", - "\r\n", - "0.94\r\n", - "\r\n", - "\r\n", - "x2->x4\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "\r\n", - "x3->x0\r\n", - "\r\n", - "\r\n", - "0.99\r\n", - "\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "\r\n", - "x5->x1\r\n", - "\r\n", - "\r\n", - "0.56\r\n", - "\r\n", - "\r\n", - "x5->x3\r\n", - "\r\n", - "\r\n", - "0.56\r\n", - "\r\n", - "\r\n", - "\r\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "x0\n", + "\n", + "x0\n", + "\n", + "\n", + "\n", + "x2\n", + "\n", + "x2\n", + "\n", + "\n", + "\n", + "x0->x2\n", + "\n", + "\n", + "0.75\n", + "\n", + "\n", + "\n", + "x4\n", + "\n", + "x4\n", + "\n", + "\n", + "\n", + "x0->x4\n", + "\n", + "\n", + "1.02\n", + "\n", + "\n", + "\n", + "x1\n", + "\n", + "x1\n", + "\n", + "\n", + "\n", + "x1->x0\n", + "\n", + "\n", + "0.94\n", + "\n", + "\n", + "\n", + "x2->x4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "x3\n", + "\n", + "x3\n", + "\n", + "\n", + "\n", + "x3->x0\n", + "\n", + "\n", + "0.99\n", + "\n", + "\n", + "\n", + "x5\n", + "\n", + "x5\n", + "\n", + "\n", + "\n", + "x5->x1\n", + "\n", + "\n", + "0.56\n", + "\n", + "\n", + "\n", + "x5->x3\n", + "\n", + "\n", + "0.56\n", + "\n", + "\n", + "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 7, @@ -625,14 +653,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "x0 <--- x1 (b>0) (100.0%)\n", - "x4 <--- x0 (b>0) (99.0%)\n", - "x1 <--- x5 (b>0) (97.0%)\n", - "x2 <--- x0 (b>0) (96.0%)\n", - "x0 <--- x3 (b>0) (92.0%)\n", - "x3 <--- x5 (b>0) (67.0%)\n", - "x2 <--- x4 (b>0) (13.0%)\n", - "x4 <--- x3 (b<0) (11.0%)\n" + "x4 <--- x0 (b>0) (58.0%)\n", + "x0 <--- x5 (b>0) (51.0%)\n", + "x2 <--- x0 (b>0) (30.0%)\n", + "x3 <--- x5 (b>0) (30.0%)\n", + "x0 <--- x1 (b>0) (22.0%)\n", + "x0 <--- x3 (b>0) (18.0%)\n", + "x1 <--- x5 (b>0) (18.0%)\n", + "x2 <--- x5 (b>0) (15.0%)\n" ] } ], @@ -673,27 +701,11 @@ "name": "stdout", "output_type": "stream", "text": [ - "DAG[0]: 47.0%\n", - "\tx0 <--- x1 (b>0)\n", - "\tx0 <--- x3 (b>0)\n", - "\tx1 <--- x5 (b>0)\n", - "\tx2 <--- x0 (b>0)\n", - "\tx3 <--- x5 (b>0)\n", + "DAG[0]: 6.0%\n", + "DAG[1]: 4.0%\n", "\tx4 <--- x0 (b>0)\n", - "DAG[1]: 20.0%\n", - "\tx0 <--- x1 (b>0)\n", - "\tx0 <--- x3 (b>0)\n", - "\tx1 <--- x5 (b>0)\n", - "\tx2 <--- x0 (b>0)\n", - "\tx4 <--- x0 (b>0)\n", - "DAG[2]: 10.0%\n", - "\tx0 <--- x1 (b>0)\n", - "\tx0 <--- x3 (b>0)\n", - "\tx1 <--- x5 (b>0)\n", - "\tx2 <--- x0 (b>0)\n", - "\tx3 <--- x5 (b>0)\n", - "\tx4 <--- x0 (b>0)\n", - "\tx4 <--- x3 (b<0)\n" + "DAG[2]: 4.0%\n", + "\tx2 <--- x0 (b>0)\n" ] } ], @@ -718,11 +730,11 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[0. 1. 0. 0.92 0. 0.08]\n", - " [0. 0. 0. 0. 0. 0.97]\n", - " [0.96 0. 0. 0. 0.13 0. ]\n", - " [0. 0. 0. 0. 0. 0.67]\n", - " [0.99 0.01 0.02 0.12 0. 0. ]\n", + "[[0. 0.22 0. 0.18 0. 0.51]\n", + " [0. 0. 0. 0. 0. 0.18]\n", + " [0.3 0.13 0. 0.12 0.05 0.15]\n", + " [0. 0. 0. 0. 0. 0.3 ]\n", + " [0.58 0.11 0.02 0.11 0. 0.05]\n", " [0. 0. 0. 0. 0. 0. ]]\n" ] } @@ -776,108 +788,87 @@ " \n", " \n", " 0\n", - " x1\n", + " x3\n", " x0\n", - " 0.929241\n", - " 0.97\n", + " 1.055784\n", + " 0.04\n", " \n", " \n", " 1\n", - " x1\n", + " x3\n", " x2\n", - " 0.642897\n", - " 0.97\n", + " 0.818606\n", + " 0.04\n", " \n", " \n", " 2\n", - " x1\n", " x4\n", - " 0.940142\n", - " 0.96\n", + " x2\n", + " 0.484138\n", + " 0.04\n", " \n", " \n", " 3\n", - " x0\n", - " x2\n", - " 0.733251\n", - " 0.91\n", + " x3\n", + " x4\n", + " 1.016508\n", + " 0.04\n", " \n", " \n", " 4\n", + " x1\n", " x0\n", - " x4\n", - " 0.976640\n", - " 0.91\n", + " 0.929668\n", + " 0.03\n", " \n", " \n", " 5\n", - " x3\n", " x0\n", - " 0.986875\n", - " 0.66\n", + " x2\n", + " 0.781983\n", + " 0.03\n", " \n", " \n", " 6\n", - " x3\n", - " x2\n", - " 0.732515\n", - " 0.66\n", + " x0\n", + " x4\n", + " 1.003733\n", + " 0.03\n", " \n", " \n", " 7\n", - " x3\n", + " x1\n", " x4\n", - " 0.899673\n", - " 0.65\n", + " 1.041410\n", + " 0.03\n", " \n", " \n", " 8\n", - " x5\n", - " x0\n", - " 1.021466\n", - " 0.63\n", + " x1\n", + " x2\n", + " 0.730836\n", + " 0.02\n", " \n", " \n", " 9\n", " x5\n", - " x1\n", - " 0.555707\n", - " 0.63\n", + " x0\n", + " 0.961161\n", + " 0.01\n", " \n", " \n", " 10\n", " x5\n", - " x2\n", - " 0.741192\n", - " 0.63\n", + " x1\n", + " 0.542628\n", + " 0.01\n", " \n", " \n", " 11\n", " x5\n", " x3\n", - " 0.563175\n", - " 0.63\n", - " \n", - " \n", - " 12\n", - " x5\n", - " x4\n", - " 0.941773\n", - " 0.61\n", - " \n", - " \n", - " 13\n", - " x4\n", - " x2\n", - " 0.225102\n", - " 0.13\n", - " \n", - " \n", - " 14\n", - " x2\n", - " x4\n", - " 0.243174\n", - " 0.03\n", + " 0.559532\n", + " 0.01\n", " \n", " \n", "\n", @@ -885,21 +876,18 @@ ], "text/plain": [ " from to effect probability\n", - "0 x1 x0 0.929241 0.97\n", - "1 x1 x2 0.642897 0.97\n", - "2 x1 x4 0.940142 0.96\n", - "3 x0 x2 0.733251 0.91\n", - "4 x0 x4 0.976640 0.91\n", - "5 x3 x0 0.986875 0.66\n", - "6 x3 x2 0.732515 0.66\n", - "7 x3 x4 0.899673 0.65\n", - "8 x5 x0 1.021466 0.63\n", - "9 x5 x1 0.555707 0.63\n", - "10 x5 x2 0.741192 0.63\n", - "11 x5 x3 0.563175 0.63\n", - "12 x5 x4 0.941773 0.61\n", - "13 x4 x2 0.225102 0.13\n", - "14 x2 x4 0.243174 0.03" + "0 x3 x0 1.055784 0.04\n", + "1 x3 x2 0.818606 0.04\n", + "2 x4 x2 0.484138 0.04\n", + "3 x3 x4 1.016508 0.04\n", + "4 x1 x0 0.929668 0.03\n", + "5 x0 x2 0.781983 0.03\n", + "6 x0 x4 1.003733 0.03\n", + "7 x1 x4 1.041410 0.03\n", + "8 x1 x2 0.730836 0.02\n", + "9 x5 x0 0.961161 0.01\n", + "10 x5 x1 0.542628 0.01\n", + "11 x5 x3 0.559532 0.01" ] }, "execution_count": 15, @@ -959,51 +947,51 @@ " \n", " \n", " \n", - " 8\n", - " x5\n", - " x0\n", - " 1.021466\n", - " 0.63\n", - " \n", - " \n", - " 5\n", + " 0\n", " x3\n", " x0\n", - " 0.986875\n", - " 0.66\n", + " 1.055784\n", + " 0.04\n", " \n", " \n", - " 4\n", - " x0\n", + " 7\n", + " x1\n", " x4\n", - " 0.976640\n", - " 0.91\n", + " 1.041410\n", + " 0.03\n", " \n", " \n", - " 12\n", - " x5\n", + " 3\n", + " x3\n", " x4\n", - " 0.941773\n", - " 0.61\n", + " 1.016508\n", + " 0.04\n", " \n", " \n", - " 2\n", - " x1\n", + " 6\n", + " x0\n", " x4\n", - " 0.940142\n", - " 0.96\n", + " 1.003733\n", + " 0.03\n", + " \n", + " \n", + " 9\n", + " x5\n", + " x0\n", + " 0.961161\n", + " 0.01\n", " \n", " \n", "\n", "" ], "text/plain": [ - " from to effect probability\n", - "8 x5 x0 1.021466 0.63\n", - "5 x3 x0 0.986875 0.66\n", - "4 x0 x4 0.976640 0.91\n", - "12 x5 x4 0.941773 0.61\n", - "2 x1 x4 0.940142 0.96" + " from to effect probability\n", + "0 x3 x0 1.055784 0.04\n", + "7 x1 x4 1.041410 0.03\n", + "3 x3 x4 1.016508 0.04\n", + "6 x0 x4 1.003733 0.03\n", + "9 x5 x0 0.961161 0.01" ] }, "execution_count": 16, @@ -1049,39 +1037,39 @@ " \n", " \n", " \n", - " 14\n", - " x2\n", - " x4\n", - " 0.243174\n", - " 0.03\n", + " 9\n", + " x5\n", + " x0\n", + " 0.961161\n", + " 0.01\n", " \n", " \n", - " 13\n", - " x4\n", - " x2\n", - " 0.225102\n", - " 0.13\n", + " 10\n", + " x5\n", + " x1\n", + " 0.542628\n", + " 0.01\n", " \n", " \n", - " 12\n", + " 11\n", " x5\n", - " x4\n", - " 0.941773\n", - " 0.61\n", + " x3\n", + " 0.559532\n", + " 0.01\n", " \n", " \n", " 8\n", - " x5\n", - " x0\n", - " 1.021466\n", - " 0.63\n", + " x1\n", + " x2\n", + " 0.730836\n", + " 0.02\n", " \n", " \n", - " 9\n", - " x5\n", + " 4\n", " x1\n", - " 0.555707\n", - " 0.63\n", + " x0\n", + " 0.929668\n", + " 0.03\n", " \n", " \n", "\n", @@ -1089,11 +1077,11 @@ ], "text/plain": [ " from to effect probability\n", - "14 x2 x4 0.243174 0.03\n", - "13 x4 x2 0.225102 0.13\n", - "12 x5 x4 0.941773 0.61\n", - "8 x5 x0 1.021466 0.63\n", - "9 x5 x1 0.555707 0.63" + "9 x5 x0 0.961161 0.01\n", + "10 x5 x1 0.542628 0.01\n", + "11 x5 x3 0.559532 0.01\n", + "8 x1 x2 0.730836 0.02\n", + "4 x1 x0 0.929668 0.03" ] }, "execution_count": 17, @@ -1120,9 +1108,9 @@ { "data": { "text/plain": [ - "(array([ 0., 0., 0., 0., 0., 63., 0., 0., 0., 0.]),\n", - " array([0.521, 0.621, 0.721, 0.821, 0.921, 1.021, 1.121, 1.221, 1.321,\n", - " 1.421, 1.521]),\n", + "(array([41., 0., 0., 0., 0., 0., 0., 0., 0., 1.]),\n", + " array([0. , 0.096, 0.192, 0.288, 0.384, 0.481, 0.577, 0.673, 0.769,\n", + " 0.865, 0.961]),\n", " )" ] }, @@ -1132,7 +1120,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -1196,52 +1184,52 @@ " \n", " \n", " 0\n", - " [5, 1, 0, 4]\n", - " 0.534675\n", - " 0.96\n", + " [5, 0, 4]\n", + " 0.970828\n", + " 0.34\n", " \n", " \n", " 1\n", " [5, 3, 0, 4]\n", - " 0.580992\n", - " 0.65\n", + " 0.522827\n", + " 0.07\n", " \n", " \n", " 2\n", " [5, 3, 4]\n", - " -0.197046\n", - " 0.12\n", + " 0.461104\n", + " 0.06\n", " \n", " \n", " 3\n", - " [5, 0, 4]\n", - " 0.505671\n", - " 0.08\n", + " [5, 4]\n", + " 0.821702\n", + " 0.05\n", " \n", " \n", " 4\n", - " [5, 1, 0, 2, 4]\n", - " 0.071415\n", - " 0.01\n", + " [5, 1, 0, 4]\n", + " 0.605828\n", + " 0.02\n", " \n", " \n", " 5\n", " [5, 1, 4]\n", - " 0.530308\n", - " 0.01\n", + " 0.574573\n", + " 0.02\n", " \n", " \n", "\n", "" ], "text/plain": [ - " path effect probability\n", - "0 [5, 1, 0, 4] 0.534675 0.96\n", - "1 [5, 3, 0, 4] 0.580992 0.65\n", - "2 [5, 3, 4] -0.197046 0.12\n", - "3 [5, 0, 4] 0.505671 0.08\n", - "4 [5, 1, 0, 2, 4] 0.071415 0.01\n", - "5 [5, 1, 4] 0.530308 0.01" + " path effect probability\n", + "0 [5, 0, 4] 0.970828 0.34\n", + "1 [5, 3, 0, 4] 0.522827 0.07\n", + "2 [5, 3, 4] 0.461104 0.06\n", + "3 [5, 4] 0.821702 0.05\n", + "4 [5, 1, 0, 4] 0.605828 0.02\n", + "5 [5, 1, 4] 0.574573 0.02" ] }, "execution_count": 19, @@ -1259,7 +1247,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -1273,7 +1261,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.8.10" }, "toc": { "base_numbering": 1, diff --git a/examples/TotalEffect.ipynb b/examples/TotalEffect.ipynb index 34d083b..6efede7 100644 --- a/examples/TotalEffect.ipynb +++ b/examples/TotalEffect.ipynb @@ -29,7 +29,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "['1.16.2', '0.24.2', '0.11.1', '1.3.1']\n" + "['1.24.4', '2.0.3', '0.20.1', '1.8.3']\n" ] } ], @@ -181,94 +181,107 @@ { "data": { "image/svg+xml": [ - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "%3\r\n", - "\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "\r\n", - "x0->x1\r\n", - "\r\n", - "\r\n", - "3.00\r\n", - "\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "\r\n", - "x0->x4\r\n", - "\r\n", - "\r\n", - "8.00\r\n", - "\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "\r\n", - "x0->x5\r\n", - "\r\n", - "\r\n", - "4.00\r\n", - "\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "\r\n", - "x2->x1\r\n", - "\r\n", - "\r\n", - "2.00\r\n", - "\r\n", - "\r\n", - "x2->x4\r\n", - "\r\n", - "\r\n", - "-1.00\r\n", - "\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "\r\n", - "x3->x0\r\n", - "\r\n", - "\r\n", - "3.00\r\n", - "\r\n", - "\r\n", - "x3->x2\r\n", - "\r\n", - "\r\n", - "6.00\r\n", - "\r\n", - "\r\n", - "\r\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "x0\n", + "\n", + "x0\n", + "\n", + "\n", + "\n", + "x1\n", + "\n", + "x1\n", + "\n", + "\n", + "\n", + "x0->x1\n", + "\n", + "\n", + "3.00\n", + "\n", + "\n", + "\n", + "x4\n", + "\n", + "x4\n", + "\n", + "\n", + "\n", + "x0->x4\n", + "\n", + "\n", + "8.00\n", + "\n", + "\n", + "\n", + "x5\n", + "\n", + "x5\n", + "\n", + "\n", + "\n", + "x0->x5\n", + "\n", + "\n", + "4.00\n", + "\n", + "\n", + "\n", + "x2\n", + "\n", + "x2\n", + "\n", + "\n", + "\n", + "x2->x1\n", + "\n", + "\n", + "2.00\n", + "\n", + "\n", + "\n", + "x2->x4\n", + "\n", + "\n", + "-1.00\n", + "\n", + "\n", + "\n", + "x3\n", + "\n", + "x3\n", + "\n", + "\n", + "\n", + "x3->x0\n", + "\n", + "\n", + "3.00\n", + "\n", + "\n", + "\n", + "x3->x2\n", + "\n", + "\n", + "6.00\n", + "\n", + "\n", + "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 3, @@ -308,94 +321,107 @@ { "data": { "image/svg+xml": [ - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "%3\r\n", - "\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "x0\r\n", - "\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "x1\r\n", - "\r\n", - "\r\n", - "x0->x1\r\n", - "\r\n", - "\r\n", - "3.00\r\n", - "\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "x4\r\n", - "\r\n", - "\r\n", - "x0->x4\r\n", - "\r\n", - "\r\n", - "7.98\r\n", - "\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "x5\r\n", - "\r\n", - "\r\n", - "x0->x5\r\n", - "\r\n", - "\r\n", - "4.00\r\n", - "\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "x2\r\n", - "\r\n", - "\r\n", - "x2->x1\r\n", - "\r\n", - "\r\n", - "2.00\r\n", - "\r\n", - "\r\n", - "x2->x4\r\n", - "\r\n", - "\r\n", - "-0.99\r\n", - "\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "x3\r\n", - "\r\n", - "\r\n", - "x3->x0\r\n", - "\r\n", - "\r\n", - "3.01\r\n", - "\r\n", - "\r\n", - "x3->x2\r\n", - "\r\n", - "\r\n", - "6.00\r\n", - "\r\n", - "\r\n", - "\r\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "x0\n", + "\n", + "x0\n", + "\n", + "\n", + "\n", + "x1\n", + "\n", + "x1\n", + "\n", + "\n", + "\n", + "x0->x1\n", + "\n", + "\n", + "3.00\n", + "\n", + "\n", + "\n", + "x4\n", + "\n", + "x4\n", + "\n", + "\n", + "\n", + "x0->x4\n", + "\n", + "\n", + "7.99\n", + "\n", + "\n", + "\n", + "x5\n", + "\n", + "x5\n", + "\n", + "\n", + "\n", + "x0->x5\n", + "\n", + "\n", + "4.00\n", + "\n", + "\n", + "\n", + "x2\n", + "\n", + "x2\n", + "\n", + "\n", + "\n", + "x2->x1\n", + "\n", + "\n", + "2.00\n", + "\n", + "\n", + "\n", + "x2->x4\n", + "\n", + "\n", + "-1.00\n", + "\n", + "\n", + "\n", + "x3\n", + "\n", + "x3\n", + "\n", + "\n", + "\n", + "x3->x0\n", + "\n", + "\n", + "3.01\n", + "\n", + "\n", + "\n", + "x3->x2\n", + "\n", + "\n", + "6.00\n", + "\n", + "\n", + "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 4, @@ -479,15 +505,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "total effect: -0.002\n" + "total effect: 0.000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "C:\\Users\\Foo\\lingam\\base.py:74: UserWarning: The estimated causal effect may be incorrect because the causal order of the destination variable (to_index=3) is earlier than the source variable (from_index=1).\n", - " warnings.warn(f'The estimated causal effect may be incorrect because '\n" + "/home/Foo/.local/lib/python3.8/site-packages/lingam/base.py:75: UserWarning: The estimated causal effect may be incorrect because the causal order of the destination variable (to_index=3) is earlier than the source variable (from_index=1).\n", + " warnings.warn(\n" ] } ], @@ -508,7 +534,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -522,7 +548,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.8.10" }, "toc": { "base_numbering": 1, @@ -539,5 +565,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/examples/VARLiNGAM.ipynb b/examples/VARLiNGAM.ipynb index 5a2116e..b50f9be 100644 --- a/examples/VARLiNGAM.ipynb +++ b/examples/VARLiNGAM.ipynb @@ -24,7 +24,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "['1.16.2', '0.24.2', '0.11.1', '1.5.2']\n" + "['1.24.4', '2.0.3', '0.20.1', '1.8.3']\n" ] } ], @@ -91,7 +91,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 3, @@ -146,11 +146,11 @@ { "data": { "text/plain": [ - "array([[ 0. , -0.144, 0. , 0. , 0. ],\n", + "array([[ 0. , -0.136, 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0. , 0. ],\n", - " [-0.372, 0. , 0. , 0. , 0. ],\n", - " [ 0.069, -0.21 , 0. , 0. , 0. ],\n", - " [ 0.083, 0. , -0.033, 0. , 0. ]])" + " [-0.484, 0. , 0. , 0. , 0. ],\n", + " [ 0.075, -0.21 , 0. , 0. , 0. ],\n", + " [ 0.168, 0. , 0. , 0. , 0. ]])" ] }, "execution_count": 5, @@ -171,11 +171,11 @@ { "data": { "text/plain": [ - "array([[-0.366, -0.011, 0.074, 0.297, 0.025],\n", - " [-0.083, -0.349, -0.168, -0.327, 0.43 ],\n", - " [ 0.077, -0.043, 0.427, 0.046, 0.49 ],\n", - " [-0.389, -0.097, -0.263, 0.014, -0.159],\n", - " [-0.018, 0.01 , 0.001, 0.071, 0.003]])" + "array([[-0.358, 0. , 0.073, 0.302, 0. ],\n", + " [ 0. , -0.338, -0.154, -0.335, 0.423],\n", + " [ 0. , 0. , 0.424, 0.112, 0.493],\n", + " [-0.386, -0.1 , -0.266, 0. , -0.159],\n", + " [ 0. , 0. , 0. , 0. , 0. ]])" ] }, "execution_count": 6, @@ -231,9 +231,9 @@ "text/plain": [ "array([[ 0. , -0.144, 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0. , 0. ],\n", - " [-0.372, 0. , 0. , 0. , 0. ],\n", - " [ 0.069, -0.21 , 0. , 0. , 0. ],\n", - " [ 0.083, 0. , -0.033, 0. , 0. ]])" + " [-0.456, 0. , 0. , 0. , 0. ],\n", + " [ 0. , -0.22 , 0. , 0. , 0. ],\n", + " [ 0.157, 0. , 0. , 0. , 0. ]])" ] }, "execution_count": 8, @@ -262,198 +262,215 @@ { "data": { "image/svg+xml": [ - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "%3\r\n", - "\r\n", - "\r\n", - "x0(t)\r\n", - "\r\n", - "x0(t)\r\n", - "\r\n", - "\r\n", - "x2(t)\r\n", - "\r\n", - "x2(t)\r\n", - "\r\n", - "\r\n", - "x0(t)->x2(t)\r\n", - "\r\n", - "\r\n", - "-0.37\r\n", - "\r\n", - "\r\n", - "x3(t)\r\n", - "\r\n", - "x3(t)\r\n", - "\r\n", - "\r\n", - "x0(t)->x3(t)\r\n", - "\r\n", - "\r\n", - "0.07\r\n", - "\r\n", - "\r\n", - "x4(t)\r\n", - "\r\n", - "x4(t)\r\n", - "\r\n", - "\r\n", - "x0(t)->x4(t)\r\n", - "\r\n", - "\r\n", - "0.08\r\n", - "\r\n", - "\r\n", - "x1(t)\r\n", - "\r\n", - "x1(t)\r\n", - "\r\n", - "\r\n", - "x1(t)->x0(t)\r\n", - "\r\n", - "\r\n", - "-0.14\r\n", - "\r\n", - "\r\n", - "x1(t)->x3(t)\r\n", - "\r\n", - "\r\n", - "-0.21\r\n", - "\r\n", - "\r\n", - "x0(t-1)\r\n", - "\r\n", - "x0(t-1)\r\n", - "\r\n", - "\r\n", - "x0(t-1)->x0(t)\r\n", - "\r\n", - "\r\n", - "-0.37\r\n", - "\r\n", - "\r\n", - "x0(t-1)->x1(t)\r\n", - "\r\n", - "\r\n", - "-0.08\r\n", - "\r\n", - "\r\n", - "x0(t-1)->x2(t)\r\n", - "\r\n", - "\r\n", - "0.08\r\n", - "\r\n", - "\r\n", - "x0(t-1)->x3(t)\r\n", - "\r\n", - "\r\n", - "-0.39\r\n", - "\r\n", - "\r\n", - "x1(t-1)\r\n", - "\r\n", - "x1(t-1)\r\n", - "\r\n", - "\r\n", - "x1(t-1)->x1(t)\r\n", - "\r\n", - "\r\n", - "-0.35\r\n", - "\r\n", - "\r\n", - "x1(t-1)->x3(t)\r\n", - "\r\n", - "\r\n", - "-0.10\r\n", - "\r\n", - "\r\n", - "x2(t-1)\r\n", - "\r\n", - "x2(t-1)\r\n", - "\r\n", - "\r\n", - "x2(t-1)->x0(t)\r\n", - "\r\n", - "\r\n", - "0.07\r\n", - "\r\n", - "\r\n", - "x2(t-1)->x1(t)\r\n", - "\r\n", - "\r\n", - "-0.17\r\n", - "\r\n", - "\r\n", - "x2(t-1)->x2(t)\r\n", - "\r\n", - "\r\n", - "0.43\r\n", - "\r\n", - "\r\n", - "x2(t-1)->x3(t)\r\n", - "\r\n", - "\r\n", - "-0.26\r\n", - "\r\n", - "\r\n", - "x3(t-1)\r\n", - "\r\n", - "x3(t-1)\r\n", - "\r\n", - "\r\n", - "x3(t-1)->x0(t)\r\n", - "\r\n", - "\r\n", - "0.30\r\n", - "\r\n", - "\r\n", - "x3(t-1)->x1(t)\r\n", - "\r\n", - "\r\n", - "-0.33\r\n", - "\r\n", - "\r\n", - "x3(t-1)->x4(t)\r\n", - "\r\n", - "\r\n", - "0.07\r\n", - "\r\n", - "\r\n", - "x4(t-1)\r\n", - "\r\n", - "x4(t-1)\r\n", - "\r\n", - "\r\n", - "x4(t-1)->x1(t)\r\n", - "\r\n", - "\r\n", - "0.43\r\n", - "\r\n", - "\r\n", - "x4(t-1)->x2(t)\r\n", - "\r\n", - "\r\n", - "0.49\r\n", - "\r\n", - "\r\n", - "x4(t-1)->x3(t)\r\n", - "\r\n", - "\r\n", - "-0.16\r\n", - "\r\n", - "\r\n", - "\r\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "x0(t)\n", + "\n", + "x0(t)\n", + "\n", + "\n", + "\n", + "x2(t)\n", + "\n", + "x2(t)\n", + "\n", + "\n", + "\n", + "x0(t)->x2(t)\n", + "\n", + "\n", + "-0.48\n", + "\n", + "\n", + "\n", + "x3(t)\n", + "\n", + "x3(t)\n", + "\n", + "\n", + "\n", + "x0(t)->x3(t)\n", + "\n", + "\n", + "0.07\n", + "\n", + "\n", + "\n", + "x4(t)\n", + "\n", + "x4(t)\n", + "\n", + "\n", + "\n", + "x0(t)->x4(t)\n", + "\n", + "\n", + "0.17\n", + "\n", + "\n", + "\n", + "x1(t)\n", + "\n", + "x1(t)\n", + "\n", + "\n", + "\n", + "x1(t)->x0(t)\n", + "\n", + "\n", + "-0.14\n", + "\n", + "\n", + "\n", + "x1(t)->x3(t)\n", + "\n", + "\n", + "-0.21\n", + "\n", + "\n", + "\n", + "x0(t-1)\n", + "\n", + "x0(t-1)\n", + "\n", + "\n", + "\n", + "x0(t-1)->x0(t)\n", + "\n", + "\n", + "-0.36\n", + "\n", + "\n", + "\n", + "x0(t-1)->x3(t)\n", + "\n", + "\n", + "-0.39\n", + "\n", + "\n", + "\n", + "x1(t-1)\n", + "\n", + "x1(t-1)\n", + "\n", + "\n", + "\n", + "x1(t-1)->x1(t)\n", + "\n", + "\n", + "-0.34\n", + "\n", + "\n", + "\n", + "x1(t-1)->x3(t)\n", + "\n", + "\n", + "-0.10\n", + "\n", + "\n", + "\n", + "x2(t-1)\n", + "\n", + "x2(t-1)\n", + "\n", + "\n", + "\n", + "x2(t-1)->x0(t)\n", + "\n", + "\n", + "0.07\n", + "\n", + "\n", + "\n", + "x2(t-1)->x1(t)\n", + "\n", + "\n", + "-0.15\n", + "\n", + "\n", + "\n", + "x2(t-1)->x2(t)\n", + "\n", + "\n", + "0.42\n", + "\n", + "\n", + "\n", + "x2(t-1)->x3(t)\n", + "\n", + "\n", + "-0.27\n", + "\n", + "\n", + "\n", + "x3(t-1)\n", + "\n", + "x3(t-1)\n", + "\n", + "\n", + "\n", + "x3(t-1)->x0(t)\n", + "\n", + "\n", + "0.30\n", + "\n", + "\n", + "\n", + "x3(t-1)->x1(t)\n", + "\n", + "\n", + "-0.34\n", + "\n", + "\n", + "\n", + "x3(t-1)->x2(t)\n", + "\n", + "\n", + "0.11\n", + "\n", + "\n", + "\n", + "x4(t-1)\n", + "\n", + "x4(t-1)\n", + "\n", + "\n", + "\n", + "x4(t-1)->x1(t)\n", + "\n", + "\n", + "0.42\n", + "\n", + "\n", + "\n", + "x4(t-1)->x2(t)\n", + "\n", + "\n", + "0.49\n", + "\n", + "\n", + "\n", + "x4(t-1)->x3(t)\n", + "\n", + "\n", + "-0.16\n", + "\n", + "\n", + "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 9, @@ -483,11 +500,11 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[0. 0.065 0.068 0.038 0.249]\n", - " [0.065 0. 0.13 0.88 0.57 ]\n", - " [0.068 0.13 0. 0.321 0.231]\n", - " [0.038 0.88 0.321 0. 0.839]\n", - " [0.249 0.57 0.231 0.839 0. ]]\n" + "[[0. 0.127 0.104 0.042 0.746]\n", + " [0.127 0. 0.086 0.874 0.739]\n", + " [0.104 0.086 0. 0.404 0.136]\n", + " [0.042 0.874 0.404 0. 0.763]\n", + " [0.746 0.739 0.136 0.763 0. ]]\n" ] } ], @@ -554,14 +571,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "x0(t) <--- x0(t-1) (b<0) (100.0%)\n", - "x1(t) <--- x1(t-1) (b<0) (100.0%)\n", - "x1(t) <--- x3(t-1) (b<0) (100.0%)\n", - "x1(t) <--- x4(t-1) (b>0) (100.0%)\n", - "x2(t) <--- x2(t-1) (b>0) (100.0%)\n", "x2(t) <--- x4(t-1) (b>0) (100.0%)\n", - "x3(t) <--- x0(t-1) (b<0) (100.0%)\n", - "x2(t) <--- x0(t) (b<0) (99.0%)\n" + "x2(t) <--- x2(t-1) (b>0) (100.0%)\n", + "x0(t) <--- x0(t-1) (b<0) (95.0%)\n", + "x1(t) <--- x1(t-1) (b<0) (86.0%)\n", + "x1(t) <--- x4(t-1) (b>0) (85.0%)\n", + "x3(t) <--- x0(t-1) (b<0) (78.0%)\n", + "x2(t) <--- x4(t) (b<0) (60.0%)\n", + "x0(t) <--- x3(t-1) (b>0) (48.0%)\n" ] } ], @@ -602,42 +619,50 @@ "name": "stdout", "output_type": "stream", "text": [ - "DAG[0]: 57.0%\n", + "DAG[0]: 5.0%\n", "\tx0(t) <--- x0(t-1) (b<0)\n", "\tx0(t) <--- x3(t-1) (b>0)\n", + "\tx1(t) <--- x0(t) (b<0)\n", + "\tx1(t) <--- x0(t-1) (b<0)\n", "\tx1(t) <--- x1(t-1) (b<0)\n", - "\tx1(t) <--- x3(t-1) (b<0)\n", "\tx1(t) <--- x4(t-1) (b>0)\n", "\tx2(t) <--- x0(t) (b<0)\n", + "\tx2(t) <--- x4(t) (b<0)\n", "\tx2(t) <--- x2(t-1) (b>0)\n", "\tx2(t) <--- x4(t-1) (b>0)\n", - "\tx3(t) <--- x1(t) (b<0)\n", + "\tx3(t) <--- x0(t) (b>0)\n", "\tx3(t) <--- x0(t-1) (b<0)\n", "\tx3(t) <--- x2(t-1) (b<0)\n", - "DAG[1]: 42.0%\n", + "\tx3(t) <--- x4(t-1) (b<0)\n", + "DAG[1]: 5.0%\n", "\tx0(t) <--- x0(t-1) (b<0)\n", "\tx0(t) <--- x3(t-1) (b>0)\n", + "\tx1(t) <--- x0(t) (b<0)\n", + "\tx1(t) <--- x2(t) (b>0)\n", + "\tx1(t) <--- x0(t-1) (b<0)\n", "\tx1(t) <--- x1(t-1) (b<0)\n", - "\tx1(t) <--- x3(t-1) (b<0)\n", "\tx1(t) <--- x4(t-1) (b>0)\n", "\tx2(t) <--- x0(t) (b<0)\n", + "\tx2(t) <--- x4(t) (b<0)\n", "\tx2(t) <--- x2(t-1) (b>0)\n", "\tx2(t) <--- x4(t-1) (b>0)\n", + "\tx3(t) <--- x0(t) (b>0)\n", "\tx3(t) <--- x0(t-1) (b<0)\n", "\tx3(t) <--- x2(t-1) (b<0)\n", - "DAG[2]: 1.0%\n", + "DAG[2]: 5.0%\n", "\tx0(t) <--- x0(t-1) (b<0)\n", "\tx0(t) <--- x3(t-1) (b>0)\n", "\tx1(t) <--- x1(t-1) (b<0)\n", "\tx1(t) <--- x3(t-1) (b<0)\n", "\tx1(t) <--- x4(t-1) (b>0)\n", - "\tx2(t) <--- x0(t) (b<0)\n", + "\tx2(t) <--- x1(t) (b>0)\n", + "\tx2(t) <--- x3(t) (b>0)\n", + "\tx2(t) <--- x0(t-1) (b>0)\n", "\tx2(t) <--- x2(t-1) (b>0)\n", "\tx2(t) <--- x4(t-1) (b>0)\n", "\tx3(t) <--- x1(t) (b<0)\n", "\tx3(t) <--- x0(t-1) (b<0)\n", - "\tx3(t) <--- x2(t-1) (b<0)\n", - "\tx4(t) <--- x0(t) (b>0)\n" + "\tx3(t) <--- x2(t-1) (b<0)\n" ] } ], @@ -663,17 +688,17 @@ "output_type": "stream", "text": [ "Probability of B0:\n", - " [[0. 0.98 0. 0.02 0. ]\n", - " [0. 0. 0. 0. 0. ]\n", - " [1. 0. 0. 0. 0.01]\n", - " [0.1 1. 0. 0. 0. ]\n", - " [0.51 0. 0.02 0.08 0. ]]\n", + " [[0. 0.6 0.04 0.06 0.14]\n", + " [0.39 0. 0.25 0.18 0.16]\n", + " [0.65 0.68 0. 0.67 0.84]\n", + " [0.51 0.6 0.07 0. 0.66]\n", + " [0.35 0.28 0.01 0.09 0. ]]\n", "Probability of B1:\n", - " [[1. 0. 0.02 1. 0. ]\n", - " [0. 1. 1. 1. 1. ]\n", - " [0.03 0. 1. 0.05 1. ]\n", - " [1. 0.16 1. 0. 1. ]\n", - " [0. 0. 0. 0.25 0. ]]\n" + " [[1. 0. 0.3 1. 0.02]\n", + " [0.56 1. 0.94 0.67 1. ]\n", + " [0.8 0.02 1. 0.25 1. ]\n", + " [1. 0.24 1. 0.08 1. ]\n", + " [0.02 0. 0.03 0.07 0. ]]\n" ] } ], @@ -727,269 +752,318 @@ " \n", " \n", " 0\n", - " x1(t)\n", - " x0(t)\n", - " -0.131094\n", + " x0(t-1)\n", + " x2(t)\n", + " 0.181032\n", " 1.00\n", " \n", " \n", " 1\n", - " x4(t-1)\n", + " x2(t-1)\n", " x2(t)\n", - " 0.463646\n", + " 0.388777\n", " 1.00\n", " \n", " \n", " 2\n", " x4(t-1)\n", - " x3(t)\n", - " -0.224349\n", + " x1(t)\n", + " 0.427308\n", " 1.00\n", " \n", " \n", " 3\n", - " x0(t-1)\n", - " x0(t)\n", - " -0.297905\n", + " x1(t-1)\n", + " x1(t)\n", + " -0.338691\n", " 1.00\n", " \n", " \n", " 4\n", - " x1(t)\n", + " x0(t-1)\n", " x3(t)\n", - " -0.217983\n", + " -0.397439\n", " 1.00\n", " \n", " \n", " 5\n", " x3(t-1)\n", " x0(t)\n", - " 0.273013\n", + " 0.345461\n", " 1.00\n", " \n", " \n", " 6\n", - " x2(t-1)\n", - " x3(t)\n", - " -0.177952\n", + " x4(t-1)\n", + " x2(t)\n", + " 0.501859\n", " 1.00\n", " \n", " \n", " 7\n", - " x0(t-1)\n", + " x4(t-1)\n", " x3(t)\n", - " -0.269388\n", + " -0.253700\n", " 1.00\n", " \n", " \n", " 8\n", - " x1(t-1)\n", - " x1(t)\n", - " -0.260914\n", + " x0(t-1)\n", + " x0(t)\n", + " -0.357296\n", " 1.00\n", " \n", " \n", " 9\n", " x2(t-1)\n", - " x2(t)\n", - " 0.310371\n", + " x3(t)\n", + " -0.222886\n", " 1.00\n", " \n", " \n", " 10\n", - " x4(t-1)\n", - " x1(t)\n", - " 0.397907\n", + " x3(t-1)\n", + " x3(t)\n", + " 0.101008\n", " 1.00\n", " \n", " \n", " 11\n", - " x0(t)\n", - " x2(t)\n", - " -0.404106\n", - " 1.00\n", + " x3(t-1)\n", + " x1(t)\n", + " -0.315462\n", + " 0.99\n", " \n", " \n", " 12\n", - " x1(t)\n", - " x2(t)\n", - " 0.090684\n", - " 1.00\n", + " x2(t-1)\n", + " x0(t)\n", + " 0.090369\n", + " 0.99\n", " \n", " \n", " 13\n", - " x3(t-1)\n", + " x2(t-1)\n", " x1(t)\n", - " -0.206743\n", - " 0.99\n", + " -0.172693\n", + " 0.98\n", " \n", " \n", " 14\n", - " x3(t-1)\n", - " x3(t)\n", - " 0.091307\n", - " 0.93\n", + " x1(t-1)\n", + " x2(t)\n", + " -0.063602\n", + " 0.89\n", " \n", " \n", " 15\n", - " x2(t-1)\n", - " x1(t)\n", - " -0.121280\n", - " 0.86\n", + " x4(t)\n", + " x2(t)\n", + " -0.449165\n", + " 0.89\n", " \n", " \n", " 16\n", - " x0(t)\n", - " x4(t)\n", - " 0.106232\n", - " 0.86\n", + " x3(t-1)\n", + " x2(t)\n", + " -0.079600\n", + " 0.89\n", " \n", " \n", " 17\n", - " x0(t-1)\n", + " x0(t)\n", " x2(t)\n", - " 0.083258\n", - " 0.79\n", + " -0.280635\n", + " 0.83\n", " \n", " \n", " 18\n", - " x3(t-1)\n", - " x2(t)\n", - " -0.085736\n", - " 0.73\n", + " x1(t-1)\n", + " x0(t)\n", + " 0.057164\n", + " 0.82\n", " \n", " \n", " 19\n", + " x4(t-1)\n", " x0(t)\n", - " x3(t)\n", - " 0.075516\n", - " 0.68\n", + " -0.050805\n", + " 0.79\n", " \n", " \n", " 20\n", - " x2(t-1)\n", - " x0(t)\n", - " 0.070990\n", - " 0.58\n", + " x4(t)\n", + " x3(t)\n", + " -0.151835\n", + " 0.76\n", " \n", " \n", " 21\n", - " x1(t-1)\n", + " x1(t)\n", " x2(t)\n", - " -0.043181\n", - " 0.55\n", + " 0.211957\n", + " 0.75\n", " \n", " \n", " 22\n", - " x4(t-1)\n", - " x0(t)\n", - " -0.047978\n", - " 0.50\n", + " x1(t-1)\n", + " x3(t)\n", + " -0.021313\n", + " 0.75\n", " \n", " \n", " 23\n", - " x1(t-1)\n", - " x0(t)\n", - " 0.026918\n", - " 0.32\n", + " x3(t)\n", + " x2(t)\n", + " 0.248101\n", + " 0.66\n", " \n", " \n", " 24\n", - " x2(t)\n", - " x4(t)\n", - " -0.049998\n", - " 0.29\n", + " x0(t)\n", + " x3(t)\n", + " 0.259859\n", + " 0.64\n", " \n", " \n", " 25\n", - " x3(t)\n", - " x0(t)\n", - " 0.053440\n", - " 0.23\n", + " x3(t-1)\n", + " x4(t)\n", + " 0.061849\n", + " 0.62\n", " \n", " \n", " 26\n", - " x4(t)\n", - " x2(t)\n", - " -0.053585\n", - " 0.22\n", + " x1(t)\n", + " x3(t)\n", + " -0.218490\n", + " 0.62\n", " \n", " \n", " 27\n", - " x3(t)\n", - " x2(t)\n", - " -0.034164\n", - " 0.22\n", + " x1(t)\n", + " x0(t)\n", + " -0.199704\n", + " 0.61\n", " \n", " \n", " 28\n", - " x3(t-1)\n", + " x1(t)\n", " x4(t)\n", - " 0.069278\n", - " 0.20\n", + " -0.104466\n", + " 0.56\n", " \n", " \n", " 29\n", + " x0(t-1)\n", " x1(t)\n", - " x4(t)\n", - " -0.032277\n", - " 0.17\n", + " -0.119971\n", + " 0.53\n", " \n", " \n", " 30\n", + " x2(t-1)\n", " x4(t)\n", - " x3(t)\n", - " -0.041963\n", - " 0.16\n", + " 0.017608\n", + " 0.50\n", " \n", " \n", " 31\n", - " x1(t-1)\n", - " x3(t)\n", - " 0.018327\n", - " 0.14\n", + " x4(t-1)\n", + " x4(t)\n", + " -0.041991\n", + " 0.47\n", " \n", " \n", " 32\n", - " x2(t)\n", - " x3(t)\n", - " -0.017783\n", - " 0.13\n", + " x1(t-1)\n", + " x4(t)\n", + " 0.029382\n", + " 0.42\n", " \n", " \n", " 33\n", " x0(t-1)\n", - " x1(t)\n", - " 0.084306\n", - " 0.04\n", + " x4(t)\n", + " -0.055934\n", + " 0.42\n", " \n", " \n", " 34\n", - " x3(t)\n", " x4(t)\n", - " -0.117271\n", - " 0.02\n", + " x1(t)\n", + " -0.063677\n", + " 0.42\n", " \n", " \n", " 35\n", " x4(t)\n", " x0(t)\n", - " 0.081813\n", - " 0.01\n", + " -0.066867\n", + " 0.40\n", " \n", " \n", " 36\n", - " x0(t-1)\n", - " x4(t)\n", - " -0.085855\n", - " 0.01\n", + " x0(t)\n", + " x1(t)\n", + " -0.719255\n", + " 0.39\n", " \n", " \n", " 37\n", - " x1(t-1)\n", + " x0(t)\n", + " x4(t)\n", + " 0.174717\n", + " 0.37\n", + " \n", + " \n", + " 38\n", + " x2(t)\n", + " x1(t)\n", + " 0.212699\n", + " 0.25\n", + " \n", + " \n", + " 39\n", + " x3(t)\n", + " x1(t)\n", + " -0.308596\n", + " 0.20\n", + " \n", + " \n", + " 40\n", + " x2(t)\n", + " x3(t)\n", + " -0.084192\n", + " 0.18\n", + " \n", + " \n", + " 41\n", + " x3(t)\n", + " x0(t)\n", + " 0.154238\n", + " 0.11\n", + " \n", + " \n", + " 42\n", + " x3(t)\n", " x4(t)\n", - " 0.036685\n", - " 0.01\n", + " -0.205918\n", + " 0.10\n", + " \n", + " \n", + " 43\n", + " x2(t)\n", + " x0(t)\n", + " -0.217316\n", + " 0.06\n", + " \n", + " \n", + " 44\n", + " x2(t)\n", + " x4(t)\n", + " -0.093614\n", + " 0.03\n", " \n", " \n", "\n", @@ -997,44 +1071,51 @@ ], "text/plain": [ " from to effect probability\n", - "0 x1(t) x0(t) -0.131094 1.00\n", - "1 x4(t-1) x2(t) 0.463646 1.00\n", - "2 x4(t-1) x3(t) -0.224349 1.00\n", - "3 x0(t-1) x0(t) -0.297905 1.00\n", - "4 x1(t) x3(t) -0.217983 1.00\n", - "5 x3(t-1) x0(t) 0.273013 1.00\n", - "6 x2(t-1) x3(t) -0.177952 1.00\n", - "7 x0(t-1) x3(t) -0.269388 1.00\n", - "8 x1(t-1) x1(t) -0.260914 1.00\n", - "9 x2(t-1) x2(t) 0.310371 1.00\n", - "10 x4(t-1) x1(t) 0.397907 1.00\n", - "11 x0(t) x2(t) -0.404106 1.00\n", - "12 x1(t) x2(t) 0.090684 1.00\n", - "13 x3(t-1) x1(t) -0.206743 0.99\n", - "14 x3(t-1) x3(t) 0.091307 0.93\n", - "15 x2(t-1) x1(t) -0.121280 0.86\n", - "16 x0(t) x4(t) 0.106232 0.86\n", - "17 x0(t-1) x2(t) 0.083258 0.79\n", - "18 x3(t-1) x2(t) -0.085736 0.73\n", - "19 x0(t) x3(t) 0.075516 0.68\n", - "20 x2(t-1) x0(t) 0.070990 0.58\n", - "21 x1(t-1) x2(t) -0.043181 0.55\n", - "22 x4(t-1) x0(t) -0.047978 0.50\n", - "23 x1(t-1) x0(t) 0.026918 0.32\n", - "24 x2(t) x4(t) -0.049998 0.29\n", - "25 x3(t) x0(t) 0.053440 0.23\n", - "26 x4(t) x2(t) -0.053585 0.22\n", - "27 x3(t) x2(t) -0.034164 0.22\n", - "28 x3(t-1) x4(t) 0.069278 0.20\n", - "29 x1(t) x4(t) -0.032277 0.17\n", - "30 x4(t) x3(t) -0.041963 0.16\n", - "31 x1(t-1) x3(t) 0.018327 0.14\n", - "32 x2(t) x3(t) -0.017783 0.13\n", - "33 x0(t-1) x1(t) 0.084306 0.04\n", - "34 x3(t) x4(t) -0.117271 0.02\n", - "35 x4(t) x0(t) 0.081813 0.01\n", - "36 x0(t-1) x4(t) -0.085855 0.01\n", - "37 x1(t-1) x4(t) 0.036685 0.01" + "0 x0(t-1) x2(t) 0.181032 1.00\n", + "1 x2(t-1) x2(t) 0.388777 1.00\n", + "2 x4(t-1) x1(t) 0.427308 1.00\n", + "3 x1(t-1) x1(t) -0.338691 1.00\n", + "4 x0(t-1) x3(t) -0.397439 1.00\n", + "5 x3(t-1) x0(t) 0.345461 1.00\n", + "6 x4(t-1) x2(t) 0.501859 1.00\n", + "7 x4(t-1) x3(t) -0.253700 1.00\n", + "8 x0(t-1) x0(t) -0.357296 1.00\n", + "9 x2(t-1) x3(t) -0.222886 1.00\n", + "10 x3(t-1) x3(t) 0.101008 1.00\n", + "11 x3(t-1) x1(t) -0.315462 0.99\n", + "12 x2(t-1) x0(t) 0.090369 0.99\n", + "13 x2(t-1) x1(t) -0.172693 0.98\n", + "14 x1(t-1) x2(t) -0.063602 0.89\n", + "15 x4(t) x2(t) -0.449165 0.89\n", + "16 x3(t-1) x2(t) -0.079600 0.89\n", + "17 x0(t) x2(t) -0.280635 0.83\n", + "18 x1(t-1) x0(t) 0.057164 0.82\n", + "19 x4(t-1) x0(t) -0.050805 0.79\n", + "20 x4(t) x3(t) -0.151835 0.76\n", + "21 x1(t) x2(t) 0.211957 0.75\n", + "22 x1(t-1) x3(t) -0.021313 0.75\n", + "23 x3(t) x2(t) 0.248101 0.66\n", + "24 x0(t) x3(t) 0.259859 0.64\n", + "25 x3(t-1) x4(t) 0.061849 0.62\n", + "26 x1(t) x3(t) -0.218490 0.62\n", + "27 x1(t) x0(t) -0.199704 0.61\n", + "28 x1(t) x4(t) -0.104466 0.56\n", + "29 x0(t-1) x1(t) -0.119971 0.53\n", + "30 x2(t-1) x4(t) 0.017608 0.50\n", + "31 x4(t-1) x4(t) -0.041991 0.47\n", + "32 x1(t-1) x4(t) 0.029382 0.42\n", + "33 x0(t-1) x4(t) -0.055934 0.42\n", + "34 x4(t) x1(t) -0.063677 0.42\n", + "35 x4(t) x0(t) -0.066867 0.40\n", + "36 x0(t) x1(t) -0.719255 0.39\n", + "37 x0(t) x4(t) 0.174717 0.37\n", + "38 x2(t) x1(t) 0.212699 0.25\n", + "39 x3(t) x1(t) -0.308596 0.20\n", + "40 x2(t) x3(t) -0.084192 0.18\n", + "41 x3(t) x0(t) 0.154238 0.11\n", + "42 x3(t) x4(t) -0.205918 0.10\n", + "43 x2(t) x0(t) -0.217316 0.06\n", + "44 x2(t) x4(t) -0.093614 0.03" ] }, "execution_count": 17, @@ -1092,39 +1173,39 @@ " \n", " \n", " \n", - " 1\n", + " 6\n", " x4(t-1)\n", " x2(t)\n", - " 0.463646\n", + " 0.501859\n", " 1.00\n", " \n", " \n", - " 10\n", + " 2\n", " x4(t-1)\n", " x1(t)\n", - " 0.397907\n", + " 0.427308\n", " 1.00\n", " \n", " \n", - " 9\n", + " 1\n", " x2(t-1)\n", " x2(t)\n", - " 0.310371\n", + " 0.388777\n", " 1.00\n", " \n", " \n", " 5\n", " x3(t-1)\n", " x0(t)\n", - " 0.273013\n", + " 0.345461\n", " 1.00\n", " \n", " \n", - " 16\n", + " 24\n", " x0(t)\n", - " x4(t)\n", - " 0.106232\n", - " 0.86\n", + " x3(t)\n", + " 0.259859\n", + " 0.64\n", " \n", " \n", "\n", @@ -1132,11 +1213,11 @@ ], "text/plain": [ " from to effect probability\n", - "1 x4(t-1) x2(t) 0.463646 1.00\n", - "10 x4(t-1) x1(t) 0.397907 1.00\n", - "9 x2(t-1) x2(t) 0.310371 1.00\n", - "5 x3(t-1) x0(t) 0.273013 1.00\n", - "16 x0(t) x4(t) 0.106232 0.86" + "6 x4(t-1) x2(t) 0.501859 1.00\n", + "2 x4(t-1) x1(t) 0.427308 1.00\n", + "1 x2(t-1) x2(t) 0.388777 1.00\n", + "5 x3(t-1) x0(t) 0.345461 1.00\n", + "24 x0(t) x3(t) 0.259859 0.64" ] }, "execution_count": 18, @@ -1189,39 +1270,39 @@ " \n", " \n", " \n", - " 8\n", - " x1(t-1)\n", + " 2\n", + " x4(t-1)\n", " x1(t)\n", - " -0.260914\n", + " 0.427308\n", " 1.00\n", " \n", " \n", - " 10\n", - " x4(t-1)\n", + " 3\n", + " x1(t-1)\n", " x1(t)\n", - " 0.397907\n", + " -0.338691\n", " 1.00\n", " \n", " \n", - " 13\n", + " 11\n", " x3(t-1)\n", " x1(t)\n", - " -0.206743\n", + " -0.315462\n", " 0.99\n", " \n", " \n", - " 15\n", + " 13\n", " x2(t-1)\n", " x1(t)\n", - " -0.121280\n", - " 0.86\n", + " -0.172693\n", + " 0.98\n", " \n", " \n", - " 33\n", + " 29\n", " x0(t-1)\n", " x1(t)\n", - " 0.084306\n", - " 0.04\n", + " -0.119971\n", + " 0.53\n", " \n", " \n", "\n", @@ -1229,11 +1310,11 @@ ], "text/plain": [ " from to effect probability\n", - "8 x1(t-1) x1(t) -0.260914 1.00\n", - "10 x4(t-1) x1(t) 0.397907 1.00\n", - "13 x3(t-1) x1(t) -0.206743 0.99\n", - "15 x2(t-1) x1(t) -0.121280 0.86\n", - "33 x0(t-1) x1(t) 0.084306 0.04" + "2 x4(t-1) x1(t) 0.427308 1.00\n", + "3 x1(t-1) x1(t) -0.338691 1.00\n", + "11 x3(t-1) x1(t) -0.315462 0.99\n", + "13 x2(t-1) x1(t) -0.172693 0.98\n", + "29 x0(t-1) x1(t) -0.119971 0.53" ] }, "execution_count": 19, @@ -1260,10 +1341,10 @@ { "data": { "text/plain": [ - "(array([ 3., 1., 6., 18., 13., 22., 9., 10., 9., 9.]),\n", - " array([0.215, 0.232, 0.25 , 0.267, 0.285, 0.302, 0.32 , 0.338, 0.355,\n", - " 0.373, 0.39 ]),\n", - " )" + "(array([ 1., 3., 3., 10., 17., 15., 29., 15., 6., 1.]),\n", + " array([0.281, 0.299, 0.317, 0.335, 0.353, 0.371, 0.389, 0.407, 0.424,\n", + " 0.442, 0.46 ]),\n", + " )" ] }, "execution_count": 20, @@ -1272,7 +1353,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -1304,7 +1385,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -1318,7 +1399,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.8.10" } }, "nbformat": 4, diff --git a/examples/VARMALiNGAM.ipynb b/examples/VARMALiNGAM.ipynb index 4bb4e38..ba4a5b3 100644 --- a/examples/VARMALiNGAM.ipynb +++ b/examples/VARMALiNGAM.ipynb @@ -24,7 +24,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "['1.16.2', '0.24.2', '0.11.1', '1.5.2']\n" + "['1.24.4', '2.0.3', '0.20.1', '1.8.3']\n" ] } ], @@ -95,20 +95,11 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], "source": [ "model = lingam.VARMALiNGAM(order=(1, 1), criterion=None)\n", "model.fit(X)" @@ -156,11 +147,11 @@ { "data": { "text/plain": [ - "array([[ 0. , 0. , -0.238, 0. , 0. ],\n", - " [-0.392, 0. , 0.182, 0. , 0. ],\n", + "array([[ 0. , 0. , -0.194, 0. , 0. ],\n", + " [-0.354, 0. , 0.191, 0. , 0. ],\n", " [ 0. , 0. , 0. , 0. , 0. ],\n", - " [ 0.523, -0.149, 0. , 0. , 0. ],\n", - " [ 0. , 0. , 0. , 0. , 0. ]])" + " [ 0.558, -0.228, 0. , 0. , 0. ],\n", + " [ 0.115, 0. , 0. , 0. , 0. ]])" ] }, "execution_count": 5, @@ -181,11 +172,11 @@ { "data": { "text/plain": [ - "array([[-0.145, -0.288, -0.418, 0.041, 0.592],\n", - " [-0.324, 0.027, 0.024, 0.231, 0.379],\n", - " [-0.249, 0.191, -0.01 , 0.136, 0.261],\n", - " [ 0.182, 0.698, 0.21 , 0.197, -0.815],\n", - " [-0.486, 0.063, -0.263, 0.112, 0.26 ]])" + "array([[ 0. , -0.394, -0.509, 0. , 0.659],\n", + " [-0.3 , 0. , 0. , 0.211, 0.404],\n", + " [-0.281, 0.21 , 0. , 0.118, 0.25 ],\n", + " [ 0.082, 0.762, 0.178, 0.137, -0.819],\n", + " [-0.507, 0. , -0.278, 0. , 0.336]])" ] }, "execution_count": 6, @@ -206,11 +197,11 @@ { "data": { "text/plain": [ - "array([[ 0.247, -0.12 , -0.128, -0.124, 0.037],\n", - " [ 0.378, 0.319, -0.12 , -0.023, 0.573],\n", - " [-0.107, -0.624, 0.012, -0.303, -0.246],\n", - " [-0.22 , 0.26 , 0.313, 0.227, -0.057],\n", - " [ 0.255, 0.405, 0.41 , 0.256, -0.286]])" + "array([[ 0. , 0. , 0. , 0. , 0. ],\n", + " [ 0.209, 0.365, 0. , 0. , 0.531],\n", + " [ 0. , -0.579, -0.105, -0.298, -0.235],\n", + " [ 0. , 0.171, 0.414, 0.302, 0. ],\n", + " [ 0.297, 0.435, 0.482, 0.376, -0.438]])" ] }, "execution_count": 7, @@ -241,7 +232,7 @@ "array([[ 0. , 0. , -0.238, 0. , 0. ],\n", " [-0.392, 0. , 0.182, 0. , 0. ],\n", " [ 0. , 0. , 0. , 0. , 0. ],\n", - " [ 0.523, -0.149, 0. , 0. , 0. ],\n", + " [ 0.587, -0.209, 0. , 0. , 0. ],\n", " [ 0. , 0. , 0. , 0. , 0. ]])" ] }, @@ -271,126 +262,159 @@ { "data": { "image/svg+xml": [ - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "\r\n", - "%3\r\n", - "\r\n", - "\r\n", - "y0(t)\r\n", - "\r\n", - "y0(t)\r\n", - "\r\n", - "\r\n", - "y1(t)\r\n", - "\r\n", - "y1(t)\r\n", - "\r\n", - "\r\n", - "y0(t)->y1(t)\r\n", - "\r\n", - "\r\n", - "-0.39\r\n", - "\r\n", - "\r\n", - "y3(t)\r\n", - "\r\n", - "y3(t)\r\n", - "\r\n", - "\r\n", - "y0(t)->y3(t)\r\n", - "\r\n", - "\r\n", - "0.52\r\n", - "\r\n", - "\r\n", - "y2(t)\r\n", - "\r\n", - "y2(t)\r\n", - "\r\n", - "\r\n", - "y4(t)\r\n", - "\r\n", - "y4(t)\r\n", - "\r\n", - "\r\n", - "y0(t-1)\r\n", - "\r\n", - "y0(t-1)\r\n", - "\r\n", - "\r\n", - "y0(t-1)->y1(t)\r\n", - "\r\n", - "\r\n", - "-0.32\r\n", - "\r\n", - "\r\n", - "y0(t-1)->y4(t)\r\n", - "\r\n", - "\r\n", - "-0.49\r\n", - "\r\n", - "\r\n", - "y1(t-1)\r\n", - "\r\n", - "y1(t-1)\r\n", - "\r\n", - "\r\n", - "y1(t-1)->y3(t)\r\n", - "\r\n", - "\r\n", - "0.70\r\n", - "\r\n", - "\r\n", - "y2(t-1)\r\n", - "\r\n", - "y2(t-1)\r\n", - "\r\n", - "\r\n", - "y2(t-1)->y0(t)\r\n", - "\r\n", - "\r\n", - "-0.42\r\n", - "\r\n", - "\r\n", - "y3(t-1)\r\n", - "\r\n", - "y3(t-1)\r\n", - "\r\n", - "\r\n", - "y4(t-1)\r\n", - "\r\n", - "y4(t-1)\r\n", - "\r\n", - "\r\n", - "y4(t-1)->y0(t)\r\n", - "\r\n", - "\r\n", - "0.59\r\n", - "\r\n", - "\r\n", - "y4(t-1)->y1(t)\r\n", - "\r\n", - "\r\n", - "0.38\r\n", - "\r\n", - "\r\n", - "y4(t-1)->y3(t)\r\n", - "\r\n", - "\r\n", - "-0.81\r\n", - "\r\n", - "\r\n", - "\r\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "\n", + "y0(t)\n", + "\n", + "y0(t)\n", + "\n", + "\n", + "\n", + "y1(t)\n", + "\n", + "y1(t)\n", + "\n", + "\n", + "\n", + "y0(t)->y1(t)\n", + "\n", + "\n", + "-0.35\n", + "\n", + "\n", + "\n", + "y3(t)\n", + "\n", + "y3(t)\n", + "\n", + "\n", + "\n", + "y0(t)->y3(t)\n", + "\n", + "\n", + "0.56\n", + "\n", + "\n", + "\n", + "y2(t)\n", + "\n", + "y2(t)\n", + "\n", + "\n", + "\n", + "y4(t)\n", + "\n", + "y4(t)\n", + "\n", + "\n", + "\n", + "y0(t-1)\n", + "\n", + "y0(t-1)\n", + "\n", + "\n", + "\n", + "y0(t-1)->y1(t)\n", + "\n", + "\n", + "-0.30\n", + "\n", + "\n", + "\n", + "y0(t-1)->y4(t)\n", + "\n", + "\n", + "-0.51\n", + "\n", + "\n", + "\n", + "y1(t-1)\n", + "\n", + "y1(t-1)\n", + "\n", + "\n", + "\n", + "y1(t-1)->y0(t)\n", + "\n", + "\n", + "-0.39\n", + "\n", + "\n", + "\n", + "y1(t-1)->y3(t)\n", + "\n", + "\n", + "0.76\n", + "\n", + "\n", + "\n", + "y2(t-1)\n", + "\n", + "y2(t-1)\n", + "\n", + "\n", + "\n", + "y2(t-1)->y0(t)\n", + "\n", + "\n", + "-0.51\n", + "\n", + "\n", + "\n", + "y3(t-1)\n", + "\n", + "y3(t-1)\n", + "\n", + "\n", + "\n", + "y4(t-1)\n", + "\n", + "y4(t-1)\n", + "\n", + "\n", + "\n", + "y4(t-1)->y0(t)\n", + "\n", + "\n", + "0.66\n", + "\n", + "\n", + "\n", + "y4(t-1)->y1(t)\n", + "\n", + "\n", + "0.40\n", + "\n", + "\n", + "\n", + "y4(t-1)->y3(t)\n", + "\n", + "\n", + "-0.82\n", + "\n", + "\n", + "\n", + "y4(t-1)->y4(t)\n", + "\n", + "\n", + "0.34\n", + "\n", + "\n", + "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 9, @@ -420,11 +444,11 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[0. 0.517 0.793 0.004 0.001]\n", - " [0.517 0. 0.09 0.312 0.071]\n", - " [0.793 0.09 0. 0.058 0.075]\n", - " [0.004 0.312 0.058 0. 0.011]\n", - " [0.001 0.071 0.075 0.011 0. ]]\n" + "[[0. 0.622 0.388 0. 0.539]\n", + " [0.622 0. 0.087 0.469 0.069]\n", + " [0.388 0.087 0. 0.248 0.229]\n", + " [0. 0.469 0.248 0. 0.021]\n", + " [0.539 0.069 0.229 0.021 0. ]]\n" ] } ], @@ -450,7 +474,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -491,14 +515,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "y0(t) <--- y2(t-1) (b<0) (100.0%)\n", - "y0(t) <--- y4(t-1) (b>0) (100.0%)\n", - "y1(t) <--- e4(t-1) (b>0) (100.0%)\n", - "y2(t) <--- e1(t-1) (b<0) (100.0%)\n", - "y3(t) <--- y0(t) (b>0) (100.0%)\n", - "y3(t) <--- y1(t-1) (b>0) (100.0%)\n", - "y3(t) <--- y4(t-1) (b<0) (100.0%)\n", - "y4(t) <--- y0(t-1) (b<0) (100.0%)\n" + "y3(t) <--- y4(t-1) (b<0) (98.0%)\n", + "y3(t) <--- y1(t-1) (b>0) (98.0%)\n", + "y0(t) <--- y4(t-1) (b>0) (96.0%)\n", + "y1(t) <--- e4(t-1) (b>0) (91.0%)\n", + "y2(t) <--- e1(t-1) (b<0) (80.0%)\n", + "y4(t) <--- e2(t-1) (b>0) (71.0%)\n", + "y1(t) <--- e0(t-1) (b>0) (64.0%)\n", + "y2(t) <--- e4(t-1) (b<0) (62.0%)\n" ] } ], @@ -540,60 +564,120 @@ "name": "stdout", "output_type": "stream", "text": [ - "DAG[0]: 40.0%\n", + "DAG[0]: 1.0%\n", + "\ty0(t) <--- y1(t) (b<0)\n", + "\ty0(t) <--- y1(t-1) (b<0)\n", "\ty0(t) <--- y2(t-1) (b<0)\n", "\ty0(t) <--- y4(t-1) (b>0)\n", - "\ty1(t) <--- y0(t) (b<0)\n", - "\ty1(t) <--- y0(t-1) (b<0)\n", - "\ty1(t) <--- y4(t-1) (b>0)\n", + "\ty0(t) <--- e0(t-1) (b>0)\n", + "\ty0(t) <--- e1(t-1) (b<0)\n", + "\ty0(t) <--- e3(t-1) (b>0)\n", + "\ty0(t) <--- e4(t-1) (b>0)\n", + "\ty1(t) <--- y2(t) (b>0)\n", + "\ty1(t) <--- y2(t-1) (b>0)\n", + "\ty1(t) <--- y3(t-1) (b>0)\n", + "\ty1(t) <--- y4(t-1) (b<0)\n", "\ty1(t) <--- e0(t-1) (b>0)\n", - "\ty1(t) <--- e1(t-1) (b>0)\n", + "\ty1(t) <--- e2(t-1) (b>0)\n", + "\ty1(t) <--- e3(t-1) (b>0)\n", "\ty1(t) <--- e4(t-1) (b>0)\n", - "\ty2(t) <--- e1(t-1) (b<0)\n", + "\ty2(t) <--- y4(t-1) (b>0)\n", + "\ty2(t) <--- e0(t-1) (b<0)\n", + "\ty2(t) <--- e2(t-1) (b<0)\n", "\ty2(t) <--- e3(t-1) (b<0)\n", - "\ty3(t) <--- y0(t) (b>0)\n", + "\ty2(t) <--- e4(t-1) (b<0)\n", + "\ty3(t) <--- y1(t) (b<0)\n", + "\ty3(t) <--- y2(t) (b>0)\n", "\ty3(t) <--- y1(t-1) (b>0)\n", + "\ty3(t) <--- y2(t-1) (b>0)\n", + "\ty3(t) <--- y3(t-1) (b>0)\n", "\ty3(t) <--- y4(t-1) (b<0)\n", + "\ty3(t) <--- e0(t-1) (b>0)\n", "\ty3(t) <--- e2(t-1) (b>0)\n", - "\ty4(t) <--- y0(t-1) (b<0)\n", + "\ty3(t) <--- e3(t-1) (b>0)\n", + "\ty3(t) <--- e4(t-1) (b>0)\n", + "\ty4(t) <--- y0(t) (b>0)\n", + "\ty4(t) <--- y1(t) (b>0)\n", + "\ty4(t) <--- y3(t) (b>0)\n", + "\ty4(t) <--- y1(t-1) (b>0)\n", + "\ty4(t) <--- y2(t-1) (b>0)\n", + "\ty4(t) <--- y3(t-1) (b>0)\n", + "\ty4(t) <--- y4(t-1) (b<0)\n", + "\ty4(t) <--- e0(t-1) (b<0)\n", "\ty4(t) <--- e1(t-1) (b>0)\n", "\ty4(t) <--- e2(t-1) (b>0)\n", - "DAG[1]: 19.0%\n", + "\ty4(t) <--- e3(t-1) (b<0)\n", + "\ty4(t) <--- e4(t-1) (b<0)\n", + "DAG[1]: 1.0%\n", + "\ty0(t) <--- y1(t-1) (b<0)\n", "\ty0(t) <--- y2(t-1) (b<0)\n", "\ty0(t) <--- y4(t-1) (b>0)\n", - "\ty1(t) <--- y0(t) (b<0)\n", + "\ty0(t) <--- e0(t-1) (b>0)\n", + "\ty1(t) <--- y3(t) (b<0)\n", "\ty1(t) <--- y0(t-1) (b<0)\n", - "\ty1(t) <--- y4(t-1) (b>0)\n", + "\ty1(t) <--- y1(t-1) (b>0)\n", "\ty1(t) <--- e0(t-1) (b>0)\n", + "\ty1(t) <--- e1(t-1) (b>0)\n", "\ty1(t) <--- e4(t-1) (b>0)\n", + "\ty2(t) <--- y1(t) (b>0)\n", + "\ty2(t) <--- y3(t) (b>0)\n", + "\ty2(t) <--- y4(t-1) (b>0)\n", + "\ty2(t) <--- e0(t-1) (b<0)\n", "\ty2(t) <--- e1(t-1) (b<0)\n", - "\ty2(t) <--- e3(t-1) (b<0)\n", + "\ty2(t) <--- e3(t-1) (b>0)\n", + "\ty2(t) <--- e4(t-1) (b<0)\n", "\ty3(t) <--- y0(t) (b>0)\n", "\ty3(t) <--- y1(t-1) (b>0)\n", "\ty3(t) <--- y4(t-1) (b<0)\n", + "\ty3(t) <--- e0(t-1) (b<0)\n", + "\ty3(t) <--- e1(t-1) (b>0)\n", "\ty3(t) <--- e2(t-1) (b>0)\n", + "\ty4(t) <--- y0(t) (b>0)\n", "\ty4(t) <--- y0(t-1) (b<0)\n", + "\ty4(t) <--- y1(t-1) (b>0)\n", + "\ty4(t) <--- y4(t-1) (b<0)\n", + "\ty4(t) <--- e0(t-1) (b<0)\n", "\ty4(t) <--- e1(t-1) (b>0)\n", "\ty4(t) <--- e2(t-1) (b>0)\n", - "DAG[2]: 7.0%\n", - "\ty0(t) <--- y2(t) (b<0)\n", + "DAG[2]: 1.0%\n", + "\ty0(t) <--- y1(t-1) (b<0)\n", "\ty0(t) <--- y2(t-1) (b<0)\n", "\ty0(t) <--- y4(t-1) (b>0)\n", + "\ty0(t) <--- e0(t-1) (b>0)\n", "\ty1(t) <--- y0(t) (b<0)\n", - "\ty1(t) <--- y0(t-1) (b<0)\n", + "\ty1(t) <--- y2(t) (b>0)\n", "\ty1(t) <--- y4(t-1) (b>0)\n", "\ty1(t) <--- e0(t-1) (b>0)\n", "\ty1(t) <--- e1(t-1) (b>0)\n", + "\ty1(t) <--- e2(t-1) (b>0)\n", + "\ty1(t) <--- e3(t-1) (b>0)\n", "\ty1(t) <--- e4(t-1) (b>0)\n", + "\ty2(t) <--- y0(t) (b<0)\n", + "\ty2(t) <--- y0(t-1) (b<0)\n", + "\ty2(t) <--- y4(t-1) (b>0)\n", "\ty2(t) <--- e1(t-1) (b<0)\n", + "\ty2(t) <--- e2(t-1) (b<0)\n", "\ty2(t) <--- e3(t-1) (b<0)\n", - "\ty3(t) <--- y0(t) (b>0)\n", + "\ty2(t) <--- e4(t-1) (b<0)\n", + "\ty3(t) <--- y1(t) (b<0)\n", + "\ty3(t) <--- y2(t) (b>0)\n", "\ty3(t) <--- y1(t-1) (b>0)\n", + "\ty3(t) <--- y2(t-1) (b>0)\n", + "\ty3(t) <--- y3(t-1) (b>0)\n", "\ty3(t) <--- y4(t-1) (b<0)\n", + "\ty3(t) <--- e1(t-1) (b>0)\n", "\ty3(t) <--- e2(t-1) (b>0)\n", - "\ty4(t) <--- y0(t-1) (b<0)\n", - "\ty4(t) <--- e1(t-1) (b>0)\n", - "\ty4(t) <--- e2(t-1) (b>0)\n" + "\ty3(t) <--- e3(t-1) (b>0)\n", + "\ty3(t) <--- e4(t-1) (b>0)\n", + "\ty4(t) <--- y0(t) (b>0)\n", + "\ty4(t) <--- y1(t) (b>0)\n", + "\ty4(t) <--- y3(t) (b>0)\n", + "\ty4(t) <--- y1(t-1) (b>0)\n", + "\ty4(t) <--- y2(t-1) (b>0)\n", + "\ty4(t) <--- y4(t-1) (b<0)\n", + "\ty4(t) <--- e0(t-1) (b<0)\n", + "\ty4(t) <--- e2(t-1) (b>0)\n", + "\ty4(t) <--- e4(t-1) (b<0)\n" ] } ], @@ -619,23 +703,23 @@ "output_type": "stream", "text": [ "Probability of psi0:\n", - " [[0. 0. 1. 0. 0. ]\n", - " [1. 0. 0.95 0. 0. ]\n", - " [0. 0. 0. 0. 0. ]\n", - " [1. 0.96 0.24 0. 0. ]\n", - " [0.16 0.03 0.1 0.04 0. ]]\n", + " [[0. 0.26 0.46 0.26 0.3 ]\n", + " [0.53 0. 0.54 0.37 0.33]\n", + " [0.22 0.41 0. 0.38 0.12]\n", + " [0.6 0.62 0.35 0. 0.38]\n", + " [0.69 0.28 0.27 0.43 0. ]]\n", "Probability of psi1:\n", - " [[1. 1. 1. 0. 1. ]\n", - " [1. 0. 0. 1. 1. ]\n", - " [1. 1. 0. 1. 1. ]\n", - " [1. 1. 1. 1. 1. ]\n", - " [1. 0.19 1. 0.96 1. ]]\n", + " [[0.41 1. 1. 0.2 1. ]\n", + " [0.64 0.63 0.6 0.83 0.85]\n", + " [0.76 0.69 0.64 0.47 0.95]\n", + " [0.55 1. 0.71 0.73 1. ]\n", + " [0.94 0.79 0.71 0.53 0.74]]\n", "Probability of omega1:\n", - " [[1. 0.77 1. 0.96 0. ]\n", - " [1. 1. 1. 0. 1. ]\n", - " [1. 1. 0. 1. 1. ]\n", - " [1. 1. 1. 1. 0.04]\n", - " [1. 1. 1. 1. 1. ]]\n" + " [[0.76 0.35 0.54 0.43 0.47]\n", + " [0.87 0.77 0.63 0.5 1. ]\n", + " [0.63 0.95 0.66 0.84 0.93]\n", + " [0.41 0.85 0.88 0.68 0.49]\n", + " [0.66 0.81 0.92 0.58 0.69]]\n" ] } ], @@ -690,262 +774,318 @@ " \n", " \n", " 0\n", - " y4(t-1)\n", - " y2(t)\n", - " 0.377029\n", + " y0(t-1)\n", + " y4(t)\n", + " -0.454092\n", " 1.00\n", " \n", " \n", " 1\n", - " y2(t)\n", + " y4(t-1)\n", " y3(t)\n", - " -0.238642\n", + " -0.593869\n", " 1.00\n", " \n", " \n", " 2\n", - " y1(t)\n", + " y1(t-1)\n", " y3(t)\n", - " -0.213468\n", + " 0.514145\n", " 1.00\n", " \n", " \n", " 3\n", + " y1(t-1)\n", " y0(t)\n", - " y3(t)\n", - " 0.563522\n", + " -0.357521\n", " 1.00\n", " \n", " \n", " 4\n", - " y3(t-1)\n", - " y4(t)\n", - " 0.343541\n", + " y2(t-1)\n", + " y0(t)\n", + " -0.443562\n", " 1.00\n", " \n", " \n", " 5\n", - " y0(t-1)\n", - " y2(t)\n", - " -0.254723\n", + " y4(t-1)\n", + " y0(t)\n", + " 0.573678\n", " 1.00\n", " \n", " \n", " 6\n", " y4(t-1)\n", - " y1(t)\n", - " 0.438051\n", - " 1.00\n", + " y2(t)\n", + " 0.360151\n", + " 0.97\n", " \n", " \n", " 7\n", - " y3(t-1)\n", - " y1(t)\n", - " 0.266735\n", - " 1.00\n", + " y4(t-1)\n", + " y4(t)\n", + " 0.213879\n", + " 0.96\n", " \n", " \n", " 8\n", " y1(t-1)\n", " y1(t)\n", - " 0.312631\n", - " 1.00\n", + " 0.206331\n", + " 0.96\n", " \n", " \n", " 9\n", - " y0(t-1)\n", - " y4(t)\n", - " -0.531720\n", - " 1.00\n", + " y4(t-1)\n", + " y1(t)\n", + " 0.235616\n", + " 0.95\n", " \n", " \n", " 10\n", - " y1(t-1)\n", - " y4(t)\n", - " 0.226082\n", - " 1.00\n", + " y0(t-1)\n", + " y1(t)\n", + " -0.364361\n", + " 0.95\n", " \n", " \n", " 11\n", - " y2(t)\n", + " y3(t-1)\n", " y1(t)\n", - " 0.231064\n", - " 1.00\n", + " 0.250602\n", + " 0.94\n", " \n", " \n", " 12\n", - " y0(t)\n", - " y1(t)\n", - " -0.310366\n", - " 1.00\n", + " y0(t-1)\n", + " y2(t)\n", + " -0.267122\n", + " 0.94\n", " \n", " \n", " 13\n", - " y4(t-1)\n", - " y0(t)\n", - " 0.210816\n", - " 1.00\n", + " y2(t-1)\n", + " y1(t)\n", + " 0.221743\n", + " 0.93\n", " \n", " \n", " 14\n", - " y3(t-1)\n", - " y0(t)\n", - " 0.375119\n", - " 1.00\n", + " y2(t-1)\n", + " y4(t)\n", + " -0.213938\n", + " 0.92\n", " \n", " \n", " 15\n", - " y2(t-1)\n", - " y0(t)\n", - " -0.377158\n", - " 1.00\n", + " y1(t-1)\n", + " y4(t)\n", + " 0.095743\n", + " 0.92\n", " \n", " \n", " 16\n", - " y2(t-1)\n", - " y4(t)\n", - " -0.368007\n", - " 1.00\n", + " y0(t-1)\n", + " y3(t)\n", + " 0.177089\n", + " 0.91\n", " \n", " \n", " 17\n", - " y0(t-1)\n", - " y1(t)\n", - " -0.419723\n", - " 1.00\n", + " y1(t-1)\n", + " y2(t)\n", + " 0.135946\n", + " 0.90\n", " \n", " \n", " 18\n", - " y1(t-1)\n", - " y2(t)\n", - " 0.329416\n", - " 0.99\n", + " y3(t-1)\n", + " y3(t)\n", + " 0.150796\n", + " 0.88\n", " \n", " \n", " 19\n", - " y0(t-1)\n", - " y0(t)\n", - " -0.188156\n", - " 0.99\n", + " y2(t-1)\n", + " y3(t)\n", + " -0.021971\n", + " 0.84\n", " \n", " \n", " 20\n", - " y1(t-1)\n", - " y3(t)\n", - " 0.120133\n", - " 0.98\n", + " y3(t-1)\n", + " y4(t)\n", + " 0.170749\n", + " 0.79\n", " \n", " \n", " 21\n", - " y0(t-1)\n", - " y3(t)\n", - " 0.217037\n", - " 0.98\n", + " y2(t-1)\n", + " y2(t)\n", + " -0.137767\n", + " 0.77\n", " \n", " \n", " 22\n", - " y4(t-1)\n", - " y3(t)\n", - " -0.186410\n", - " 0.97\n", + " y0(t-1)\n", + " y0(t)\n", + " -0.094192\n", + " 0.75\n", " \n", " \n", " 23\n", - " y3(t-1)\n", - " y2(t)\n", - " 0.184045\n", - " 0.97\n", + " y0(t)\n", + " y4(t)\n", + " 0.934934\n", + " 0.70\n", " \n", " \n", " 24\n", - " y4(t-1)\n", - " y4(t)\n", - " 0.287224\n", - " 0.92\n", + " y3(t-1)\n", + " y2(t)\n", + " 0.141032\n", + " 0.66\n", " \n", " \n", " 25\n", - " y2(t)\n", " y0(t)\n", - " -0.147135\n", - " 0.91\n", + " y3(t)\n", + " 0.636926\n", + " 0.63\n", " \n", " \n", " 26\n", + " y1(t)\n", " y3(t)\n", - " y4(t)\n", - " 0.056672\n", - " 0.73\n", + " -0.296396\n", + " 0.63\n", " \n", " \n", " 27\n", " y3(t-1)\n", - " y3(t)\n", - " -0.139039\n", + " y0(t)\n", + " -0.027274\n", " 0.63\n", " \n", " \n", " 28\n", " y0(t)\n", - " y4(t)\n", - " 0.086335\n", - " 0.46\n", + " y1(t)\n", + " -0.469409\n", + " 0.61\n", " \n", " \n", " 29\n", - " y2(t-1)\n", + " y2(t)\n", " y1(t)\n", - " 0.081208\n", - " 0.41\n", + " 0.815024\n", + " 0.59\n", " \n", " \n", " 30\n", - " y1(t-1)\n", - " y0(t)\n", - " -0.040277\n", - " 0.26\n", + " y2(t)\n", + " y3(t)\n", + " -0.102868\n", + " 0.57\n", " \n", " \n", " 31\n", " y2(t)\n", - " y4(t)\n", - " -0.088182\n", - " 0.20\n", + " y0(t)\n", + " -0.180943\n", + " 0.53\n", " \n", " \n", " 32\n", - " y2(t-1)\n", " y2(t)\n", - " -0.052064\n", - " 0.19\n", + " y4(t)\n", + " -0.054386\n", + " 0.49\n", " \n", " \n", " 33\n", - " y1(t)\n", " y4(t)\n", - " -0.056033\n", - " 0.05\n", + " y3(t)\n", + " 0.132928\n", + " 0.45\n", " \n", " \n", " 34\n", - " y4(t)\n", " y3(t)\n", - " 0.057538\n", - " 0.04\n", + " y4(t)\n", + " 0.453095\n", + " 0.44\n", " \n", " \n", " 35\n", - " y2(t-1)\n", - " y3(t)\n", - " -0.261473\n", - " 0.02\n", + " y0(t)\n", + " y2(t)\n", + " -0.149761\n", + " 0.42\n", " \n", " \n", " 36\n", " y4(t)\n", " y1(t)\n", - " 0.013746\n", - " 0.01\n", + " 0.119746\n", + " 0.41\n", + " \n", + " \n", + " 37\n", + " y1(t)\n", + " y2(t)\n", + " 0.564823\n", + " 0.41\n", + " \n", + " \n", + " 38\n", + " y3(t)\n", + " y1(t)\n", + " -0.706491\n", + " 0.37\n", + " \n", + " \n", + " 39\n", + " y1(t)\n", + " y4(t)\n", + " -0.038562\n", + " 0.37\n", + " \n", + " \n", + " 40\n", + " y3(t)\n", + " y2(t)\n", + " 0.111094\n", + " 0.35\n", + " \n", + " \n", + " 41\n", + " y3(t)\n", + " y0(t)\n", + " 0.311717\n", + " 0.34\n", + " \n", + " \n", + " 42\n", + " y1(t)\n", + " y0(t)\n", + " -0.300326\n", + " 0.33\n", + " \n", + " \n", + " 43\n", + " y4(t)\n", + " y2(t)\n", + " 0.139237\n", + " 0.32\n", + " \n", + " \n", + " 44\n", + " y4(t)\n", + " y0(t)\n", + " 0.405747\n", + " 0.30\n", " \n", " \n", "\n", @@ -953,43 +1093,51 @@ ], "text/plain": [ " from to effect probability\n", - "0 y4(t-1) y2(t) 0.377029 1.00\n", - "1 y2(t) y3(t) -0.238642 1.00\n", - "2 y1(t) y3(t) -0.213468 1.00\n", - "3 y0(t) y3(t) 0.563522 1.00\n", - "4 y3(t-1) y4(t) 0.343541 1.00\n", - "5 y0(t-1) y2(t) -0.254723 1.00\n", - "6 y4(t-1) y1(t) 0.438051 1.00\n", - "7 y3(t-1) y1(t) 0.266735 1.00\n", - "8 y1(t-1) y1(t) 0.312631 1.00\n", - "9 y0(t-1) y4(t) -0.531720 1.00\n", - "10 y1(t-1) y4(t) 0.226082 1.00\n", - "11 y2(t) y1(t) 0.231064 1.00\n", - "12 y0(t) y1(t) -0.310366 1.00\n", - "13 y4(t-1) y0(t) 0.210816 1.00\n", - "14 y3(t-1) y0(t) 0.375119 1.00\n", - "15 y2(t-1) y0(t) -0.377158 1.00\n", - "16 y2(t-1) y4(t) -0.368007 1.00\n", - "17 y0(t-1) y1(t) -0.419723 1.00\n", - "18 y1(t-1) y2(t) 0.329416 0.99\n", - "19 y0(t-1) y0(t) -0.188156 0.99\n", - "20 y1(t-1) y3(t) 0.120133 0.98\n", - "21 y0(t-1) y3(t) 0.217037 0.98\n", - "22 y4(t-1) y3(t) -0.186410 0.97\n", - "23 y3(t-1) y2(t) 0.184045 0.97\n", - "24 y4(t-1) y4(t) 0.287224 0.92\n", - "25 y2(t) y0(t) -0.147135 0.91\n", - "26 y3(t) y4(t) 0.056672 0.73\n", - "27 y3(t-1) y3(t) -0.139039 0.63\n", - "28 y0(t) y4(t) 0.086335 0.46\n", - "29 y2(t-1) y1(t) 0.081208 0.41\n", - "30 y1(t-1) y0(t) -0.040277 0.26\n", - "31 y2(t) y4(t) -0.088182 0.20\n", - "32 y2(t-1) y2(t) -0.052064 0.19\n", - "33 y1(t) y4(t) -0.056033 0.05\n", - "34 y4(t) y3(t) 0.057538 0.04\n", - "35 y2(t-1) y3(t) -0.261473 0.02\n", - "36 y4(t) y1(t) 0.013746 0.01" + "0 y0(t-1) y4(t) -0.454092 1.00\n", + "1 y4(t-1) y3(t) -0.593869 1.00\n", + "2 y1(t-1) y3(t) 0.514145 1.00\n", + "3 y1(t-1) y0(t) -0.357521 1.00\n", + "4 y2(t-1) y0(t) -0.443562 1.00\n", + "5 y4(t-1) y0(t) 0.573678 1.00\n", + "6 y4(t-1) y2(t) 0.360151 0.97\n", + "7 y4(t-1) y4(t) 0.213879 0.96\n", + "8 y1(t-1) y1(t) 0.206331 0.96\n", + "9 y4(t-1) y1(t) 0.235616 0.95\n", + "10 y0(t-1) y1(t) -0.364361 0.95\n", + "11 y3(t-1) y1(t) 0.250602 0.94\n", + "12 y0(t-1) y2(t) -0.267122 0.94\n", + "13 y2(t-1) y1(t) 0.221743 0.93\n", + "14 y2(t-1) y4(t) -0.213938 0.92\n", + "15 y1(t-1) y4(t) 0.095743 0.92\n", + "16 y0(t-1) y3(t) 0.177089 0.91\n", + "17 y1(t-1) y2(t) 0.135946 0.90\n", + "18 y3(t-1) y3(t) 0.150796 0.88\n", + "19 y2(t-1) y3(t) -0.021971 0.84\n", + "20 y3(t-1) y4(t) 0.170749 0.79\n", + "21 y2(t-1) y2(t) -0.137767 0.77\n", + "22 y0(t-1) y0(t) -0.094192 0.75\n", + "23 y0(t) y4(t) 0.934934 0.70\n", + "24 y3(t-1) y2(t) 0.141032 0.66\n", + "25 y0(t) y3(t) 0.636926 0.63\n", + "26 y1(t) y3(t) -0.296396 0.63\n", + "27 y3(t-1) y0(t) -0.027274 0.63\n", + "28 y0(t) y1(t) -0.469409 0.61\n", + "29 y2(t) y1(t) 0.815024 0.59\n", + "30 y2(t) y3(t) -0.102868 0.57\n", + "31 y2(t) y0(t) -0.180943 0.53\n", + "32 y2(t) y4(t) -0.054386 0.49\n", + "33 y4(t) y3(t) 0.132928 0.45\n", + "34 y3(t) y4(t) 0.453095 0.44\n", + "35 y0(t) y2(t) -0.149761 0.42\n", + "36 y4(t) y1(t) 0.119746 0.41\n", + "37 y1(t) y2(t) 0.564823 0.41\n", + "38 y3(t) y1(t) -0.706491 0.37\n", + "39 y1(t) y4(t) -0.038562 0.37\n", + "40 y3(t) y2(t) 0.111094 0.35\n", + "41 y3(t) y0(t) 0.311717 0.34\n", + "42 y1(t) y0(t) -0.300326 0.33\n", + "43 y4(t) y2(t) 0.139237 0.32\n", + "44 y4(t) y0(t) 0.405747 0.30" ] }, "execution_count": 17, @@ -1047,39 +1195,39 @@ " \n", " \n", " \n", - " 3\n", + " 23\n", " y0(t)\n", - " y3(t)\n", - " 0.563522\n", - " 1.0\n", + " y4(t)\n", + " 0.934934\n", + " 0.70\n", " \n", " \n", - " 6\n", - " y4(t-1)\n", + " 29\n", + " y2(t)\n", " y1(t)\n", - " 0.438051\n", - " 1.0\n", + " 0.815024\n", + " 0.59\n", " \n", " \n", - " 0\n", - " y4(t-1)\n", - " y2(t)\n", - " 0.377029\n", - " 1.0\n", + " 25\n", + " y0(t)\n", + " y3(t)\n", + " 0.636926\n", + " 0.63\n", " \n", " \n", - " 14\n", - " y3(t-1)\n", + " 5\n", + " y4(t-1)\n", " y0(t)\n", - " 0.375119\n", - " 1.0\n", + " 0.573678\n", + " 1.00\n", " \n", " \n", - " 4\n", - " y3(t-1)\n", - " y4(t)\n", - " 0.343541\n", - " 1.0\n", + " 37\n", + " y1(t)\n", + " y2(t)\n", + " 0.564823\n", + " 0.41\n", " \n", " \n", "\n", @@ -1087,11 +1235,11 @@ ], "text/plain": [ " from to effect probability\n", - "3 y0(t) y3(t) 0.563522 1.0\n", - "6 y4(t-1) y1(t) 0.438051 1.0\n", - "0 y4(t-1) y2(t) 0.377029 1.0\n", - "14 y3(t-1) y0(t) 0.375119 1.0\n", - "4 y3(t-1) y4(t) 0.343541 1.0" + "23 y0(t) y4(t) 0.934934 0.70\n", + "29 y2(t) y1(t) 0.815024 0.59\n", + "25 y0(t) y3(t) 0.636926 0.63\n", + "5 y4(t-1) y0(t) 0.573678 1.00\n", + "37 y1(t) y2(t) 0.564823 0.41" ] }, "execution_count": 18, @@ -1144,39 +1292,39 @@ " \n", " \n", " \n", - " 0\n", + " 6\n", " y4(t-1)\n", " y2(t)\n", - " 0.377029\n", - " 1.00\n", + " 0.360151\n", + " 0.97\n", " \n", " \n", - " 5\n", + " 12\n", " y0(t-1)\n", " y2(t)\n", - " -0.254723\n", - " 1.00\n", + " -0.267122\n", + " 0.94\n", " \n", " \n", - " 18\n", + " 17\n", " y1(t-1)\n", " y2(t)\n", - " 0.329416\n", - " 0.99\n", + " 0.135946\n", + " 0.90\n", " \n", " \n", - " 23\n", - " y3(t-1)\n", + " 21\n", + " y2(t-1)\n", " y2(t)\n", - " 0.184045\n", - " 0.97\n", + " -0.137767\n", + " 0.77\n", " \n", " \n", - " 32\n", - " y2(t-1)\n", + " 24\n", + " y3(t-1)\n", " y2(t)\n", - " -0.052064\n", - " 0.19\n", + " 0.141032\n", + " 0.66\n", " \n", " \n", "\n", @@ -1184,11 +1332,11 @@ ], "text/plain": [ " from to effect probability\n", - "0 y4(t-1) y2(t) 0.377029 1.00\n", - "5 y0(t-1) y2(t) -0.254723 1.00\n", - "18 y1(t-1) y2(t) 0.329416 0.99\n", - "23 y3(t-1) y2(t) 0.184045 0.97\n", - "32 y2(t-1) y2(t) -0.052064 0.19" + "6 y4(t-1) y2(t) 0.360151 0.97\n", + "12 y0(t-1) y2(t) -0.267122 0.94\n", + "17 y1(t-1) y2(t) 0.135946 0.90\n", + "21 y2(t-1) y2(t) -0.137767 0.77\n", + "24 y3(t-1) y2(t) 0.141032 0.66" ] }, "execution_count": 19, @@ -1215,10 +1363,10 @@ { "data": { "text/plain": [ - "(array([ 1., 5., 5., 7., 24., 13., 17., 11., 13., 4.]),\n", - " array([-0.359, -0.34 , -0.322, -0.303, -0.285, -0.266, -0.248, -0.229,\n", - " -0.21 , -0.192, -0.173]),\n", - " )" + "(array([ 1., 4., 7., 8., 26., 22., 12., 9., 4., 7.]),\n", + " array([-0.567, -0.508, -0.45 , -0.391, -0.333, -0.274, -0.215, -0.157,\n", + " -0.098, -0.04 , 0.019]),\n", + " )" ] }, "execution_count": 20, @@ -1227,7 +1375,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -1259,7 +1407,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -1273,7 +1421,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.8.10" } }, "nbformat": 4, diff --git a/lingam/bootstrap.py b/lingam/bootstrap.py index 1122a7e..10d09ab 100644 --- a/lingam/bootstrap.py +++ b/lingam/bootstrap.py @@ -8,7 +8,7 @@ import numpy as np from sklearn.utils import check_array, resample -from .utils import find_all_paths +from .utils import find_all_paths, calculate_total_effect class BootstrapMixin: @@ -52,8 +52,8 @@ def bootstrap(self, X, n_sampling): # Calculate total effects for c, from_ in enumerate(self._causal_order): for to in self._causal_order[c + 1 :]: - total_effects[i, to, from_] = self.estimate_total_effect( - resampled_X, from_, to + total_effects[i, to, from_] = calculate_total_effect( + self._adjacency_matrix, from_, to ) resampled_indices.append(resampled_index) diff --git a/lingam/bottom_up_parce_lingam.py b/lingam/bottom_up_parce_lingam.py index d3e7b48..0fe5c35 100644 --- a/lingam/bottom_up_parce_lingam.py +++ b/lingam/bottom_up_parce_lingam.py @@ -13,7 +13,7 @@ from .bootstrap import BootstrapResult from .hsic import hsic_test_gamma -from .utils import predict_adaptive_lasso, f_correlation +from .utils import predict_adaptive_lasso, f_correlation, calculate_total_effect class BottomUpParceLiNGAM: @@ -453,6 +453,56 @@ def estimate_total_effect(self, X, from_index, to_index): return coefs[0] + def estimate_total_effect2(self, from_index, to_index): + """Estimate total effect using causal model. + + Parameters + ---------- + from_index : + Index of source variable to estimate total effect. + to_index : + Index of destination variable to estimate total effect. + + Returns + ------- + total_effect : float + Estimated total effect. + """ + # Check from/to causal order + for i, order in enumerate(self._causal_order): + if hasattr(order, "__iter__") and from_index in order: + from_order = i + break + elif not hasattr(order, "__iter__") and int(from_index) == int(order): + from_order = i + break + + for i, order in enumerate(self._causal_order): + if hasattr(order, "__iter__") and to_index in order: + to_order = i + break + elif not hasattr(order, "__iter__") and int(to_index) == int(order): + to_order = i + break + + if from_order > to_order: + warnings.warn( + f"The estimated causal effect may be incorrect because " + f"the causal order of the destination variable (to_index={to_index}) " + f"is earlier than the source variable (from_index={from_index})." + ) + + # Check confounders + if True in np.isnan(self._adjacency_matrix[from_index]): + warnings.warn( + f"The estimated causal effect may be incorrect because " + f"the source variable (from_index={from_index}) is influenced by confounders." + ) + return np.nan + + effect = calculate_total_effect(self._adjacency_matrix, from_index, to_index) + return effect + def get_error_independence_p_values(self, X): """Calculate the p-value matrix of independence between error variables. @@ -555,10 +605,10 @@ def bootstrap(self, X, n_sampling): for from_item in from_: total_effects[ i, to, from_item - ] = self.estimate_total_effect(resampled_X, from_item, to) + ] = self.estimate_total_effect2(from_item, to) else: - total_effects[i, to, from_] = self.estimate_total_effect( - resampled_X, from_, to + total_effects[i, to, from_] = self.estimate_total_effect2( + from_, to ) return BootstrapResult(adjacency_matrices, total_effects) diff --git a/lingam/longitudinal_lingam.py b/lingam/longitudinal_lingam.py index 105dc0b..fac427d 100644 --- a/lingam/longitudinal_lingam.py +++ b/lingam/longitudinal_lingam.py @@ -12,7 +12,7 @@ from .direct_lingam import DirectLiNGAM from .hsic import hsic_test_gamma -from .utils import predict_adaptive_lasso, find_all_paths +from .utils import predict_adaptive_lasso, find_all_paths, calculate_total_effect class LongitudinalLiNGAM: @@ -151,13 +151,13 @@ def bootstrap(self, X_list, n_sampling, start_from_t=1): for to in self._causal_orders[from_t][c + 1 :]: total_effects[ i, to_t * self._p + to, from_t * self._p + from_ - ] = self.estimate_total_effect(resampled_X_t, from_t, from_, to_t, to) + ] = self.estimate_total_effect2(from_t, from_, to_t, to) for to_t in range(from_t + 1, self._T): for to in self._causal_orders[to_t]: total_effects[ i, to_t * self._p + to, from_t * self._p + from_ - ] = self.estimate_total_effect(resampled_X_t, from_t, from_, to_t, to) + ] = self.estimate_total_effect2(from_t, from_, to_t, to) return LongitudinalBootstrapResult(self._T, adjacency_matrices, total_effects) @@ -166,7 +166,7 @@ def estimate_total_effect(self, X_t, from_t, from_index, to_t, to_index): Parameters ---------- - X_t : array-like, shape (n_samples, n_features) + X_t : array-like, shape (timepoint, n_samples, n_features) Original data, where n_samples is the number of samples and n_features is the number of features. from _t : @@ -220,6 +220,51 @@ def estimate_total_effect(self, X_t, from_t, from_index, to_t, to_index): return coefs[0] + def estimate_total_effect2(self, from_t, from_index, to_t, to_index): + """Estimate total effect using causal model. + + Parameters + ---------- + from _t : + The timepoint of source variable. + from_index : + Index of source variable to estimate total effect. + to_t : + The timepoint of destination variable. + to_index : + Index of destination variable to estimate total effect. + + Returns + ------- + total_effect : float + Estimated total effect. + """ + # Check from/to causal order + if to_t == from_t: + from_order = self._causal_orders[to_t].index(from_index) + to_order = self._causal_orders[from_t].index(to_index) + if from_order > to_order: + warnings.warn( + f"The estimated causal effect may be incorrect because " + f"the causal order of the destination variable (to_t={to_t}, to_index={to_index}) " + f"is earlier than the source variable (from_t={from_t}, from_index={from_index})." + ) + elif to_t < from_t: + warnings.warn( + f"The estimated causal effect may be incorrect because " + f"the causal order of the destination variable (to_t={to_t}) " + f"is earlier than the source variable (from_t={from_t})." + ) + + am = np.concatenate([*self._adjacency_matrices[to_t]], axis=1) + am = np.pad(am, [(0, am.shape[1] - am.shape[0]), (0, 0)]) + + from_index = from_index + self._p * (to_t - from_t) + + effect = calculate_total_effect(am, from_index, to_index) + + return effect + def get_error_independence_p_values(self): """Calculate the p-value matrix of independence between error variables. diff --git a/lingam/multi_group_direct_lingam.py b/lingam/multi_group_direct_lingam.py index b8c99b5..b786676 100644 --- a/lingam/multi_group_direct_lingam.py +++ b/lingam/multi_group_direct_lingam.py @@ -12,7 +12,7 @@ from .bootstrap import BootstrapResult from .direct_lingam import DirectLiNGAM from .hsic import hsic_test_gamma -from .utils import predict_adaptive_lasso +from .utils import predict_adaptive_lasso, calculate_total_effect class MultiGroupDirectLiNGAM(DirectLiNGAM): @@ -146,7 +146,7 @@ def bootstrap(self, X_list, n_sampling): # Calculate total effects for c, from_ in enumerate(self._causal_order): for to in self._causal_order[c + 1 :]: - effects = self.estimate_total_effect(resampled_X_list, from_, to) + effects = self.estimate_total_effect2(from_, to) for i, effect in enumerate(effects): total_effects_list[i, n, to, from_] = effect @@ -203,6 +203,38 @@ def estimate_total_effect(self, X_list, from_index, to_index): return effects + def estimate_total_effect2(self, from_index, to_index): + """Estimate total effect using causal model. + + Parameters + ---------- + from_index : + Index of source variable to estimate total effect. + to_index : + Index of destination variable to estimate total effect. + + Returns + ------- + total_effect : float + Estimated total effect. + """ + # Check from/to causal order + from_order = self._causal_order.index(from_index) + to_order = self._causal_order.index(to_index) + if from_order > to_order: + warnings.warn( + f"The estimated causal effect may be incorrect because " + f"the causal order of the destination variable (to_index={to_index}) " + f"is earlier than the source variable (from_index={from_index})." + ) + + effects = [] + for am in self._adjacency_matrices: + effect = calculate_total_effect(am, from_index, to_index) + effects.append(effect) + + return effects + def get_error_independence_p_values(self, X_list): """Calculate the p-value matrix of independence between error variables. diff --git a/lingam/multi_group_rcd.py b/lingam/multi_group_rcd.py index 4455a0e..bbdc875 100644 --- a/lingam/multi_group_rcd.py +++ b/lingam/multi_group_rcd.py @@ -15,7 +15,7 @@ from .bootstrap import BootstrapResult from .hsic import get_gram_matrix, get_kernel_width, hsic_test_gamma, hsic_teststat -from .utils import predict_adaptive_lasso, f_correlation +from .utils import predict_adaptive_lasso, f_correlation, calculate_total_effect class MultiGroupRCD: @@ -178,6 +178,45 @@ def estimate_total_effect(self, X_list, from_index, to_index): return effects + def estimate_total_effect2(self, from_index, to_index): + """Estimate total effect using causal model. + + Parameters + ---------- + from_index : + Index of source variable to estimate total effect. + to_index : + Index of destination variable to estimate total effect. + + Returns + ------- + total_effect : float + Estimated total effect. + """ + # Check from/to ancestors + if to_index in self._ancestors_list[from_index]: + warnings.warn( + f"The estimated causal effect may be incorrect because " + f"the causal order of the destination variable (to_index={to_index}) " + f"is earlier than the source variable (from_index={from_index})." + ) + + effects = [] + for am in self._adjacency_matrices: + # Check confounders + if True in np.isnan(am[from_index]): + warnings.warn( + f"The estimated causal effect may be incorrect because " + f"the source variable (from_index={from_index}) is influenced by confounders." + ) + return effects + + effect = calculate_total_effect(am, from_index, to_index) + effects.append(effect) + + return effects + + def get_error_independence_p_values(self, X_list): """Calculate the p-value matrix of independence between error variables. @@ -258,7 +297,7 @@ def bootstrap(self, X_list, n_sampling): # Calculate total effects for to, ancestors in enumerate(self._ancestors_list): for from_ in ancestors: - effects = self.estimate_total_effect(resampled_X_list, from_, to) + effects = self.estimate_total_effect2(from_, to) for i, effect in enumerate(effects): total_effects_list[i, n, to, from_] = effect diff --git a/lingam/rcd.py b/lingam/rcd.py index bbdbc76..a62c032 100644 --- a/lingam/rcd.py +++ b/lingam/rcd.py @@ -15,7 +15,7 @@ from .bootstrap import BootstrapResult from .hsic import get_gram_matrix, get_kernel_width, hsic_test_gamma, hsic_teststat -from .utils import predict_adaptive_lasso, f_correlation +from .utils import predict_adaptive_lasso, f_correlation, calculate_total_effect class RCD: @@ -435,6 +435,28 @@ def estimate_total_effect(self, X, from_index, to_index): return coefs[0] + def estimate_total_effect2(self, from_index, to_index): + # Check from/to ancestors + if to_index in self._ancestors_list[from_index]: + warnings.warn( + f"The estimated causal effect may be incorrect because " + f"the causal order of the destination variable (to_index={to_index}) " + f"is earlier than the source variable (from_index={from_index})." + ) + + # Check confounders + if True in np.isnan(self._adjacency_matrix[from_index]): + warnings.warn( + f"The estimated causal effect may be incorrect because " + f"the source variable (from_index={from_index}) is influenced by confounders." + ) + return np.nan + + effect = calculate_total_effect(self._adjacency_matrix, from_index, to_index) + + return effect + + def get_error_independence_p_values(self, X): """Calculate the p-value matrix of independence between error variables. @@ -532,8 +554,8 @@ def bootstrap(self, X, n_sampling): # Calculate total effects for to, ancestors in enumerate(self._ancestors_list): for from_ in ancestors: - total_effects[i, to, from_] = self.estimate_total_effect( - resampled_X, from_, to + total_effects[i, to, from_] = self.estimate_total_effect2( + from_, to ) return BootstrapResult(adjacency_matrices, total_effects) diff --git a/lingam/utils/__init__.py b/lingam/utils/__init__.py index 49935af..cf03056 100644 --- a/lingam/utils/__init__.py +++ b/lingam/utils/__init__.py @@ -2,6 +2,7 @@ Python implementation of the LiNGAM algorithms. The LiNGAM Project: https://sites.google.com/view/sshimizu06/lingam """ +import numbers import graphviz import matplotlib.pyplot as plt import networkx as nx @@ -37,6 +38,8 @@ "f_correlation", "visualize_nonlinear_causal_effect", "evaluate_model_fit", + "calculate_distance_from_root_nodes", + "calculate_total_effect", ] @@ -992,3 +995,133 @@ def evaluate_model_fit(adjacency_matrix, X, is_ordinal=None): stats = semopy.calc_stats(m) return stats + +def calculate_distance_from_root_nodes(adjacency_matrix, max_distance=None): + """Calculate shortest distances from root nodes. + + Parameters + ---------- + adjacency_matrices : array-like + The adjacency matrix. + max_distance : int or None, optional (default=None) + The maximum distance to return nodes from root nodes. + + Returns + ------- + shortest_distances : dict + The dictionary has the following format:: + + {'distance_from_root_node': [index_of_variables]} + """ + # check inputs + adjacency_matrix = check_array( + adjacency_matrix, + ensure_min_samples=2, + ensure_min_features=2, + force_all_finite="allow-nan" + ) + if adjacency_matrix.shape[0] != adjacency_matrix.shape[1]: + raise ValueError("adjacency_matrix must be an square matrix.") + + if max_distance is not None: + max_distance = check_scalar(max_distance, "max_distance", int, min_val=1) + + # delete hidden common causes + adjacency_matrix = np.nan_to_num(adjacency_matrix) + + # find root nodes + root_indices = np.argwhere( + np.isclose(np.sum(adjacency_matrix, axis=1), 0) == True + ).flatten() + if len(root_indices) == 0: + raise ValueError("adjacency_matrix has no root nodes.") + + G = nx.from_numpy_array(adjacency_matrix.T, create_using=nx.DiGraph) + + # distances from root nodes + dist_df = {} + for index in root_indices: + dist = nx.shortest_path_length(G, source=index) + dist_df[index] = dist + dist_df = pd.DataFrame(dist_df) + + dist_df = dist_df.fillna(np.iinfo(int).max) + dist_df = dist_df.min(axis=1) + if max_distance is not None: + dist_df = dist_df.iloc[dist_df.values <= max_distance] + dist_df = dist_df.sort_index() + dist_df = dist_df.astype(int) + + result = {i:[] for i in pd.unique(dist_df)} + for name, dist in dist_df.items(): + result[dist].append(name) + + return result + +def calculate_total_effect(adjacency_matrix, from_index, to_index, is_continuous=None): + """Calculate total effect. + + Parameters + ---------- + adjacency_matrix : array_like + The adjacency matrix. + from_index : int + The index of the cause variable. + to_index : int + The index of the effect variable. + is_continuous : list + The list of boolean. is_continuous indicates whether each variable + is continuous or discrete. + + Returns + ------- + total_effect : float + """ + + # check inputs + adjacency_matrix = check_array( + adjacency_matrix, + ensure_min_samples=2, + ensure_min_features=2, + force_all_finite='allow-nan' + ) + if adjacency_matrix.shape[0] != adjacency_matrix.shape[1]: + raise ValueError("adjacency_matrix must be an square matrix.", adjacency_matrix.shape) + + from_index = check_scalar( + from_index, + "from_index", + (numbers.Integral, np.integer), + min_val=0, + max_val=len(adjacency_matrix) - 1 + ) + + to_index = check_scalar( + to_index, + "to_index", + (numbers.Integral, np.integer), + min_val=0, + max_val=len(adjacency_matrix) - 1 + ) + + if is_continuous is None: + is_continuous = [True for _ in range(len(adjacency_matrix))] + else: + is_continuous = check_array( + is_continuous, + ensure_2d=False, + ensure_min_samples=len(adjacency_matrix) + ) + + # find all paths + path_list, effects = find_all_paths(adjacency_matrix, from_index, to_index) + + # check all nodes on the path are continuous + for path in path_list: + for node in path[1:]: + if not is_continuous[node]: + raise ValueError("Variables on the path must be continuous variables.") + + total_effect = sum(effects) + + return total_effect diff --git a/lingam/var_lingam.py b/lingam/var_lingam.py index 5e06731..776c4f2 100644 --- a/lingam/var_lingam.py +++ b/lingam/var_lingam.py @@ -13,7 +13,7 @@ from .bootstrap import BootstrapResult from .direct_lingam import DirectLiNGAM from .hsic import hsic_test_gamma -from .utils import predict_adaptive_lasso, find_all_paths +from .utils import predict_adaptive_lasso, find_all_paths, calculate_total_effect class VARLiNGAM: @@ -177,8 +177,8 @@ def bootstrap(self, X, n_sampling): for c, to in enumerate(reversed(self._causal_order)): # time t for from_ in self._causal_order[: n_features - (c + 1)]: - total_effects[i, to, from_] = self.estimate_total_effect( - resampled_X, from_, to + total_effects[i, to, from_] = self.estimate_total_effect2( + n_features, from_, to ) # time t-tau @@ -186,7 +186,7 @@ def bootstrap(self, X, n_sampling): for from_ in range(n_features): total_effects[ i, to, from_ + n_features * (lag + 1) - ] = self.estimate_total_effect(resampled_X, from_, to, lag + 1) + ] = self.estimate_total_effect2(n_features, from_, to, lag + 1) self._criterion = criterion @@ -245,6 +245,45 @@ def estimate_total_effect(self, X, from_index, to_index, from_lag=0): return coefs[0] + def estimate_total_effect2(self, n_features, from_index, to_index, from_lag=0): + """Estimate total effect using causal model. + + Parameters + ---------- + n_features : + The number of features. + from_index : + Index of source variable to estimate total effect. + to_index : + Index of destination variable to estimate total effect. + + Returns + ------- + total_effect : float + Estimated total effect. + """ + # Check from/to causal order + if from_lag == 0: + from_order = self._causal_order.index(from_index) + to_order = self._causal_order.index(to_index) + if from_order > to_order: + warnings.warn( + f"The estimated causal effect may be incorrect because " + f"the causal order of the destination variable (to_index={to_index}) " + f"is earlier than the source variable (from_index={from_index})." + ) + + # from_index + parents indices + am = np.concatenate([*self._adjacency_matrices], axis=1) + am = np.pad(am, [(0, am.shape[1] - am.shape[0]), (0, 0)]) + from_index = ( + from_index if from_lag == 0 else from_index + (n_features * from_lag) + ) + + effect = calculate_total_effect(am, from_index, to_index) + + return effect + def get_error_independence_p_values(self): """Calculate the p-value matrix of independence between error variables. diff --git a/lingam/varma_lingam.py b/lingam/varma_lingam.py index 5632341..e998ad0 100644 --- a/lingam/varma_lingam.py +++ b/lingam/varma_lingam.py @@ -13,7 +13,7 @@ from .bootstrap import BootstrapResult from .direct_lingam import DirectLiNGAM from .hsic import hsic_test_gamma -from .utils import predict_adaptive_lasso, find_all_paths +from .utils import predict_adaptive_lasso, find_all_paths, calculate_total_effect class VARMALiNGAM: @@ -207,8 +207,8 @@ def bootstrap(self, X, n_sampling): for c, to in enumerate(reversed(self._causal_order)): # time t for from_ in self._causal_order[: n_features - (c + 1)]: - total_effects[i, to, from_] = self.estimate_total_effect( - resampled_X, ee, from_, to + total_effects[i, to, from_] = self.estimate_total_effect2( + n_features, from_, to ) # time t-tau @@ -216,8 +216,8 @@ def bootstrap(self, X, n_sampling): for from_ in range(n_features): total_effects[ i, to, from_ + n_features * (lag + 1) - ] = self.estimate_total_effect( - resampled_X, ee, from_, to, lag + 1 + ] = self.estimate_total_effect2( + n_features, from_, to, lag + 1 ) self._criterion = criterion @@ -291,6 +291,48 @@ def estimate_total_effect(self, X, E, from_index, to_index, from_lag=0): return coefs[0] + def estimate_total_effect2(self, n_features, from_index, to_index, from_lag=0): + """Estimate total effect using causal model. + + Parameters + ---------- + n_features : + The number of features. + from_index : + Index of source variable to estimate total effect. + to_index : + Index of destination variable to estimate total effect. + + Returns + ------- + total_effect : float + Estimated total effect. + """ + # Check from/to causal order + if from_lag == 0: + from_order = self._causal_order.index(from_index) + to_order = self._causal_order.index(to_index) + if from_order > to_order: + warnings.warn( + f"The estimated causal effect may be incorrect because " + f"the causal order of the destination variable (to_index={to_index}) " + f"is earlier than the source variable (from_index={from_index})." + ) + + # concat psi and omega + psi = self._adjacency_matrices[0] + am = np.concatenate([*psi], axis=1) + am = np.pad(am, [(0, am.shape[1] - am.shape[0]), (0, 0)]) + + # from_index + parents indices + from_index = from_index if from_lag == 0 else from_index + n_features + + # Estimate total effect + effect = calculate_total_effect(am, from_index, to_index) + + return effect + + def get_error_independence_p_values(self): """Calculate the p-value matrix of independence between error variables. diff --git a/tests/test_utils.py b/tests/test_utils.py index 5fe9c6e..a6d2c16 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -17,6 +17,8 @@ extract_ancestors, f_correlation, evaluate_model_fit, + calculate_distance_from_root_nodes, + calculate_total_effect, ) @@ -390,3 +392,101 @@ def test_evaluate_model_fit(): raise AssertionError +def test_calculate_distance_from_root_nodes(): + # default + adj = np.array([ + [0, 0, 0, 0], + [1, 0, 0, 0], + [1, 1, 0, 0], + [0, 0, 1, 0], + ]) + result = calculate_distance_from_root_nodes(adj) + assert result == {0: [0], 1: [1, 2], 2: [3]} + + # max_distance + result = calculate_distance_from_root_nodes(adj, max_distance=1) + assert result == {0: [0], 1: [1, 2]} + + # hidden common cause + adj = np.array([ + [0, np.nan, 0, 0], + [np.nan, 0, 0, 0], + [1, 0, 0, 0], + [1, 1, 0, 0], + ]) + result = calculate_distance_from_root_nodes(adj) + assert result == {0: [0, 1], 1: [2, 3]} + + # only hidden common cause + adj = np.array([ + [0, np.nan], + [np.nan, 0], + ]) + result = calculate_distance_from_root_nodes(adj) + assert result == {0: [0, 1]} + + # cyclic graph + adj = np.array([ + [0, 0, 0, 0], + [1, 0, 0, 1], + [0, 1, 0, 0], + [0, 0, 1, 0], + ]) + result = calculate_distance_from_root_nodes(adj) + assert result == {0: [0], 1: [1], 2: [2], 3: [3]} + + # exception: not square + adj = np.array([ + [0, 0, 0, 0], + [1, 0, 0, 0], + ]) + try: + calculate_distance_from_root_nodes(adj) + except ValueError: + pass + else: + raise AssertionError + + # exception: no root node + adj = np.array([ + [0, 1], + [1, 0], + ]) + try: + calculate_distance_from_root_nodes(adj) + except ValueError: + pass + else: + raise AssertionError + + +def test_calculate_total_effect(): + # default + adj = np.array([ + [0, 0, 0], + [0.5, 0, 0], + [0, 0.5, 0], + ]) + total_effect = calculate_total_effect(adj, 0, 2) + assert np.isclose(total_effect, 0.5**2) + + # exception: continuous on the path + is_con = [False, True, False] + try: + calculate_total_effect(adj, 0, 2, is_continuous=is_con) + except ValueError: + pass + else: + raise AssertionError + + # exception: not square + adj = np.array([ + [0, 0, 0], + [1, 0, 0], + ]) + try: + calculate_total_effect(adj, 0, 2) + except ValueError: + pass + else: + raise AssertionError