Releases: jakobrunge/tigramite
Tigramite 5.2
Tigramite 5.2 contains many new features and improvements, hence the change in the main version number. The major new features are:
- Dataframe
- now supports multiple time series arrays to learn one joint graph. Together with sliding_windows this allows to estimate graphs for every time step (or range) if multiple datasets for each time step are available. See Tutorial.
- new data_type to indicate categorical/numerical data, used e.g. for CI tests
- Expanded CI test suite:
- Implementation of Gsquared for categorical data with asymptotic null distribution
- Improved (now multivariate) CMIsymb for categorical data with local permutation test. Uses joblib to parallelize permutations across cpu-cores for null distribution generation.
- RegressionCI (linear dependencies) for mixed data sets (arbitrary mix of continuous and categorical data)
- RobustParCorr - Robust partial correlation test based on non-paranormal models.
- ParCorrWLS - Weighted partial correlation test that accounts for heteroskedastic noises.
- ParCorrMult - Partial correlation test for multivariate X and Y
- Causal discovery functions:
- Sliding window function can now be combined with MultiData functionality and LPCMCI
- link_assumptions replaces selected_links. The existence, absence, and orientation can now be encoded - New function return_summary_results to aggregate results from multiple PCMCI/PCMCIplus/... analyses. Also available for LPCMCI.
- New function to generate random structural causal processes for benchmarking
- New function 'surrogate generator' can generate multiple realizations from a model fitted on data
- Implementation of Regime-PCMCI to learn causal regimes from multivariate time series
- Causal effects:
- CausalEffects class now supports hidden variables in stationary time series graphs
- CausalEffects now runs also with logistic regression
- added aggregation_func to aggregate over prediction
- improved bootstrap confidence inkl block-length selection for all functions
- models.py now handles empty sets of predictors by user-specified function, default is mean(y).
- LinearMediation
- can now handle contemporaneous links
- now has bootstrap confidence inkl block-length selection for all functions via get_bootstrap_of
- get_conditional_mce to estimate paths that cross through certain nodes, but not through others
- Plotting:
- Pairwise scatter plots and density plots in plotting.py can now be used to visualize dependencies and choose an appropriate conditional independence (CI) test.
- plot_graph can now show auto-dependency-links by show_autodependency_lags=True.
- Improved graph objects, now returned as axes in order to integrate them into subplots.
- New transform-parameter to draw graphs onto maps using, eg, node_pos['transform']=ccrs.PlateCarree()
- new write_csv() function in plotting.py to write all links of a graph in a file.
- toy models:
- new function generate_structural_causal_process to generate random time-dependent models with flexible functional relations and options to generate interventional data
- Tutorials:
- new folder structure
- "basic" tutorial now called "overview"
- new tutorial on "explaining_lag_functions" which can be helpful to validate causal models.
- tutorial for Regime-PCMCI
- Package demands:
- environment_py3.yml for conda only installs the necessary barebone packages. The optional packages are to be installed according to your needs. See Readme and setup.py for optional packages and the recommended version numbers.
Installation
- Option 1: Install via "pip install tigramite"
- Option 2: Pull new version from master branch, install via python setup.py install
Breaking Changes
- Specific conditional independence tests are now called with the syntax - from tigramite.independence_tests.<independence_test>.py import .
Example: from tigramite.independence_tests.parcorr import ParCorr instead of from tigramite.independence_tests import ParCorr.
Refer to tigramite_tutorial_conditional_independence_tests.ipynb for import syntax to all CI tests. - Shuffle test now uses fewer surrogates by default to speed it up: sig_samples = 500 instead of 1000.
- run_sliding_windows now has default conf_lev=0.9
- seaborn package required for density plots
Bug Fixes
- fixed bug with method='links_coeffs' in fit_wright_effect in CausalEffects
- Small fixes in pcmci.py and plotting.py
- Sphinx generated documentation for plotting.py
- pairwise scatter_plot for auto-dependency corrected.
- fixed bug in CausalEffects regarding '+*>' links
Improvements
- Comprehensive test suite expanded
- Take a look at the new tutorials to see all functionality
- plot_graph can now also displays auto-dependencies at the nodes with the flag show_autodependecies=True
- scatter plot and density plots can show auto-dependency joint kernel density plots along the diagonal with the flag show_marginal_densities_on_diagonal = False
- Colorbars in plot_graph for nodes and links now both have the same default range
- Adapted to the new way of using numpy's random functions using Generators.
- Nicer arrows and colorbars, new argument tick_label_size
- Further improvements throughout plotting.py and data_processing.py
What's Changed
- Developer by @jakobrunge in #91
- updated docs for 4.2.1.0 by @jakobrunge in #92
- Developer by @jakobrunge in #98
- fixed cython issue for pip by @jakobrunge in #99
- fixed cython issue for pip by @jakobrunge in #100
- Small bugs fixed. by @jakobrunge in #106
- Developer by @jakobrunge in #115
- Developer by @jakobrunge in #117
- Developer by @jakobrunge in #121
- update readme by @jakobrunge in #122
- Developer by @jakobrunge in #175
- fixed bug in causal_effects.py by @jakobrunge in #177
- Developer by @jakobrunge in #178
- Developer by @jakobrunge in #180
- fix bug regarding causal_effects.py and masking by @jakobrunge in #181
- fix bug regarding causal_effects.py and masking by @jakobrunge in #182
- fix bug regarding causal_effects.py and masking by @jakobrunge in #183
- Developer by @jakobrunge in #185
- removed ValueError for constants in arrays by @jakobrunge in #186
- removed ValueError for constants in arrays by @jakobrunge in #187
- Developer by @jakobrunge in #188
- fixed bug regarding missing values and imported package version checks by @jakobrunge in #191
- Developer by @jakobrunge in #192
- Developer by @jakobrunge in #193
- updated docs by @jakobrunge in #194
- Developer by @jakobrunge in #195
- Developer by @jakobrunge in #196
- Developer by @jakobrunge in #197
- added confidence interval estimation for causal effects by @jakobrunge in #199
- Developer by @jakobrunge in #200
- fixed bug in causal effects by @jakobrunge in #202
- added plot_scatterplots by @jakobrunge in #203
- added plot_scatterplots by @jakobrunge in #204
- Developer by @jakobrunge in #205
- Developer by @jakobrunge in #206
- fixed bug in causal effects regarding Wright and data_transform by @jakobrunge in #207
- fixed bug in causal effects regarding Wright and data_transform by @jakobrunge in #209
- updated readme and LPCMCI tutorial by @jakobrunge in #210
- Developer by @jakobrunge in #211
- added full bootstrap results returning by @jakobrunge in #217
- typos in docstring by @jakobrunge in #218
- cmisymb now issues warning if non-int array is passed instead of erro… by @jakobrunge in #219
- Developer by @jakobrunge in #224
- further fixes for multiple dataset functionality by @jakobrunge in #225
- further fixes for multiple dataset functionality by @jakobrunge in #233
- Developer by @jakobrunge in #235
- Developer by @jakobrunge in #238
- Developer by @jakobrunge in #243
- Developer by @jakobrunge in #288
- ...
Tigramite 5.1
Tigramite 5.1 contains many new features and improvements, hence the change in the main version number. The major new features are:
-
CausalEffects class that covers causal effect estimation from given graphical models
-
LPCMCI method for constraint-based causal discovery on stationary times series with latent confounders
-
New "multiple datasets"-mode that allows to learn one causal graph jointly from multiple datasets, see tutorials
-
A sliding window function for all causal discovery methods
-
Speedups of CMIknn and GPDC conditional independence tests
-
Parallelized script for PCMCIplus
-
A GUI for basic functionality is available at https://github.com/stbachinger/TigramiteGui.
Installation
- Option 1: Install via "pip install tigramite"
- Option 2: Pull new version from master branch, install via python setup.py install
- Take a look at the tutorials to see all functionality
- environment_py3.yml for conda only installs the necessary barebone packages. The optional packages are to be installed according to your needs. See setup.py for optional packages and the recommended version numbers.
Breaking Changes
- var_process() and structural_causal_process() are now in a new toymodels module
- For run_pcmci() and variants: p_matrix and val_matrix are now symmetrized for contemporaneous links and orientation information is encoded in new graph array (consistent with PCMCI+, LPCMCI).
- new parameter alpha_level in run_pcmci() and variants to enable returning 'graph' which is constructed from thresholding the p_matrix while taking into account selected_links
- removed returning of q_matrix, now fdr-correction will change p_matrix directly
- Removed link_matrix from plotting.py which is now replaced by graph
- Due to API changes, now Python>=3.7 and matplotlib>=3.4 is required
- The distance correlation function that comes from another package in GPDC was erroneous and was fixed with a different package (dcor). Hence, the GPDC test statistic values will be different while the p-values (via a shuffle test) should roughly stay the same.
- In CMIknn n_jobs was replaced by workers due to API changes within scipy.
- environment_py3.yml for conda only installs the necessary barebone packages. The optional packages are to be installed according to your needs. See setup.py for optional packages and the recommended version numbers.
New Features
- New class causal_effect.py which covers causal effect estimation and mediation given various graph types. The class allows to automatically select adjustment sets and estimate linear or nonlinear causal effects, including conditionals. Please see the tutorial for all functionality.
- New class LPCMCI for constraint-based causal discovery on stationary times series with latent confounders. NOTE: This method is still EXPERIMENTAL since the default settings for the hyperparameters are still being fine-tuned. We release it to invite feedback and will add a tutorial and unit tests soon. We advise to read the paper first in order to correctly interpret the resulting graphs.
- New "multiple datasets"-mode that allows multiple time series arrays as input to the DataFrame and then learn a single causal graph across all datasets. This can be useful for datasets collected at different locations or across different subjects. Furthermore, this may allow to overcome non-stationarity as illustrated in the respective tutorial
- New function "run_sliding_window_of" that allows to run all PCMCI functions on sliding windows and generate summary results
- Removed cython-dependency, which caused many installation problems. This affects the CMIknn and distance correlation functions, as well as the ordinal pattern generator. The methods are now run with numba with similar to better runtime performances.
- CMIknn's _get_nearest_neighbors() is now run with scipy's CKDTree entirely and numba and can use its parallelization through the workers parameter. Further, get_restricted_permutation() is also now run with numba. Both lead to significant speedups.
- Faster GPDC using GPytorch (CPU and GPU models). Can handle samples > 50k using a multi-GPU model (with LBFGS). According to our numerical tests, it should be orders of magnitude faster than GPDC using sklearn.
- Faster "ordinal_patt_array function"
- Symmetrization of p-val matrices based on selected_links.
- False Discovery Rate (q_matrix): get_corrected_pvalues now accounts for selected_links, tau_max and tau_min.
- Function return_significant_links() now also handles "graph" array as needed for PCMCI+ and LPCMCI.
- User configurable random seed (with a default) added to all conditional independence tests to get deterministic results.
- get_conditional_entropy - Returns the nearest-neighbor conditional entropy estimate of H(X|Y).
- GUI covering basic functionality is available on https://github.com/stbachinger/TigramiteGui
- Several more under the hood, take a look at the new tutorials to see all functionality.
Bug Fixes
- Adapted run_pcmci_parallel.py script which uses mpi4py
- Import warnings for optional packages.
- Symmetrizing p-val matrices when val matrix entries for links of lag 0 are same.
- The doc string for mask_type was wrong, the default is None and means that the mask will NOT be used. Also see the tutorial on masking and missing values.
- Small fixes in pcmci.py and plotting.py
Improvements
- Comprehensive test suite expanded
- Take a look at the new tutorials to see all functionality
Tigramite 4.2
Tigramite 4.2 contains improvements in many parts and adds several new methods, most notably PCMCIplus for lagged as well as contemporaneous causal discovery.
Installation
- Option 1: Since the github master is from now on always pushed to pip, you can install via "pip install tigramite"
- Option 2: Pull new version from master or developer branch
- Install via python setup.py install
- Take a look at the new tutorials to see all functionality
Breaking Changes
- Support for R-packages was removed due to many problems caused by rpy2. This means that the independence test RCOT was removed. You can still use the old one, though, if you get rpy2 to run.
- Removed selected_variables from PCMCI since this can be done via selected_links parameter in the methods.
- return_significant_links replaces return_significant_parents (only warning raised)
- get_ce_max in models.py now returns the value at absolute max, not the absmax.
- plotting.py was improved, but you may need to check the appearance of networks and adjust visualization parameters
- Again, take a look at the new tutorials to see all functionality
New Features
- New data generating function structural_causal_process
- Further method run_pcmciplus for lagged and contemporaneous causal discovery, see also new tutorial
- New method run_pcalg_non_timeseries_data
- Several more under the hood, take a look at the new tutorials to see all functionality
Bug Fixes
- small bugs (e.g., related to var_names)
- Adapted to API changes of other packages (e.g., networkx)
Improvements
- Comprehensive test suite expanded
- More modular code that can be utilized also elsewhere, especially independence_tests module that is now diveded into separate files
- take a look at the new tutorials to see all functionality
Tigramite 4.1
Tigramite 4.1 is a further improvement, but the main changes are under the hood. The PCMCI method is now published in Science Advances: https://advances.sciencemag.org/content/5/11/eaau4996
Upgrade Steps
- Pull new version from master branch
- Install via python setup.py install
- (potentially install R-dependencies before)
- Take note of the further installation instructions
- Take a look at the new tutorials to see all functionality
Breaking Changes
- Parameters related to the data itself are not set in the DataFrame object anymore. You will need to rewrite the initialization of PCMCI and some of its attribute functions
- Removed GPACE class, which is replaced by GPDC
- In run_pcmci tau_min = 0 is new default. This just means that there are further values in the returned val_matrix and p_matrix that were set to 0 (or 1) before
- CMIknn now has transform = 'ranks' as default since it works better
- Again, take a look at the new tutorials to see all functionality
New Features
- Improved independence tests with run_test_raw function to use directly on data
- Improved RCOT conditional independence test (thanks to E. Strobl)
- Dedicated functions to estimate FullCI and BivCI (see Science Advances paper)
- Several more under the hood, take a look at the new tutorials to see all functionality
Bug Fixes
- small bugs (e.g., related to var_names)
- Adapted to API changes of other packages (e.g., networkx)
Improvements (thanks to Ewen Gillies! And the issues posted by various users)
- Added a comprehensive test suite
- Refactored and highly modular code that can be utilized also elsehere, especially independence_tests module
- Added n_jobs to CMIknn to be used in cKDtree
- Improved doc of CMIsymb
- Improved RCOT API
- include_lagzero_parents parameter in return_significant_parents()
- time_bin_with_mask now has parameter mask instead of sample_selector
- cut_off is explicitely handled in run_test() in independence_tests.py
- take a look at the new tutorials to see all functionality
Tigramite 4.0.0-beta
Tigramite 4.0 is a significant improvement of tigramite, but the main changes are under the hood.
Upgrade Steps
- Pull new version from master branch
- Install via python setup.py install
- take a look at the new tutorials to see all functionality
Breaking Changes
- Parameters related to the data itself are not set in the DataFrame object
- you will need to rewrite the initialization of PCMCI and some of its attribute functions
- removed GPACE class, which is replaced by GPDC
- tau_min = 0 is new default
- again, take a look at the new tutorials to see all functionality
New Features
- improved independence tests
- improved RCOT conditional independence test (thanks to E. Strobl)
- several more under the hood
- once again, take a look at the new tutorials to see all functionality
Bug Fixes
- small bugs (e.g., related to var_names)
Improvements
- added a comprehensive test suite
- refactored and highly modular code that can be utilized also elsehere, especially independence_tests module
- take a look at the new tutorials to see all functionality
Tigramite
This is the first stable release of Tigramite 3.0.