Skip to content

Releases: cmu-phil/tetrad

Version 7.6.6

11 Dec 13:34
72ba5aa
Compare
Choose a tag to compare

Changes for Version 7.6.6

Main changes.

  1. Made some corrections to implementing the final FCI orientation rules in response to a review from Peter Spirtes.
  2. Updated the discriminating path rule to make it more efficient.
  3. Refactored FciOrient to always use the discriminating path rule.
  4. Reimplemented R8, R9, R10 in final FCI orientation rules for efficiency.
  5. Revised the AD Tree class implementation and incorporated it into the Chi-Square and G-Square discrete independence tests as an alternative to sample counting.
  6. Revised DiscreteBicScore to ignore unattested categories for variables.
  7. Removed several "experimental" designations for algorithms.
  8. Added an implementation of CellTable using AD Trees for space-savings and switched discrete ChiSquare to use it.
  9. Improved AdTree for efficiency and clarity.
  10. Improved MvpBicScore.
  11. Added InterruptedException to MarkovCheck and handling for it in several classes.
  12. Added an IDA editor to calculate IDA and IDA-like average distances of parameter values from true values.
  13. Added CpdagParentDistancesFromTrue class.
  14. I added a column to the bootstrap table to show edge properties.
  15. Refacted all sepset finding methods into a new class, SepsetFinder, and added several new new methods.
  16. Improved logging consistency across LV algorithms.
  17. Improved LvLite.
  18. Added "recursive msep" and "noncolliders only" options to MarkovCheckEditor.
  19. Added selection bias option to nodes in the graph editor.
  20. Adjusted DagToPag to account correctly for selection bias.
  21. Added method to produce data with selection nodes conditioned to > 0 as a new DataBox item.
  22. Refactored logic to find unshielded colliders and to R4 discriminating path orientations into a separate interface.
  23. Implemented the R0R0 methods for both test-based and DagToPag contexts.
  24. Added logic in R4 to handle the case of multiple discriminating paths between two nodes for the test-based implementation (using the msep path blocking method).
  25. Removed independence test caching for the IndTestFisherZ class, which was causing errors in places.
  26. Added nodewise Markov check methods.
  27. Did several optimizations for PAG-related functions to improve speed of interface, aiming at PAGs with 100 nodes plus 10 latent common causes, with an average degree of 10.
    • Cached some types of paths in the graph class.
    • Replaced some depth-first methods with breadth-first equivalents.
    • For looking for latent common causes, limited length of treks (correctly) to 3.
    • Introduced the PagCache class to store calculated PAGs for DAGs and DAGs for their calculated PAGs, for speed of lookup, so DagToPag only needs to be called once per DAG and that statistics that require a DAG can get one.
  28. Added missing Javadocs and corrected some errors.
  29. Made repairs to testwise deletion and optimized it.
  30. For the Markov check, made the ordered local Markov the default.
  31. Added Polynomial Basis BIC Score (PC-BIC). This adds columns for a truncated polynomial basis (x, x^2,...,x^p) to the data and adjusts the Degenerate Gaussian BIC Score (DB-BIC) to treat these per variable as an ensemble. Discrete variables are handled as in DG, so this will work for mixed data.
  32. Simplified, updated, and tuned the Conditional Correlation Test for general additive models.
  33. Added (experimental) BasisFunctionBicScore, allowing score-based algorithms to handle nonlinear models.
  34. Optimized KCI using the EMJL matrix library.
  35. Added graph saving menu items to the Search box (user request).
  36. Adjusted the Markov Checker interface for KCI so that new samples aren't calculated until clicking the Sample button.
  37. A checkbox was added in the Markov Checker interface so the user can request that the dependent distribution be calculated.
  38. To accommodate KCI and large searches, threading in the FAS algorithm (used by PC and FCI) was adjusted to allow the algorithm to stop properly with an interrupt signal.

Selected Minutiae.

  1. Made table counting classes for the chi-square and g-square tests immutable to be safe in multi-threaded environments in response to a worry discovered when moving to JDK 21.1.
  2. The block real matrix was replaced with MatrixUtils where used.
  3. Corrected pseudoinverse calculation.
  4. Improved fast adjacency search.
  5. Improved KCI implementation. (Still needs work.)
  6. Removed the Meek verbose flag where used.
  7. In MultiDimensionalIntTable and CellTable, Longs with Integers to save space.
  8. Added "no rows" check to ChiSquareTable for efficiency.
  9. Improved MnlrLilklihood and MvpLikelihood.
  10. In AdTree, the Subdivision class was refactored to use the Java record.
  11. Added validation checks to AdTree.
  12. Bootstrap row sampling was added to MarkovCheck and AdTree.
  13. Handled empty total effects in various methods.
  14. Corrected some edge marking logic in AbstractWorkbench.
  15. Refactored compareTo() method in IndependenceFact for efficiency.
  16. Added menu items to the Search box to save graphs in various formats.

Version 7.6.5

15 Aug 05:44
69fdb1c
Compare
Choose a tag to compare

Changes for 7.6.5

  1. Expanded offerings in the Graph menus.
    1. Added a Highlights menu that allows various graph features to be highlighted in the graph.
    2. Added a Check Graph Type to allow the user to check whether a graph is a legal DAG, CPDAG, MPDAG, PAG, or MAG.
    3. Added a Manipulate Graph menu to allow the user to so the following:
      1. Apply Meek rules.
      2. Revert a graph to its CPDAG.
      3. Pick a random DAG in a CPDAG.
      4. Apply final FCI rules.
      5. Revert a graph to its PAG.
      6. Pick the Zhang MAG in a PAG.
    4. Added tools in the Edit menu to undo graph manipualtions or redo them.
    5. Expanded the offerings of the Paths dialog in the Graph box.
      1. Added more path types to the Paths dialog to find paths and sets involving pairs or nodes (or single nodes) in the graph:
        1. Directed paths
        2. Semidirected paths
        3. Treks
        4. Confounder paths
        5. Latent confounder paths,
        6. Cycles
        7. All paths
        8. Adjacents
        9. Adustment sets
        10. Amenable paths
        11. Backdoor paths
      2. Added adjustment sets tools to the Paths dialog, with the capacity to check to see if a given set is an adjustment set.
      3. Added a parameter editor to the Paths dialog.
  2. Made some algorithm changes.
    1. Pulled the version of FASK used in publication from the repository so that FASK results from those papers can be replicated. The parameters were adjusted a bit.
    2. Added a new experimental algorithm, LV-Lite, which begins with BOSS or GRaSP and substitutes score-based steps for subsequent steps in GFCI.
      1. Made LV-Lite correct from a d-separation oracle.
      2. Added clear logging to LV-Lite.
    3. Fixed MagSemBic code in algcomparison and added corresponding scores for Degenerate Guassian and Conditional Gaussian.
    4. Adjusted code of PC to ensure a CPDAG is output, by inserting new unshielded colliders to avoid Meek rule cycles.
    5. Added a new heuristic algorithm, BOSS-PAG, which runs BOSS and reports the PAG of the DAG it generates.
    6. Optimized the final FCI rule.
    7. Adjusted the repairFaultyPag() method in LV-Lite to guarantee that a legal PAG is output and added this option to FCI, FCI-Max, BFCI,
    8. Fixed an issue in the Degenerate Gaussian score.
  3. Added a new API, GridSearch, which presents the Algcomparison tool as an interface tool in the Tetrad interface.
    1. Added a number of new statistics to GridSearch.
    2. Added utility dialog to GridSearch, to sort comparison tables by a certain function.
    3. Added ability to specify user-defined data and/or knowledge for GridSearch.
    4. Made several issue fixes to GridSearch to make it work better for large comparisons.
    5. Added a tab to GridSearch to allow the user to view the graphical models described in comparison tables.
      GRaSP-FCI, SP-FCI, GFCI, and LV-lite.
  4. Added a new tool to the interface to allow one to calculate total effects given adjustment sets for linear models.
  5. Made some changes the MarkovCheckEditor.
    1. Replaced regex filtering by internal regex filtering that selects rows for Ind(x, y | Z) where x or y is a node selected from a dropdown (or all nodes).
    2. Adjusted some parameters in the MarkovCheckEditor.
  6. Fixed some bugs/issues.
    1. Fixed a bug in the semidirected path code (and other recursive path-finding codes) that allowed a node to be repeated on a path.
    2. Added row settability to Conditional Gaussian and Degenerate Gaussian.
    3. Rendered several parameters in various LV searches more consistent in behavior.
    4. Ensured knowledge is correctly used for all LV algorithms.
    5. Fixed buggy row selection setters for various independence tests.
    6. Fixed readObject and writeObject methods throughout code to catch and localize serialization errors so they can be addressed more precisely.
    7. Updated Degenerate Gaussian score.
    8. Added an implementation for D-SEP (see CPS) and revised DAG to PAG to use it; this greatly speeds up DAG to PAG.
  7. Updated manual for recent changes.

What's Changed

  • Include Non Gaussian cases for Local Precision and Recall tests for DAG and CPDAG respectively by @vbcwonderland in #1770
  • Introducing LocalGraphConfusion and its corresponding Precision and Recall classes by @vbcwonderland in #1771
  • Update getLocalIndependenceFacts to check on independence by @vbcwonderland in #1773
  • Introduce shuffle trick to get more local P-values by @vbcwonderland in #1774
  • Introduce plot data collection for different confusion statistics by @vbcwonderland in #1775
  • Introduce plot data collection for different local graph confusion statistics by @vbcwonderland in #1776
  • Introduce test and plot data collection for Gaussian CPDAG case for local Markov Blanket using Local Graph Confusion statistics by @vbcwonderland in #1778
  • Generate plot data for Gaussian CPDAG Markov Blanket case using AdjP, AdjR, AHP, AHR confusion statistics by @vbcwonderland in #1777
  • Non Gaussian DAG/CPDAG for Local Markov Blanket test case, confusion stats using LocalGraphConfusion by @vbcwonderland in #1780
  • Generate plot data for Non Gaussian DAG and CPDAG for Local Markov Blanket test cases using AdjacencyConfusion and ArrowConfusion statistics by @vbcwonderland in #1779
  • Fixed shuffle function and combine all shuffled independence test p vals for a target node into a flat list to feed into Anderson Darling Test by @vbcwonderland in #1781
  • Finished up experimental LV-Lite and cleaned up the rest of the LV code. by @jdramsey in #1769
  • Joe work 2024 6 1 by @jdramsey in #1784
  • getAndersonDarlingTestAcceptsRejectsNodes Typo fix by @vbcwonderland in #1785
  • Markov Check Test on same graph for different confusion matrix (Adj, AH, LG) for Gaussain DAG on Markov Blanket by @vbcwonderland in #1786
  • Resolve NaN ADTest P value from empty independent facts cases by @vbcwonderland in #1787
  • Markov Check, record lower recall nodes when plotting data by @vbcwonderland in #1788
  • Padding for PR #1788 Markov Check, record lower recall nodes when plotting data by @vbcwonderland in #1789
  • Fix node replacement issue for estimated graph for both local and global graph by @vbcwonderland in #1790
  • Move all nodewise markov tests from CheckMarkov Unit tests and allow direct call for nodewise markov by @vbcwonderland in #1792
  • MarkovCheck renaming to checkIndependenceForTargetNode by @vbcwonderland in #1794
  • Update LocalGraph Confusion matrix calculation by @vbcwonderland in #1793
  • Switching the precomputeCovariances parameter to true throughout. by @jdramsey in #1791
  • fixing dg by @bja43 in #1798
  • Include specify file for test check nodewise markov by @vbcwonderland in #1799
  • joe_work_2024_6-13 by @jdramsey in #1800
  • joe-work-2024-8-12 by @jdramsey in #1801
  • joe-work-2024-8-14 by @jdramsey in #1802
  • Version 7.6.5 code by @jdramsey in #1803

Full Changelog: v7.6.4...v7.6.5

Version 7.6.4

07 May 16:22
1611de7
Compare
Choose a tag to compare

Updates for 7.6.4

  1. Added elapsed wall time of algorithm run to the Stats List editor if a GeneralAlgorithmRunner is a parent of it.
  2. Updated the manual so that all algorithms, tests, and scores have documentation in the Search box in the interface.
  3. Added a method to MarkovCheck to print out a Markov check result as a string for use in Causal Command.
  4. Resolved all JavaDoc warnings.
  5. Made the handling of threads more uniform, using a ForkJoinPool for everything. A new ForkJoinPool is created for each algorithm's run, allowing all threads for that pool to be stopped by calling shutdownNow() on the pool when the current thread is interrupted.
  6. For parallelized algorithms, added (where not already available) a parameter to specify the number of threads to use.
  7. For bootstrapping, also added a parameter for the number of threads to use (for the bootstrapping itself).
  8. Fixed a long-standing bug in the interface where clicking the stop button would not stop all threads associated with a multi-threaded algorithm.
  9. Added a parameter for the number of threads to BFCI and GFCI since BOSS and FGES have this parameter.
  10. Fixed the stop button in the interface so that partial work is not returned if an algorithm is stopped.
  11. Added a method to test whether a given graph is a legal CPDAG.
  12. Set as default for bootstrapping not to include the original dataset as an extra sample.
  13. Cleaned up the TetradLogger class to use immediate logging throughout the code.
  14. Cleaned up logging for PC and FCI and several other algorithms.
  15. Moved the session package from the lib package to the GUI package.
  16. Corrected null and alternative hypotheses for Bayes Estimator.
  17. Increased the factor for off-peak randomizations for rows in CPTs for BayesIM randomization.
  18. Improved deserialization procedure for LoadSessionAction.
  19. Reduced the size of the initial application windows.
  20. Fixed the stop button in the interface so that partial work is not returned if an algorithm is stopped.
  21. Made a correction to the whitening step of FastICA, affecting ICA LiNGAM and ICA LiNG-D.
  22. Did another cleanup/documentation update pass through the search package using IntelliJ's AI Assistant.
  23. Did another cleanup/documentation update pass through the test package using IntelliJ's AI Assistant.
  24. Fixed bug in SemSimulation where when different graphs were specified, data would not be simulated using the novel graphs.
  25. Refactored the generalized SEM editors.
  26. In the generalized SEM IM, for simulation, switched to a recursive method for acyclic models; the Fisher method is only used for cyclic models.
  27. Fixed bug in generalized sem PM where edits to formulas would eventually cause Tetrad to hang.
  28. Refactored GeneralizedSemSimulation and SemSimulation.
  29. Revised the ICA-LiNGAM and ICA-LiNG-D classes again for clarity and to fix some reported issues.
  30. Revised the Direct-LiNGAM class for speed and accuracy.
  31. Replaced the previous implementation of bootstrapping with a new one.
  32. Did more JavaDoc documentation work to resolve all JavaDoc errors and warnings.
  33. Fixed issue in IDA preventing all combinations of siblings from being explored.
  34. Added IDA check, plus a UI for it in the Tetrad app.
  35. Remembered opening window size and position from the last size/position the user set.
  36. We have added a UI for the Algcomparison API, which lets the user do simulation studies for simulation types and algorithm types from Tetrad with multiple combinations of parameter values. To use it, place a Comparison box on the workbench in the UI and follow the instructions in the Help tab.
  37. Fixed the BayesIm editor so that Bayes IM files in Tetrad format can be loaded and saved using the supplied menu items.
  38. Made a version of MlBayesIm that can store very large CPTs, not storing NaNs.
  39. Correspondingly, made a version of MlBayesEstimator that just stores count, not storing 0's, so it is suitable for very large models.
  40. Fixed an issue with the display of random 2-factor MiM models.
  41. Updated deprecated methods in the code.
  42. Added a parser and renderer for the Bayes Interchange Format (BIF) to load/save Bayes IMs.
  43. Did some work to get algorithms to reclaim resources when finished or canceled.
  44. Added parsers/renderers in the interface for the amat.cpdag and amat.pag graph matrix types used in PCALG.
  45. Adjusted the m-separation algorithm so that it can correctly infer m-separation facts from CPDAGs and PAGs; there were some issues that surfaced (rarely) in cases where an arrow was into a directed or nondirected edge in the graph.
  46. Added a link from a graph-containing box to Algcomparison in the UI to let the user specify a specific graph for the comparison.
  47. New items were added to the Graph menu in the Graph box. There is now a Highlight menu to highlight certain features of a graph. (The highlight features have been expanded.)
  48. Added a Check Graph Type menu to check whether a graph is a legal DAG, CPDAG, MPDAG, MAG, or PAG graph type.
  49. Added a Manipulate Graph menu item to manipulate graphs (apply Meek rules, revert to CPDAG, pick random DAG in CPDAG, apply final FCI rules, revert to PAG, pick Zhang MAG in PAG, in addition to previous items to correlate or uncorrelate exogenous variables).
  50. Added a menu item to add or remove PAG edge specialization markups.
  51. Added a menu item to display PAG edge type information.
  52. Added a new experimental algorithm called LV-Lite, a score-based correlate of FCI. This algorithm has similar precision to BFCI but better recall and is considerably faster than BFCI for similar cases.

Version 7.6.3

07 Feb 04:09
Compare
Choose a tag to compare

Updates for 7.6.3

Some issues were found in the recent 7.6.2 release that needed to be fixed, so we are releasing a bug-fix release, 7.6.3. The changes are as follows.

  1. The Class.getInstance() method in the reflection API was deprecated; a workaround was implemented for this. Needed for Causal Command.
  2. Fixed an interface bug affecting 2-factor random MIM graph generation.
  3. Removed extraneous algorithms, tests, and scores from the interface.
  4. Adding missing manual docs for remaining algorithms, tests, and scores, so that all algorithms, tests, and scores in the Search box now have descriptions.

Version 7.6.2

04 Feb 06:13
aecd29b
Compare
Choose a tag to compare

Updates for 7.6.2

Note that starting with this version, all Tetrad jars will be compiled using Corretto JDK 17. Also, the language level of the project will be increased to 17.

These are the new items that impact the Tetrad interface:

  1. There is a new tool for checking whether background knowledge is violated for a search, which is useful for checking ground truth knowledge for a large graph.
  2. The Chi-Square and G-Square discrete tests have been improved. There is now a parameter for them, minimum expected count per cell.
  3. The method for randomizing Bayes IMs has been improved to make these models more Powerful.
  4. The Discrete BIC score has been corrected in places.
  5. A pseudoinverse option has been added for all relevant tests and scores to avoid singularity exceptions.
  6. The Markov Checker now accepts knowledge as an input. For independence facts Ind(X, Y | Z), X and Y are now constrained to come from the last tier of the knowledge, whereas Z can come from any variable in any tier.
  7. In the Graph box, a menu item has been added to highlight all triangles in a graph.
  8. All independence test results are now cached, including for m/d-separation, but excluding ProbabilisticTest when threshold = true (which has an element of randomness). Also, the algorithm for m/d-separation has been sped up considerably. As a result, one should be able to use PC or FCI to calculate correct CPDAGs or PAGs, respectively, for even large graphs, for instance, and Markov Checker should run faster.
  9. BIC scores are available now in the interface for both continuous and discrete DAG and CPDAG models.
  10. The Processing... dialog should now follow the Tetrad interface window if you move the window.
  11. If you type command-Q you now get a confirm dialog. This is to address the old problem of Tetrad quitting unexpectedly while saving out a session, resulting in the session being corrupted.
  12. Added a seed parameter to GRaSP, BOSS, GRaSP-FCI, BFCI, and a few other algorithms that use BOSS or GRaSP. Setting the seed to something other than -1 allows for reproducibility for those algorithms.
  13. Added a feature to copy the selected dataset from a data box with multiple data models into a separate box.

Details.

  1. Sped up M/D-Separation.
  2. Added a tool to let users check violations of knowledge for a graph.
  3. Made G-Square an option in ChiSquareTest and eliminated the previous GSquare class.
  4. Added a parameter for the minimum expected count per cell, for the Chi-Square and G-Square tests, defaulting to 1.
  5. Added the isValid parameter to independence results if an algorithm wants to use this information. A result is invalid if the test cannot determine whether the result is 'dependent' or 'independent.'
  6. Moved docs to lib/resources.
  7. Added Anderson-Darling test of U(0, 1) to the Markov checker.
  8. Added IMaGES-BOSS algorithm.
  9. Changed the causal order layout to judge both --> and o-> as putting nodes in a subsequent tier.
  10. Adjusted the randomization of Bayes IMs to reflect, e.g., the ALARM network, where, to the extent possible, a different category in each CPT row has a high probability, and other categories have a low probability. This has much higher power.
  11. Fixed the sign of the penalty term for DiscreteBIC.
  12. Added the F-beta statistic.
  13. Changing the default structure prior to the BDeu score to 0.
  14. Re-introduced the 'pcHeuristic' parameter, which allows one to select one of the PC heuristics given in Spirtes et al., Causation, Prediction, and Search, for algorithms using the Fast Adjacency Search.
  15. Made some corrections to the Discrete BIC score for the case where CPTs had rows summing to zero.
  16. Added an option in the SEM BIC score to use pseudoinverses rather than inverses for calculating residual variances.
  17. Added the pseudoinverse option to the Fisher Z test.
  18. Extended the pseudoinverse option to all other feasible tests and scores that follow the same pattern.
  19. In the Simulation box, changed the menu item for "Bayes net" to "Bayes Net (Multinomial)" and "SEM BIC" to "Linear SEM BIC" for clarity and slightly reordered the options. The underlying code for these did not change.
  20. Added "local Markov check" options to the Markov checker--using a knowledge object to specify for Ind(X, Y | Z) which set X and Y come from (the last tier) and which set the Z variables come from (previous tiers).
  21. Added a menu item for the graph box to highlight all triangles in a graph.
  22. Added caching of independence results for all independence tests (including M/D-Sep, and except for ProbabilisticTest when threshold = true, which has an element of randomness).
  23. Reverted the GrowShrink class to the published algorithm.
  24. Changed the language level of the Tetrad codebase to 17 and specified that all jars starting with this version will be compiled under Corretto's JDK 17.
  25. Fixed BIC score stamping for all relevant algorithms, both continuous and discrete.
  26. Added a note that BIC is calculated as 2L - k ln N (or 2L - c k ln N) everywhere the term appears in the documentation.
  27. Caught the event of a desktop being quit in the interface (as with command-Q on a Mac, which could not be handled in earlier versions), now displaying a confirm dialog.
  28. Updated the saving/loading code in the interface to be a bit smoother.
  29. Changed the wording of the "Processing..." button to "Processing (click to stop)...".
  30. Added code to center the Processing... dialog above the Tetrad interface app frame even if the app is moved to a different monitor.
  31. Fixed a bug in the Markov checker where not all dependencies were being processed.
  32. Added a seed parameter to GRaSP, BOSS, GRaSP-FCI, BFCI, and a few other algorithms that use BOSS or GRaSP. Setting the seed to something other than -1 allows for reproducibility for those algorithms.
  33. Added a feature to copy the selected dataset from a data box with multiple data models into a separate box.

Version 7.6.1

15 Nov 22:57
47ed6a7
Compare
Choose a tag to compare

Updates for 7.6.1 (hotfix):

  1. Fixed a bug introduced in 7.6.0 where, for tiered knowledge, too many edges were forbidden per tier.
  2. Fixed an issue in a snapshot build (not 7.6.0) where you couldn't make a Tiers and Edges editor if you put a knowledge box on the workbench and double-clicked it.
  3. Adding an instruction in the Markov Checker editor that the contents of the table can be copied and pasted into Excel.
  4. Fixed a backward compatibility issue with 7.5.0 for knowledge.
  5. Stamping CPDAG algorithms with both the score used to generate them (where applicable) and standard BIC.
  6. Changed the name of PC-LiNGAM to BOSS-LiNGAM.
  7. Fixed problem with BOSS, GRaSP, etc. code hanging with constant columns.
  8. [Code] Added code to py-tetrad to run the Markov Checker, which required moving the enum ConditioningSetType to a higher level.

Version 7.6.0

31 Oct 15:57
Compare
Choose a tag to compare

Updates for 7.6.0:

  1. Added parallelization code to BOSS.
  2. Fixed some knowledge issues in BOSS and GRaSP.
  3. Fixed sluggishness of graph display.
  4. Fixed the issue in some graph layouts where cyclic graphs would throw exceptions.
  5. Fixed the problem where sometimes, in IntelliJ, parameter defaults would not be available if you launch the Tetrad app.
  6. Fixed a problem in which, for time lag knowledge, the knowledge was not getting into some of the FCI-style algorithms.
  7. Fixed variable ordering problem for knowledge editor (1, 2, 3; not 1, 10, 2. 3).
  8. Adjusted code for all independence tests so exceptions are thrown when encountering singularities.
  9. Fixed SEM IM so parameter settings are used in the SEM IM editor in data simulation.
  10. Added a menu item to the PlotMatrix interface to remove zeros per plot.
  11. Changed the default layout to circle for # notes <= 20 and square otherwise.
  12. Revised PC-LiNGAM code for undirected edges to do BOSS + non-gaussian orientation (for scalability).
  13. Added PC-LiNGAM to the interface.
  14. Added DirectLiNGAM to the interface.
  15. Added DAGMA to the interface.
  16. Added CFCI to the interface.
  17. Fixed a bug in Knowledge where deleting required or forbidden edges in the Knowledge editor didn't guarantee that they were deleted from Knowledge.
  18. Fixed a Knowledge bug preventing Knowledge Groups from behaving correctly.
  19. Fixed a bug in the forbidden edges iterator in Knowledge that allowed edges to be oriented against knowledge.
  20. Added some checks so that edges forbidden in Knowledge cannot be required and vice-versa.
  21. Fixed a problem with testwise deletion for the Fisher Z test.

Code-only updates:

  1. (Code) Collapsed duplicate methods for detecting semidirected paths.
  2. (Code) Moved all data transform and graph transform methods into DataTransform and GraphTransform, respectively (a change made for Tetrad-FX). This corrects the continuous, discrete, and mixed data loading method in SimpleDataLoader.
  3. (Code) Fixed some Javadoc errors preventing successful build.
  4. (Code) Copied some layout methods from Tetrad-FX and some modified methods for loading data.
  5. (Code) Factored out the method in Markov Check that generates the lists of all m-separation and m-connecting independence checks from the all sets option in the Markov Checker for use in rpy-tetrad.

Updates for py-tetrad and rpy-tetrad:

  1. Added PC-LiNGAM methods to TetradSearch (available in Python and R).
  2. Added DirectLiNGAM methods to TetradSearch (available in Python and R).
  3. Added DAGMA methods to TetradSearch (available in Python and R).
  4. Added a method to TetradSearch to check whether a graph is a legal PAG and a method to determine why not.
  5. Added a method to TetradSearch to list all independence facts checked (or dependence facts checked) by the Markov Checker in the all-sets option.
  6. Updated the Tetrad jar for py-tetrad.

v7.5.0

03 Aug 23:19
Compare
Choose a tag to compare

Updates for 7.5.0

General comment:

  • For version 7.5.0, we will do separate releases for JDK 1.8 and JDK > 1.8 (compiled under JDK 17). It has come to our attention that many users cannot update to a recent version of Java because their machines are not self-administered, and we wish to support these users. The Tetrad codebase uses language level 8, so this is feasible.

Algorithm highlights:

  • Added an implementation of DirectLiNGAM.
  • Added an implementation of DAGMA.
  • Added an additive nonlinear simulation method.
  • Added Integration of Overlapping Datasets (IOD) as a pooled independence test that can be used in, say, FCI.
  • Improved interfaces and code for PC, CPC, FAS, and other related classes.
  • Generalized the Markov blanket checker to be compatible across graph types.
  • Added the Restricted BOSS algorithm, which does an anteriority variable selection and then runs BOSS over that set of variables.
  • Updated FGES-MB with a more up-to-date algorithm and new options.
  • Did several updates/revisions of CStaR and added BOSS and Restricted BOSS as options for the CPDAG search.

Interface highlights:

  • Added a menu item to the interface to show people how to make suggestions.
  • Added a new Markov checker accessible from both Python and the Java interface.
  • Added a new dialog showing descriptive statistics for entire datasets.
  • The descriptive statistic dialog also identifies constant columns in the data and gives an example of a 2-3 variable singularity if one exists.
  • Added an interactive plot matrix tool.
  • Added a new popup, compatible cross-platform, to show when processes are being run in the interface.
  • Added a graph manipulation option to strip null edges from bootstrapping graphs.
  • Added informative exceptions when nonsingularies are encountered in test and scoring operations.
  • Moved methods to compare two graphs to the algcomparison package.
  • Added a new parameter to allow saving of bootstrapped graphs to be turned on or off.
  • Added tools to copy coefficient matrix copy error covariance matrix' to SEM IM editor and SEM Estimator Editor.
  • Wrote a paper for the CAWS conference introducing our Python and R interfaces.

Debugging highlights:

  • Turned unit test back on to test serialization so that saving and loading will be more stable.
  • Fixed a node equality bug causing discrepancies between Causal Command and the Tetrad GUI.
  • Fixed bugs preventing simple time series from being simulated.
  • Fixed and updated knowledge layouts.
  • Fixed issue with large bootstrapping operations where session sizes would balloon to large sizes because bootstrapped graphs were saved.

====DETAILS====

  1. Decreasing the minimum version needed for Tetrad to 1.8, so long as it is compiled under Corretto 1.8.
  2. Added a parameter to BOSS to permit optional inclusion of the BES step.
  3. Fixed some unit tests for the data loader that were failing on Windows; now, all tests pass on all platforms.
  4. Added BES option to BFCI.
  5. Added a method in Paths to calculate the maximal cliques in a graph using the Brom-Kerbosch algorithm.
  6. Cleaned up PC, CPC, FAS, PcCommon, and other related classes in the search and algcomparison packages. Their parameters are slightly different now.
  7. Removed PcMax and added a parameter in PC to use the Max-P heuristic for orient colliders.
  8. Adjusted hyperparameters for PC, CPC, FAS, and their defaults. Please see the code and interfaces.
  9. Changed 'aggressively prevent cycles' to 'meekPreventCycles' throughout the code.
  10. Coded up a new Integration of Overlapping Datasets (IOD) pooled independence test and an FCI-IOD wrapper for it that takes a list of datasets with overlapping variables and generates an FCI graph for them that pools independence tests for X || Y | Z for all datasets containing the variables X, Y and all of Z, using the Fisher p-value pooling method.
  11. Moved the IOD independence test from the work_in_progress to the search package.
  12. Linked to the search Javadocs from the Java interface manual.
  13. Coded up a new method for running processes with a popup "Stop" button that doesn't call the deprecated Thread.stop(). The "Stop" button was broken on Windows but now works on all platforms.
  14. Added a graph tool to strip null edges from graphs included in graphs by the bootstrapping API. This is to allow bootstrapping graphs to be estimated.
  15. Added 'copy coefficient matrix' and 'copy error covariance matrix' menu items to SEM IM editor and SEM Estimator Editor.
  16. Changed the sets of "should be independent" (Markov check) and "should be dependent" (Faithfulness check) facts in the Markov Checker. For the Markov check X || Y | parents(X) is listed for dsep(X, Y | parents(X)), and the Faithfulness check, X ~|| Y | parents(X) is listed for dconn(X, Y | parents(X).
  17. Relabeled tabs in Markov check to "Check Local Markov" and "Check Local Faithfulness."
  18. Extracted a Python-accessible model for the Markov check in the search package and refactored the interface to use it.
  19. Added a Help button to the Markov check that gives instructions for how to use the tool.
  20. Added a Kolmogorov-Smirnov check of uniformity for p-values in the Markov checker. For the "Check Local Markov" tab, if the test yields p-values, this should register as Uniform (p > alpha) for good results.
  21. Added the Markov Adequacy Score to the Markov Check and to the Markov Check Editor, which is zero if non-Markov and the faction of dependent tests under the m-connected condition otherwise (to give a sense of how faithful the graph is to the distribution).
  22. Changed "d-separation" and "d-connection" to "m-separation" and "m-connection" throughout the codebase to emphasize the fact that d-separation is m-separation restricted to the case of DAGs.
  23. Fixed problem preventing GRaSP-FCI from using m-separation to analyze an input graph.
  24. Put the legal PAG check in the interface inside of a watch block so that it can be canceled for large graphs.
  25. Changed name of IndTestMsep to MsepTest.
  26. Added parameters to GRaSP and BOSS to disallow randomness inside the algorithm. Allowing randomness helps these algorithms avoid local optima, but the user may wish to prioritize consistent answers for the algorithms.
  27. Replaced Markov blanket calculations in GraphUtils with a calculation that works for DAGs, CPDAGs, MAGs, and PAGs.
  28. Added an option in the Markov Checker to display independence results for Ind(X, Y | MB(X)).
  29. Generalized the markovBlanketDag method in GraphUtils to markovBlanketGraph, so that it gives the subgraph over {X} U MB(X) for any DAG, CPDAG, MAG, or PAG.
  30. Fixed the displayed error for the case where you erroneously try to do bootstrapping on a covariance matrix.
  31. Cleaned up the graph comparison API. (There were two such methods; collapsed these into one.)
  32. Fixed a null pointer bug in the Edgewise Comparison for the case where you compared a PAG to the true DAG with latents.
  33. Fixed bugs preventing simple time series from being simulated.
  34. Added Bollen and Ting reference for Wishart and Delta tetrad tests to the manual (for BPC, FOFC, and FTFC). I also added the original Delta test reference to the manual (Bollen 1990).
  35. Added a knowledge layout by knowledge indices in the Layout menus. Tiers for variables need to be indicated in the variable names as "X," e.g., for the last tier, and, e.g., "X:1" for the next to last tier, etc.
  36. Fixed some issues with knowledge for BFCI, GRaSP-FCI, and BFCI.
  37. Turned stable FAS back on.
  38. Allowed control-click to substitute for right-click for graph workbench to accommodate Mac Magic Mouse.
  39. Fixed the code so that if a search uses knowledge with more than one tier, a knowledge layout is used based on indices of variables ("X", "X:1", "X:2", etc.
  40. Made knowledge layout work (not from knowledge indices) in the Search box.
  41. Refactored GFCI, BFCI, and GRaSP-FCI to make the code more modular.
  42. Fixed node hashcode and equality methods to look at the names of nodes rather than node objects.
  43. Revised the hashCode and equals methods for the node classes to forgo testing object identity and instead always test for equality of names.
  44. Fixed bug in Knowledge editor where if you loaded knowledge with more than 3 tiers, only 3 would be displayed.
  45. Added a hashcode method for DiscreteVariable to return the hashcode of the variable's name (as with the other variable types).
  46. Cleaned up equals method for Edge to use name equality only and node hashcodes.
  47. Removed the NodeEquality class and all references to it in the project.
  48. Added a menu to the Java Tetrad interface to allow users to submit suggestions. It contains a clickable link that takes the user to the Tetrad Issues List.
  49. Moved the dangling IndependenceTest interface into the search package.
  50. Removed the structure prior parameter from Degenerate Gaussian as it was not used.
  51. Turned the test back on to deserialize saved serialization archives to address saving and loading issues with Tetrad sessions.
  52. Added new serialization archives for tetrad-lib and tetrad-gui for 2023-06-27.
  53. Placed Save... and Save As... actions for sessions in the Tetrad app inside watch blocks to reduce the possibility of session corruption due to prematurely typing control-Q (which Java can't catch).
  54. Added informative exceptions in places where singularity exceptions are thrown, indicating which variables are involved in the singularities.
  55. Added CompareTwoGraphs in algcomparison to compare two graphs on a list of statistics.
  56. Added a printout in the Descriptive Statistics popup to pre-screen data for constant columns and singularities for 2 or 3 variables taken at a time.
  57. Added a new algorithm, DirectLingam. This algorithm, like IcaLingam and the pairwise orientation rules, addresses the linear, non-Gaussian case. Reference: Shimizu, S., Inazumi, T., Sogawa, Y., Hyvarinen, A...
Read more

v7.4.0

18 May 21:33
36dd1d2
Compare
Choose a tag to compare

Fixes 7.4.0

  1. Refactored the Degenerate Gaussian BIC score so that it wraps SEM BIC. (Faster.)
  2. Added new implementations of ICA-LiNGAM and ICA-LiNG-D.
  3. Reorganized and fixed Javadoc documentation for the search package in Tetrad. This involved general code cleanup, removing unused classes, fleshing out documentation, and repackaging. All scores are now in the edu.cmu.tetrad.search.score package and all tests are now in the edu.cmu.tetrad.search.test package. All utility classes for search are now in the edu.cmu.tetrad.search.utils package. Classes not ready for publication are in the "work_in_progress" package. All documentation for public-facing classes has been updated and is currently at this location: https://www.phil.cmu.edu/tetrad-javadocs/7.4.0/edu/cmu/tetrad/search/package-summary.html.
  4. The Python and R wrappers (py-tetrad, rpy-tetrad) have been updated with the above revisions. Comments on the documentation are welcome.
  5. Updated and greatly optimized GRaSP, BOSS, and SP versions are now in the development branch. Knowledge of forbidden and required edges is implemented for all of these. For BOSS and SP, processing by knowledge tier is available to increase the number of variables then can be processed for, say, time series data.
  6. Fixed saving and loading for graphs using the JSON format.

v7.3.4

13 Apr 19:13
1770bd7
Compare
Choose a tag to compare

Fixes for 7.3.4

This version will almost certainly break Tetrad sessions saved under previous versions from the interface; you should keep the datasets from those sessions if needed before using the new version and re-load them in the new session. This change was required as part of an effort to make the codebase more professional.

  1. Enforced class naming convention (Capital letter followed by camel case) throughout the code.
  2. Fixed null pointer problem for PcMb.
  3. Fixed knowledge issue for PcMax.
  4. Fixed null pointer problem for FaskVote.