<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article article-type="review-article" dtd-version="2.3" xml:lang="EN" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Syst. Biol.</journal-id>
<journal-title>Frontiers in Systems Biology</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Syst. Biol.</abbrev-journal-title>
<issn pub-type="epub">2674-0702</issn>
<publisher>
<publisher-name>Frontiers Media S.A.</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">1631901</article-id>
<article-id pub-id-type="doi">10.3389/fsysb.2025.1631901</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Systems Biology</subject>
<subj-group>
<subject>Mini Review</subject>
</subj-group>
</subj-group>
</article-categories>
<title-group>
<article-title>A guide to bayesian networks software for structure and parameter learning, with a focus on causal discovery tools</article-title>
<alt-title alt-title-type="left-running-head">Canonaco et al.</alt-title>
<alt-title alt-title-type="right-running-head">
<ext-link ext-link-type="uri" xlink:href="https://doi.org/10.3389/fsysb.2025.1631901">10.3389/fsysb.2025.1631901</ext-link>
</alt-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes" equal-contrib="yes">
<name>
<surname>Canonaco</surname>
<given-names>Francesco</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<xref ref-type="aff" rid="aff2">
<sup>2</sup>
</xref>
<xref ref-type="corresp" rid="c001">&#x2a;</xref>
<xref ref-type="author-notes" rid="fn001">
<sup>&#x2020;</sup>
</xref>
<uri xlink:href="https://loop.frontiersin.org/people/3073324/overview"/>
<role content-type="https://credit.niso.org/contributor-roles/conceptualization/"/>
<role content-type="https://credit.niso.org/contributor-roles/investigation/"/>
<role content-type="https://credit.niso.org/contributor-roles/resources/"/>
<role content-type="https://credit.niso.org/contributor-roles/supervision/"/>
<role content-type="https://credit.niso.org/contributor-roles/writing-original-draft/"/>
<role content-type="https://credit.niso.org/contributor-roles/Writing - review &#x26; editing/"/>
</contrib>
<contrib contrib-type="author" equal-contrib="yes">
<name>
<surname>Gaudillo</surname>
<given-names>Joverlyn</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<xref ref-type="author-notes" rid="fn001">
<sup>&#x2020;</sup>
</xref>
<role content-type="https://credit.niso.org/contributor-roles/conceptualization/"/>
<role content-type="https://credit.niso.org/contributor-roles/investigation/"/>
<role content-type="https://credit.niso.org/contributor-roles/supervision/"/>
<role content-type="https://credit.niso.org/contributor-roles/writing-original-draft/"/>
<role content-type="https://credit.niso.org/contributor-roles/Writing - review &#x26; editing/"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Astrologo</surname>
<given-names>Nicole</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<uri xlink:href="https://loop.frontiersin.org/people/3176609/overview"/>
<role content-type="https://credit.niso.org/contributor-roles/conceptualization/"/>
<role content-type="https://credit.niso.org/contributor-roles/writing-original-draft/"/>
<role content-type="https://credit.niso.org/contributor-roles/Writing - review &#x26; editing/"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Stella</surname>
<given-names>Fabio</given-names>
</name>
<xref ref-type="aff" rid="aff2">
<sup>2</sup>
</xref>
<uri xlink:href="https://loop.frontiersin.org/people/3100546/overview"/>
<role content-type="https://credit.niso.org/contributor-roles/conceptualization/"/>
<role content-type="https://credit.niso.org/contributor-roles/writing-original-draft/"/>
<role content-type="https://credit.niso.org/contributor-roles/Writing - review &#x26; editing/"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Acerbi</surname>
<given-names>Enzo</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<role content-type="https://credit.niso.org/contributor-roles/conceptualization/"/>
<role content-type="https://credit.niso.org/contributor-roles/writing-original-draft/"/>
<role content-type="https://credit.niso.org/contributor-roles/Writing - review &#x26; editing/"/>
</contrib>
</contrib-group>
<aff id="aff1">
<sup>1</sup>
<institution>Minutia.AI Pte. Ltd.</institution>, <addr-line>Singapore</addr-line>, <country>Singapore</country>
</aff>
<aff id="aff2">
<sup>2</sup>
<institution>Department of Informatics, Systems and Communication, University of Milano-Bicocca</institution>, <addr-line>Milano</addr-line>, <country>Italy</country>
</aff>
<author-notes>
<fn fn-type="edited-by">
<p>
<bold>Edited by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/148560/overview">Claudio Angione</ext-link>, Teesside University, United Kingdom</p>
</fn>
<fn fn-type="edited-by">
<p>
<bold>Reviewed by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1405920/overview">Robert Smith</ext-link>, Wageningen University and Research, Netherlands</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1052294/overview">Manh-Toan Ho</ext-link>, Centre for Interdisciplinary Social Research, Phenikaa University, Vietnam</p>
</fn>
<corresp id="c001">&#x2a;Correspondence: Francesco Canonaco, <email>francesco.canonaco@minutia.ai</email>
</corresp>
<fn fn-type="equal" id="fn001">
<label>
<sup>&#x2020;</sup>
</label>
<p>These authors have contributed equally to this work and share first authorship</p>
</fn>
</author-notes>
<pub-date pub-type="epub">
<day>25</day>
<month>08</month>
<year>2025</year>
</pub-date>
<pub-date pub-type="ecorrected">
<day>23</day>
<month>10</month>
<year>2025</year>
</pub-date>
<pub-date pub-type="collection">
<year>2025</year>
</pub-date>
<volume>5</volume>
<elocation-id>1631901</elocation-id>
<history>
<date date-type="received">
<day>20</day>
<month>05</month>
<year>2025</year>
</date>
<date date-type="accepted">
<day>08</day>
<month>08</month>
<year>2025</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#xa9; 2025 Canonaco, Gaudillo, Astrologo, Stella and Acerbi.</copyright-statement>
<copyright-year>2025</copyright-year>
<copyright-holder>Canonaco, Gaudillo, Astrologo, Stella and Acerbi</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/">
<p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these terms.</p>
</license>
</permissions>
<abstract>
<p>A representation of the cause-effect mechanism is needed to enable artificial intelligence to represent how the world works. Bayesian Networks (BNs) have proven to be an effective and versatile tool for this task. BNs require constructing a structure of dependencies among variables and learning the parameters that govern these relationships. These tasks, referred to as structural learning and parameter learning, are actively investigated by the research community, with several algorithms proposed and no single method having established itself as standard. A wide range of software, tools, and packages have been developed for BNs analysis and made available to academic researchers and industry practitioners. As a consequence of having no one-size-fits-all solution, moving the first practical steps and getting oriented into this field is proving to be challenging to outsiders and beginners. In this paper, we review the most relevant tools and software for BNs structural and parameter learning to date, with a focus on causal discovery tools, providing our subjective recommendations directed to an audience of beginners. In addition, we provide an extensive easy-to-consult overview table summarizing all software packages and their main features. By improving the reader&#x2019;s understanding of which available software might best suit their needs, we improve accessibility to the field and make it easier for beginners to take their first step into it.</p>
</abstract>
<kwd-group>
<kwd>structure learning</kwd>
<kwd>parameter learning</kwd>
<kwd>causal discovery algorithms</kwd>
<kwd>causal discovery</kwd>
<kwd>bayesian networks (BNs)</kwd>
</kwd-group>
<counts>
<page-count count="8"/>
</counts>
<custom-meta-wrap>
<custom-meta>
<meta-name>section-at-acceptance</meta-name>
<meta-value>Data and Model Integration</meta-value>
</custom-meta>
</custom-meta-wrap>
</article-meta>
</front>
<body>
<sec id="s1">
<title>1 Introduction</title>
<p>Bayesian networks (BNs) have established themselves over the years as a powerful framework for modeling and analyzing complex systems under conditions of uncertainty. They have been widely employed in fields such as medicine (<xref ref-type="bibr" rid="B3">Arora et al., 2019</xref>), biology (<xref ref-type="bibr" rid="B23">Needham et al., 2007</xref>) and engineering (<xref ref-type="bibr" rid="B16">Kammouh et al., 2020</xref>). BNs represent probabilistic relationships among variables in a graphical way that allows efficient inference and intuitive causal reasoning when specific assumptions are met. It is important to clarify that while Bayesian networks encode conditional dependencies through directed edges, these do not necessarily imply causal relationships. A causal network is a specific type of Bayesian network where the edges reflect actual causal influences among variables, and their interpretation relies on assumptions such as causal sufficiency, faithfulness, and the absence of unmeasured confounding. Throughout this paper, we include structure learning algorithms developed for both probabilistic modeling and causal discovery. For a detailed discussion of the assumptions underlying causal discovery, we refer the reader to (<xref ref-type="bibr" rid="B37">Vonk et al., 2023</xref>). A BN (<xref ref-type="bibr" rid="B11">Jensen and Nielsen, 2007</xref>) consists of:<list list-type="simple">
<list-item>
<p>
<inline-formula id="inf1">
<mml:math id="m1">
<mml:mrow>
<mml:mo>&#x2022;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> A collection of random variables represented as nodes <inline-formula id="inf2">
<mml:math id="m2">
<mml:mrow>
<mml:mi mathvariant="bold">X</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>, connected by directed edges that form a Directed Acyclic Graph (DAG). For instance, in <xref ref-type="fig" rid="F1">Figure 1</xref>, the variables could be denoted as <inline-formula id="inf3">
<mml:math id="m3">
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> (Difficulty), <inline-formula id="inf4">
<mml:math id="m4">
<mml:mrow>
<mml:mi>I</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> (Intelligence), <inline-formula id="inf5">
<mml:math id="m5">
<mml:mrow>
<mml:mi>G</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> (Grade), <inline-formula id="inf6">
<mml:math id="m6">
<mml:mrow>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> (SAT), and <inline-formula id="inf7">
<mml:math id="m7">
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> (Letter), corresponding to the nodes shown in the DAG.</p>
</list-item>
<list-item>
<p>
<inline-formula id="inf8">
<mml:math id="m8">
<mml:mrow>
<mml:mo>&#x2022;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> A finite set of mutually exclusive states associated with each random variable.</p>
</list-item>
<list-item>
<p>
<inline-formula id="inf9">
<mml:math id="m9">
<mml:mrow>
<mml:mo>&#x2022;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> For each random variable <inline-formula id="inf10">
<mml:math id="m10">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> with parents <inline-formula id="inf11">
<mml:math id="m11">
<mml:mrow>
<mml:mtext>Pa</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>, a Conditional Probability Distribution (CPD) specifying the probability distribution <inline-formula id="inf12">
<mml:math id="m12">
<mml:mrow>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x2223;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>. This CPD quantifies the influence of the parent variables on <inline-formula id="inf13">
<mml:math id="m13">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>. If <inline-formula id="inf14">
<mml:math id="m14">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> has no parents, it is associated with an unconditional probability distribution <inline-formula id="inf15">
<mml:math id="m15">
<mml:mrow>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>. In <xref ref-type="fig" rid="F1">Figure 1</xref>, <inline-formula id="inf16">
<mml:math id="m16">
<mml:mrow>
<mml:mtext>Pa</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>G</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mi>D</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>I</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>, which means that <inline-formula id="inf17">
<mml:math id="m17">
<mml:mrow>
<mml:mi>G</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> depends on both <inline-formula id="inf18">
<mml:math id="m18">
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf19">
<mml:math id="m19">
<mml:mrow>
<mml:mi>I</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> via the conditional distribution <inline-formula id="inf20">
<mml:math id="m20">
<mml:mrow>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>G</mml:mi>
<mml:mo stretchy="false">&#x2223;</mml:mo>
<mml:mi>D</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>I</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
</list-item>
</list>
</p>
<fig id="F1" position="float">
<label>FIGURE 1</label>
<caption>
<p>Student Bayesian Network example with CPDs.</p>
</caption>
<graphic xlink:href="fsysb-05-1631901-g001.tif">
<alt-text content-type="machine-generated">Bayesian network diagram illustrating dependencies among nodes: Difficulty, Intelligence, Grade, SAT, and Letter. Each node is connected with arrows indicating influence. Probability tables for each node are shown, detailing conditional probabilities for various states, including Difficulty (d&#x2070;, d&#xB9;), Intelligence (i&#x2070;, i&#xB9;), Grade (g&#x2070;, g&#xB9;, g&#xB2;), SAT (s&#x2070;, s&#xB9;), and Letter (l&#x2070;, l&#xB9;).</alt-text>
</graphic>
</fig>
<p>
<xref ref-type="fig" rid="F1">Figure 1</xref> shows a well-known example of BN where the variables course <italic>Difficulty</italic> and student <italic>Intelligence</italic> are assumed to be independently assigned prior to the realization (observing the value) of any other variable. The student&#x2019;s <italic>Grade</italic> is influenced by both <italic>Difficulty</italic> and <italic>Intelligence</italic>. The <italic>SAT</italic> Score depends solely on <italic>Intelligence</italic>, while the recommendation <italic>Letter</italic> is assumed to be based exclusively on the <italic>Grade</italic>. This structure reflects the intuitive idea that each variable is directly influenced only by its parent nodes in the network (<xref ref-type="bibr" rid="B19">Koller and Friedman, 2009</xref>).</p>
<p>In fact, BNs leverage conditional independence to compactly represent the joint probability distribution over a set of random variables <inline-formula id="inf21">
<mml:math id="m21">
<mml:mrow>
<mml:mi mathvariant="bold">X</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>. The joint distribution can be factorized into a product of CPDs, one for each node:<disp-formula id="equ1">
<mml:math id="m22">
<mml:mrow>
<mml:mi>P</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:munderover accentunder="false" accent="true">
<mml:mrow>
<mml:mo>&#x220f;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:munderover>
<mml:mi>P</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x2223;</mml:mo>
<mml:mtext>Pa</mml:mtext>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
</disp-formula>
</p>
<p>where <inline-formula id="inf22">
<mml:math id="m23">
<mml:mrow>
<mml:mtext>Pa</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula> denotes the set of parent variables of <inline-formula id="inf23">
<mml:math id="m24">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> in the network. Although, in principle, various types of distributions can be used, most applications in the literature have focused on two main modeling assumptions due to their mathematical tractability and computational efficiency:<list list-type="simple">
<list-item>
<p>
<inline-formula id="inf24">
<mml:math id="m25">
<mml:mrow>
<mml:mo>&#x2022;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> <bold>Discrete Bayesian Networks</bold> (<xref ref-type="bibr" rid="B10">Heckerman et al., 1995</xref>): assume that <inline-formula id="inf25">
<mml:math id="m26">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is a multinomial random variable dependent on the configurations of the values of its parents;</p>
</list-item>
<list-item>
<p>
<inline-formula id="inf26">
<mml:math id="m27">
<mml:mrow>
<mml:mo>&#x2022;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> <bold>Gaussian Bayesian Networks</bold> (<xref ref-type="bibr" rid="B7">Geiger and Heckerman, 1994</xref>): assume that each variable <inline-formula id="inf27">
<mml:math id="m28">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is a univariate normal random variable, with its value linearly dependent on its parent variables.</p>
</list-item>
</list>
</p>
<p>The objective of the learning process is to determine both the network structure and the associated parameters that best represent the observed data. Learning a Bayesian Network involves:<list list-type="simple">
<list-item>
<p>
<inline-formula id="inf28">
<mml:math id="m29">
<mml:mrow>
<mml:mo>&#x2022;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> <bold>Structure learning</bold>: identifying the qualitative structure of the network, i.e., the conditional independence relationships among the variables.</p>
</list-item>
<list-item>
<p>
<inline-formula id="inf29">
<mml:math id="m30">
<mml:mrow>
<mml:mo>&#x2022;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> <bold>Parameter learning</bold>: estimating the conditional probability distributions (CPDs) for each node.</p>
</list-item>
</list>
</p>
<p>Learning the structure of a BN from data is a foundational step of the model construction process. For this purpose, a multitude of algorithms have been developed over the years; these methods are typically categorized into three groups: <italic>constraint-based</italic>, <italic>score-based</italic>, and <italic>hybrid</italic>.</p>
<p>
<italic>Constraint-based</italic> algorithms rely on the theory of causal graphical models introduced by Pearl (<xref ref-type="bibr" rid="B36">Verma and Pearl, 1990</xref>). A well-known example of this class is the PC-Stable (named after its authors Peter and Clark) algorithm (<xref ref-type="bibr" rid="B5">Colombo and Maathuis, 2014</xref>), which improves the original PC algorithm (<xref ref-type="bibr" rid="B35">Spirtes et al., 2000</xref>) by making it more robust to variable ordering. The algorithm starts with a complete undirected graph and recursively removes edges using a conditional independence (CI) test. <italic>Score-based</italic> algorithms define a scoring function, such as BIC (Bayesian information criterion) (<xref ref-type="bibr" rid="B22">Neath and Cavanaugh, 2012</xref>), AIC (Akaike information criterion) (<xref ref-type="bibr" rid="B4">Cavanaugh and Neath, 2019</xref>), to evaluate how well a given network fits the data. A search algorithm, such as greedy search or simulated annealing, is then used to explore the space of possible graphs. <italic>Hybrid</italic> algorithms combine constraint-based and score-based approaches. Typically, a constraint-based method is used to reduce the search space, followed by a score-based optimization over the reduced space.</p>
<p>These algorithms generally assume that the input is <italic>tabular data</italic>, where each row represents an independent observation (i.i.d.), and each column corresponds to a variable. <italic>Constraint-based</italic> methods require data that are suitable for conditional independence (CI) testing, which typically includes discrete or continuous variables depending on the CI test used (e.g., chi-square for discrete, partial correlation for continuous). <italic>Score-based</italic> methods, on the other hand, rely on likelihood-based scoring functions and can handle discrete, continuous, or mixed data types depending on the scoring function and underlying assumptions. Hybrid methods inherit the data requirements of both approaches.</p>
<p>To speed up or improve structure learning, prior knowledge can be incorporated to constrain or guide the search for the network structure. Users may specify relationships that are known to exist, permitted, or prohibited, thereby reducing the search space and enhancing both the accuracy and efficiency of learning algorithms.</p>
<p>An overview of structure learning approaches is beyond the scope of this document; a comprehensive assessment of state-of-the-art methodologies can be found in (<xref ref-type="bibr" rid="B24">Nogueira et al., 2022</xref>; <xref ref-type="bibr" rid="B17">Kitson et al., 2023</xref>; <xref ref-type="bibr" rid="B8">Glymour et al., 2019</xref>; <xref ref-type="bibr" rid="B28">Scanagatta et al., 2019</xref>). Moreover, readers interested in the performance of the different classes of algorithms can refer to dedicated publications that offer comprehensive evaluations of the accuracy and computational efficiency of structure learning methods (<xref ref-type="bibr" rid="B33">Scutari et al., 2019</xref>).</p>
<p>Parameter learning is another critical task in BNs development. Given the DAG, the objective of parameter learning is to estimate the parameters of the conditional probability distributions associated with each node, which is essential for inference and prediction. For a comprehensive review of parameter learning strategies, challenges, and algorithms, refer to the works of (<xref ref-type="bibr" rid="B12">Ji et al., 2015</xref>; <xref ref-type="bibr" rid="B9">Heckerman, 1998</xref>).</p>
<p>Approaching the study of BN framework requires a solid understanding of fundamental principles in disciplines such as probability and computer science. Assuming that the reader is already familiar with these foundations, some convenient readings on causality and BNs science are offered by Probabilistic Graphical Models Principles and Techniques (<xref ref-type="bibr" rid="B19">Koller and Friedman, 2009</xref>), Bayesian Artificial Intelligence (<xref ref-type="bibr" rid="B20">Korb and Nicholson, 2010</xref>), Probabilistic Reasoning in Intelligent Systems (<xref ref-type="bibr" rid="B25">Pearl, 2014</xref>), Bayesian Networks with Examples in R (<xref ref-type="bibr" rid="B31">Scutari and Denis, 2021</xref>), Bayesian Networks in R with Application in the field of System Biology (<xref ref-type="bibr" rid="B32">Scutari and Lebre, 2013</xref>), Bayesian Networks and Influence Diagrams (<xref ref-type="bibr" rid="B18">Kjaerulff and Madsen, 2008</xref>). This document assumes that the reader is equipped with the necessary foundational knowledge and is ready to engage in practical hands-on work.</p>
<p>Over the past 5&#xa0;years, the field of causality and BNs development has seen an influx of numerous packages with no single solution being able to cater to all requirements and scenarios; this abundance of options is often challenging for individuals trying to gain hands-on experience with BNs. This document simplifies structure and parameter learning in BNs by providing a comprehensive overview of available software packages with a focus on causal discovery. In addition, we offer our subjective recommendations on selecting the best tools based on the reader&#x2019;s specific objectives. The remainder of this paper is structured as follows: <xref ref-type="sec" rid="s2">Section 2</xref> provides a systematic review of both open-source and commercial software. <xref ref-type="sec" rid="s3">Section 3</xref> offers guidance on selecting tools suitable for beginners. <xref ref-type="sec" rid="s4">Section 4</xref> summarizes the key contributions of this work. A concise summary of all reviewed tools is provided in <xref ref-type="sec" rid="s11">Supplementary Table S1</xref> (<xref ref-type="sec" rid="s11">Supplementary Material</xref>).</p>
</sec>
<sec id="s2">
<title>2 Software tools and packages</title>
<sec id="s2-1">
<title>2.1 gCastle</title>
<p>gCastle (<xref ref-type="bibr" rid="B38">Zhang et al., 2021</xref>) is an end-to-end Python toolbox created by Huawei Noah&#x2019;s Ark Lab for causal structure learning. The package is equipped with functionalities such as data generation from simulated or real-world datasets, causal structure learning, and evaluation metrics.</p>
</sec>
<sec id="s2-2">
<title>2.2 bnlearn</title>
<p>bnlearn (<xref ref-type="bibr" rid="B30">Scutari, 2010</xref>) is an R package developed by Marco Scutari and first released in 2007 with functionality to learn the structure of BNs, parameter estimation, and inference. After 10 years of continuous development, the package has grown to accommodate a multitude of algorithms from the literature. The package implements constraint-based algorithms, e.g., Peter-Clark (PC), Grow-Shrink (GS), Incremental Association Markov Blanket (IAMB), Inter-IAMB, Fast-IAMB, IAM-False Discovery Rate (FDR), Semi-Interleaved HITON-PC, and Max-Min Parents and Children (MMPC), pairwise-based algorithms, e.g., Algorithm for the Reconstruction of Accurate Cellular Networks (ARACNe) and Chow-Liu (ARACNE and Chow-Liu), score-based, e.g., Hill-Climbing (HC) and Tabu Search, hybrid algorithms, e.g., Hybrid Parents and Children (HPC), Max-Min HC (MMHC), Restricted Structural Maximum Algorithm 2 (RSMAX2), and Tree-augmented Naive Bayes (TAN), structure learning algorithms for discrete, Gaussian and conditional Gaussian networks, along with many score functions and conditional independence tests. Some utility functions (model comparison and manipulation, random data generation, arc orientation testing, simple and advanced plots) are included, as well as support for parameter estimation, e.g., maximum likelihood estimation (MLE) and Bayesian estimation, and inference, conditional probability queries, cross-validation, bootstrap, and model averaging.</p>
</sec>
<sec id="s2-3">
<title>2.3 pgmpy</title>
<p>Pgmpy (<xref ref-type="bibr" rid="B1">Ankan and Panda, 2015</xref>) is a Python library developed in 2015 by Ankur Ankan to work with probabilistic graphical models. It allows users to create their graphical models and then perform inferences or map queries to them. The library implements several inference algorithms like variable elimination, belief propagation, etc. The library is designed with a modular structure, allowing users to access dedicated classes for commonly used graphical models like Naive Bayes (NB) and hidden Markov models, eliminating the need to build them from base models. Currently, it includes implementations of various algorithms for structure learning, parameter estimation, both approximate, i.e., sampling-based, and exact inference, as well as causal inference.</p>
</sec>
<sec id="s2-4">
<title>2.4 Tetrad</title>
<p>Tetrad (<xref ref-type="bibr" rid="B27">Ramsey et al., 2018</xref>) is a Java suite of software for the discovery, estimation, and simulation of causal models developed by the Carnegie Mellon University-Causal Learning and Reasoning (CMU-CLeaR) group. Some of its basic features for beginners include the ability to load existing datasets, load existing causal graphs, and create a new causal graph. For practitioners, the tool is equipped with advanced functionalities, such as specifying prior knowledge on constraint-based algorithms, manipulating data by imputing missing values, discretizing data, simulating data from statistical models, and computing the probability distribution of any variable, among others. It features a graphical user interface (GUI) and offers popular constraint-based algorithms for causal discovery such as PC, Fast Causal Inference (FCI), PC-Max, Conservative PC (CPC), and MLE for parameter learning.</p>
</sec>
<sec id="s2-5">
<title>2.5 Causal command (CMD)</title>
<p>Causal-cmd<xref ref-type="fn" rid="fn2">
<sup>1</sup>
</xref> is a Java application that offers a command-line interface tool for causal discovery algorithms developed by the Center for Causal Discovery. Currently, the application includes more than 30 algorithms for causal discovery.</p>
</sec>
<sec id="s2-6">
<title>2.6 Causal-learn</title>
<p>Causal-learn (<xref ref-type="bibr" rid="B39">Zheng et al., 2024</xref>) is a Python translation and extension of the Tetrad Java code (refer to the Tetrad package) developed by CMU-CLeaR group. It offers implementations of up-to-date causal discovery methods, as well as simple and intuitive Application Programming Interfaces (APIs).</p>
</sec>
<sec id="s2-7">
<title>2.7 pcalg</title>
<p>Pcalg (<xref ref-type="bibr" rid="B15">Kalisch et al., 2012</xref>) is an R package developed by Markus Kalisch et al. in 2006. It offers constraint-based algorithms such as PC, FCI, and Really FCI (RFCI) as well as hybrid and score-based algorithms for causal discovery.</p>
</sec>
<sec id="s2-8">
<title>2.8 LiNGAM</title>
<p>Linear Non-Gaussian Acyclic Model (LiNGAM) (<xref ref-type="bibr" rid="B34">Shimizu et al., 2006</xref>) is a Python package for causal discovery developed by T. Ikeuchi et al. The package offers many causal discovery algorithms for linear non-Gaussian models such as Direct-LiNGAM, Linear Non-Gaussian Models for Latent Factors (LiNA), and Vector Autoregressive Models-LiNGAM (VAR-LiNGAM).</p>
</sec>
<sec id="s2-9">
<title>2.9 CDT</title>
<p>CDT (<xref ref-type="bibr" rid="B14">Kalainathan et al., 2020</xref>) is a Python package for causal inference in graphical models and pairwise settings (compatible with Python <inline-formula id="inf30">
<mml:math id="m31">
<mml:mrow>
<mml:mo>&#x2265;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> 3.5). Developed by Diviyan Kalainathan and Olivier Goudet, CDT provides tools for structure learning and dependency analysis. It leverages on NumPy, scikit-learn, PyTorch, and R to implement various algorithms for causal discovery, including methods from bnlearn and pcalg. The package is particularly suited for analyzing observational data, offering both classical and deep learning-based approaches to causal structure recovery.</p>
</sec>
<sec id="s2-10">
<title>2.10 pyAgrum</title>
<p>pyAgrum (<xref ref-type="bibr" rid="B6">Ducamp et al., 2020</xref>) is a Python wrapper for the C&#x2b;&#x2b; aGrUM library. It offers a high-level interface to aGrUM, enabling users to create, model, learn, apply, compute, and integrate BNs and other graphical models. Some specific (Python and C&#x2b;&#x2b;) codes are added to simplify and extend the aGrUM API. The package contains causal discovery, parameter learning, and inference algorithms.</p>
</sec>
<sec id="s2-11">
<title>2.11 bnlearn (python)</title>
<p>Bnlearn<xref ref-type="fn" rid="fn3">
<sup>2</sup>
</xref> is a Python package for causal discovery, parameter learning and inference developed by Erdogan Taskesen. It implements the most classical approaches for causal discovery such as HC, exhaustive search, Chow-Liu, TAN, PC, and MLE, as well as Bayesian estimation for parameter learning.</p>
</sec>
<sec id="s2-12">
<title>2.12 OpenMarkov</title>
<p>OpenMarkov (<xref ref-type="bibr" rid="B2">Arias et al., 2019</xref>) is a Java open-source software tool developed by the Research Centre for Intelligent Decision-Support Systems. OpenMarkov comes with a user interface and can perform causal discovery employing the PC algorithm and HC search.</p>
</sec>
<sec id="s2-13">
<title>2.13 pomegranate</title>
<p>Pomegranate (<xref ref-type="bibr" rid="B29">Schreiber, 2018</xref>), a Python package developed by Jacob Schreiber, offers efficient and versatile probabilistic models, spanning from individual probability distributions to composite models including BNs and hidden Markov models. The package offers both constraint-based and score-based algorithms, as well as parameter learning procedures.</p>
</sec>
<sec id="s2-14">
<title>2.14 BayesFusion</title>
<p>BayesFusion<xref ref-type="fn" rid="fn4">
<sup>3</sup>
</xref> is a commercial software offering different solutions for causal discovery, parameter learning, and inference. Their flagship product is GeNIe, a tool for artificial intelligence and machine learning that has at its core the BN framework and other types of graphical probabilistic models. The SMILE engine allows the user to include custom applications that can be written in a variety of programming languages, e.g., C&#x2b;&#x2b;, Python, Java, .NET, R, Matlab. Models created with GeNIe or SMILE can be shared or used on mobile devices via BayesMobile, or through a web browser with BayesBox.</p>
</sec>
<sec id="s2-15">
<title>2.15 BayesiaLab</title>
<p>BayesiaLab<xref ref-type="fn" rid="fn5">
<sup>4</sup>
</xref> is a commercial software developed by Dr. Lionel Jouffe and Dr. Paul Munteanu and their team. It offers plenty of algorithms for causal discovery, parameter learning, and inference. The software includes a graphical user interface and is well documented.</p>
</sec>
<sec id="s2-16">
<title>2.16 Bayes Server</title>
<p>Bayes Server<xref ref-type="fn" rid="fn6">
<sup>5</sup>
</xref> is a commercial software developed by Bayes Server Ltd. Besides the most well-known algorithms for causal discovery, parameter learning and inference, the software offers a wide range of tools for diagnostic, anomaly detection and decision-making under uncertainty which have at their core the BN framework. Bayes Server can be used in the cloud as well as on a local machine through a GUI. It offers an advanced user interface accessible programmatically via a number of APIs that can be used via Java, Matlab, Python, Spark and R.</p>
</sec>
</sec>
<sec id="s3">
<title>3 My causal path: picking the right tool as a beginner</title>
<p>This section aims to assist beginners select the ideal package or software that best suits their needs. The first subsection focuses on causal discovery tools, while the second presents tools that support functionalities for both parameter learning and structure learning for the Bayesian network framework. Finally, the last subsection discusses commercial software that offers additional features such as optimized user-interfaces and professional customer support. Note that while the previous section provided a comprehensive overview of available solutions, this section shortlists and discusses only those we consider most suitable for beginners. It is important to note that while all the tools discussed in this section aim to uncover structure among variables, they differ in their underlying modeling assumptions and output types. Some tools (e.g., bnlearn, pgmpy, pyAgrum) are focused on Bayesian networks and provide probabilistic modeling capabilities, including structure and parameter learning as well as inference. Others (e.g., LiNGAM, CDT, causal-learn) are specialized for causal discovery and do not build a full probabilistic graphical model. Instead, these methods aim to recover a causal DAG under specific assumptions (e.g., linearity, non-Gaussianity, no hidden confounding). While the outputs may look similar (DAGs), their interpretation and use cases are different. We highlight these distinctions throughout the section to help readers select the tool that best fits their goals.</p>
<sec id="s3-1">
<title>3.1 Tools for causal discovery (structure only, No probabilistic modeling)</title>
<p>When the goal is to discover the underlying structure among variables typically interpreted causally under certain assumptions without the need for full probabilistic modeling or inference, gCastle, CDT, and LiNGAM are three tools that represent viable solutions and provide easy access to those functionalities. In particular, gCastle by Huawei Noah&#x2019;s Ark Lab is in our opinion one of the most accessible and comprehensive causal discovery open-source Python libraries at the time of writing this document. It offers various cutting-edge approaches for recovering the structure of causal networks ranging from score-based to gradient-based and hybrid algorithms. For each algorithm, the documentation offers a detailed practical example, making the tool very friendly to beginners. Various examples can also be found in Causal Inference and Discovery in Python (Part 3: Causal Discovery) (<xref ref-type="bibr" rid="B21">Molak, 2023</xref>), which offers the user the ability to dive deeper into any particular functionality offered by the tool. Moreover, gCastle can also be used via a GUI, which provides a friendlier version of the interface that does not involve coding. CDT is another great package that we feel confident in recommending. Its documentation contains several examples that will guide users step-by-step into their first structural learning attempts. CDT has the largest collection of algorithms for causal discovery among all the other reviewed tools for beginners, some of which can be run using Pytorch as well.</p>
<p>For time series data, the Longitudinal LiNGAM model (<xref ref-type="bibr" rid="B13">Kadowaki et al., 2013</xref>) extends the original LiNGAM framework (<xref ref-type="bibr" rid="B34">Shimizu et al., 2006</xref>) to account for temporal dynamics. It assumes that each variable is a linear function of its own past values and the past values of other variables, across a fixed number of time lags. The model assumes that the noise terms are continuous, non-Gaussian, and independent over time. These non-Gaussianity and independence assumptions are essential for identifying the direction of causal relationships from observational data, which would otherwise be unidentifiable under Gaussian noise.</p>
<p>The LiNGAM Python package includes implementations for various LiNGAM-based models, including the VAR-LiNGAM (vector autoregressive) model for time series. It offers theoretical background and practical examples for each model, making it a useful tool for both research and applied causal analysis.</p>
<p>When the goal is performing causal discovery on big data, Causal-Command represents a valid option. This Java library implements several algorithms for causal discovery and can be used via a shell script or as part of a Java-based application. We perceive this library to be less user-friendly compared to the ones mentioned above; thus, we deem Causal-Command a good fit for more intermediate or advanced users.</p>
<p>To conclude our assessment of tools specialized in causal structural learning, we consider CDT to be the best choice when having a large set of available methodologies is desirable. For example, CDT could be the most useful for training or educational purposes, where assessing and comparing the effectiveness of various methods is needed. CDT is also the best choice when an interface with Pytorch is required or preferred. While CDT offers a wide range of causal discovery algorithms, gCastle stands out for its user-friendly, code-free interface and well-curated documentation, making it especially accessible to non-programmers. Although both CDT and gCastle support linear non-Gaussian models, LiNGAM remains the most suitable tool when working specifically with this model type, as it is built for such scenarios.</p>
</sec>
<sec id="s3-2">
<title>3.2 Tools for Bayesian Networks (structure and parameter learning)</title>
<p>In many cases, one may wish to learn both the structure and the parameters of a probabilistic model using the Bayesian network framework. To this end, several tools extensively cover both functional areas while offering great simplicity of use. One of the most complete and well-maintained tools to date is bnlearn. Apart from the remarkable availability of built-in methods for parameter learning, structural learning, inference, missing data handling, and model validation strategies, what makes bnlearn stand out is its documentation and practical examples. Remarkably, most methods and examples are thoroughly explained in the books Bayesian Networks in R and Bayesian Networks With Examples in R (<xref ref-type="bibr" rid="B31">Scutari and Denis, 2021</xref>), of which the creator of bnlearn is co-author.</p>
<p>A valid alternative to bnlearn is represented by pgmpy. Unlike bnlearn, which provides methods for the static scenario only, pgmpy partially covers the dynamic case as well. This is an important feature, given that a great part of real-world problems and systems include time-dependent components. On the other hand, the range of algorithms available in pgmpy is more limited than in bnlearn, particularly for structure learning tasks. Nonetheless, pgmpy compensates for this limitation by offering more comprehensive documentation. Abundant examples are available in the practical notebooks section, along with tutorial notebooks, both of which are beneficial for taking the first steps into this field.</p>
<p>Another alternative to bnlearn is pyAgrum. Just like pgmpy, pyAgrum provides methods for static and dynamic scenarios, making it a valid option for time-dependent real-world problems. pyAgrum offers comprehensive documentation including tutorials, examples and applications with interactive widgets. An important resource offered by pyAgrum is a list of implemented solutions to the problems presented in the &#x2018;Book of Why&#x2019; by Judea Pearl. PyAgrum not only provides rich and well-organized documentation, but also offers a wide array of structure learning methodologies. For example, it implements greedy hill climbing (GHC), local search with tabu-list (LS-TL), Multivariate Information-based Inductive Causation (MIIC), Chow-Liu, NB, TAN, and K2 algorithms.</p>
<p>A less sophisticated yet relevant package is the Python version of the original bnlearn (which is an R package). Although it is not as rich in methodologies as Pgmpy and the original bnlearn (only a handful of causal discovery algorithms are available in it), the Python version of bnlearn offers an intuitive interface and its documentation is as rich and well-curated as the original R version. The documentation not only presents many code snippets followed by the associated output but also provides a brief introduction to the theory behind it.</p>
<p>In conclusion, for those who are familiar with R, bnlearn represents the best choice, especially when coupled with the aforementioned books. For practitioners who prefer Python and/or need to model dynamic systems, pgmpy and pyAgrum are the best alternatives to bnlearn; the multitude of examples contained in pgmpy and pyAgrum documentation provides tremendous added value for beginners and/or practitioners moving their first steps in this field. The Python version of bnlearn offers a more straightforward interface than the other options; however, it does come with a limited number of structure learning algorithms, making it suitable for readers seeking to begin with simpler implementations.</p>
</sec>
<sec id="s3-3">
<title>3.3 Commercial software</title>
<p>For a wider and more flexible application of BNs frameworks in industry settings where cloud computing might be involved, the resulting models often need to be shared and accessed from a variety of devices, including mobile devices, where no-code solutions may be preferable. In addition, in these kind of scenarios, professional support is usually needed, making the open-source packages described in the previous sections unsuitable. In this section, we illustrate some practical commercial solutions that might satisfy the needs of larger industry organizations.</p>
<p>For this purpose, Bayes Server would be our recommended choice. A demo is available on their official website. The platform provides comprehensive documentation, including examples demonstrating how to interact with the graphical user interface. The documentation also features a code section that serves as a central repository of practical examples for working with the Bayes Server API. Additionally, the site showcases numerous real-world use cases across various domains, including aerospace and healthcare. Bayes Server is available under both commercial and academic licenses.</p>
<p>GeNIe by BayesFusion LLC is a valid alternative to Bayes Server. GeNIe makes use of the SMILE engine, a library of C&#x2b;&#x2b; classes that implement causal and parameter learning, as well as inference, which can be called via API. SMILE can be used via Java, Python, R, and. NET using the following wrappers: jSMILE (Java and environments that can instantiate and use the JVM), PySMILE (Python 2.7 and 3. x), rSMILE (R 3. x), <ext-link ext-link-type="uri" xlink:href="http://SMILE.NET">SMILE.NET</ext-link> (.NET). Another component of GeNIe is BayesBox, an interactive repository where graphical models can be uploaded, shared, and consulted from a variety of devices, including mobiles.</p>
<p>A demo of BayesBox is available on the BayesFusion website. BayesFusion also provides detailed documentation, which includes information about GeNIe and its main features, as well as examples and introductory materials for SMILE. The support forum is also well-populated and can be a valuable resource for users.</p>
<p>A viable alternative to BayesServer and GeNIe is BayesiaLab. BayesiaLab has a commercial license and offers an intuitive GUI, APIs, and many useful resources, such as an ebook that includes several tutorials. Webinars, tutorials, and use cases that will help users navigate the multitude of features offered by BayesiaLab are also available. It is worthwhile to mention that the BayesiaLab API framework can be accessed using Java only.</p>
<p>In conclusion, both BayesServer and GeNIe can suit the aforementioned contexts. They are both equipped with a web platform that features a user-friendly interface and ready-to-use examples, and both software can be used on mobile devices. For BayesServer and GeNIe, pricing and licensing models can be the deciding factors in determining which tool best suits the reader&#x2019;s needs after having tried their trial and demo versions. This might not apply to BayesiaLab, as users cannot try the software on the website before purchasing it. Additionally, BayesiaLab can only be used with Java.</p>
</sec>
</sec>
<sec sec-type="conclusion" id="s4">
<title>4 Conclusion</title>
<p>This paper provides an overview of recent tools and software packages for Bayesian network structure and parameter learning, as well as methods specifically developed for causal discovery. The tools were reviewed from the perspective of a beginner seeking to gain hands-on experience in the field, and subjective recommendations were given about which tools are deemed more suitable. At the same time, it is important to acknowledge that the current landscape of BN tools remains fragmented. This fragmentation is largely due to the diverse range of assumptions, data types (e.g., discrete, continuous, mixed), and application domains (e.g., bioinformatics, social sciences, engineering) that BN modeling encompasses. As a result, many packages have been developed to cater to specific niches, leading to limited interoperability and a lack of standardization. Despite this, we believe the field is approaching a turning point. As methodologies that go beyond prediction are needed in real-world applications, there will be increasing pressure to integrate the software presented in this paper into more unified and user-friendly frameworks. Just as libraries like scikit-learn (<xref ref-type="bibr" rid="B26">Pedregosa et al., 2011</xref>) helped consolidate various machine learning algorithms into a common interface, we foresee the potential emergence of standardized libraries for BN modeling that balance flexibility with usability. Such developments would not only streamline experimentation and benchmarking but also lower the barrier of entry for practitioners and researchers across disciplines. Given the rapid evolution of this research field, updated versions of this document might be released periodically. The authors emphasize that all software contributions to this research field are instrumental in scientific advancement and complement each other in a beneficial way.</p>
</sec>
</body>
<back>
<sec sec-type="author-contributions" id="s5">
<title>Author contributions</title>
<p>FC: Conceptualization, Investigation, Resources, Supervision, Writing &#x2013; original draft, Writing &#x2013; review and editing. JG: Conceptualization, Investigation, Supervision, Writing &#x2013; original draft, Writing &#x2013; review and editing. NA: Conceptualization, Writing &#x2013; original draft, Writing &#x2013; review and editing. FS: Conceptualization, Writing &#x2013; original draft, Writing &#x2013; review and editing. EA: Conceptualization, Writing &#x2013; original draft, Writing &#x2013; review and editing.</p>
</sec>
<sec sec-type="funding-information" id="s6">
<title>Funding</title>
<p>The author(s) declare that financial support was received for the research and/or publication of this article. This research was supported by Minutia. AI Pte. Ltd. (Singapore). The funder was not involved in the study design, collection, analysis, interpretation of data, the writing of this article, or the decision to submit it for publication. Additional support was provided through a doctoral scholarship co-funded by Minutia. AI and Italy&#x2019;s National Recovery and Resilience Plan (PNRR). Additional institutional support was provided by the University of Milan&#x2013;Bicocca (Italy).</p>
</sec>
<sec sec-type="COI-statement" id="s7">
<title>Conflict of interest</title>
<p>Authors FC, JG and NA were employed by Minutia.AI Pte. Ltd. EA has equity and is an advisor to Minutia.AI Pte. Ltd.</p>
<p>The remaining author declare that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p>
</sec>
<sec id="s8">
<title>Correction note</title>
<p>A correction has been made to this article. Details can be found at: <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.3389/fsysb.2025.1717030">10.3389/fsysb.2025.1717030</ext-link>.</p>
</sec>
<sec sec-type="ai-statement" id="s9">
<title>Generative AI statement</title>
<p>The author(s) declare that no Generative AI was used in the creation of this manuscript.</p>
<p>Any alternative text (alt text) provided alongside figures in this article has been generated by Frontiers with the support of artificial intelligence and reasonable efforts have been made to ensure accuracy, including review by the authors wherever possible. If you identify any issues, please contact us.</p>
</sec>
<sec sec-type="disclaimer" id="s10">
<title>Publisher&#x2019;s note</title>
<p>All claims expressed in this article are solely those of the authors and do not necessarily represent those of their affiliated organizations, or those of the publisher, the editors and the reviewers. Any product that may be evaluated in this article, or claim that may be made by its manufacturer, is not guaranteed or endorsed by the publisher.</p>
</sec>
<sec sec-type="supplementary-material" id="s11">
<title>Supplementary material</title>
<p>The Supplementary Material for this article can be found online at: <ext-link ext-link-type="uri" xlink:href="https://www.frontiersin.org/articles/10.3389/fsysb.2025.1631901/full#supplementary-material">https://www.frontiersin.org/articles/10.3389/fsysb.2025.1631901/full&#x23;supplementary-material</ext-link>
</p>
<supplementary-material xlink:href="DataSheet1.pdf" id="SM1" mimetype="application/pdf" xmlns:xlink="http://www.w3.org/1999/xlink"/>
</sec>
<fn-group>
<fn id="fn2">
<label>1</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://bd2kccd.github.io/docs/causal-cmd/">https://bd2kccd.github.io/docs/causal-cmd/</ext-link>
</p>
</fn>
<fn id="fn3">
<label>2</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://erdogant.github.io/bnlearn/pages/html/index.html">https://erdogant.github.io/bnlearn/pages/html/index.html</ext-link>
</p>
</fn>
<fn id="fn4">
<label>3</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://www.bayesfusion.com/">https://www.bayesfusion.com/</ext-link>
</p>
</fn>
<fn id="fn5">
<label>4</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://www.bayesia.com/bayesia/bayesialab/bayesialab">https://www.bayesia.com/bayesia/bayesialab/bayesialab</ext-link>
</p>
</fn>
<fn id="fn6">
<label>5</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://www.bayesserver.com/">https://www.bayesserver.com/</ext-link>
</p>
</fn>
</fn-group>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Ankan</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Panda</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2015</year>). <article-title>pgmpy: probabilistic graphical models using python</article-title>. <source>SciPy</source>, <fpage>6</fpage>&#x2013;<lpage>11</lpage>. <pub-id pub-id-type="doi">10.25080/majora-7b98e3ed-001</pub-id>
</citation>
</ref>
<ref id="B2">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Arias</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>P&#xe9;rez-Mart&#xed;n</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Luque</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>D&#xed;ez</surname>
<given-names>F. J.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>Openmarkov, an open-source tool for probabilistic graphical models</article-title>. <source>IJCAI</source>, <fpage>6485</fpage>&#x2013;<lpage>6487</lpage>. <pub-id pub-id-type="doi">10.24963/ijcai.2019/931</pub-id>
</citation>
</ref>
<ref id="B3">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Arora</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Boyne</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Slater</surname>
<given-names>J. J.</given-names>
</name>
<name>
<surname>Gupta</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Brenner</surname>
<given-names>D. R.</given-names>
</name>
<name>
<surname>Druzdzel</surname>
<given-names>M. J.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>Bayesian networks for risk prediction using real-world data: a tool for precision medicine</article-title>. <source>Value Health</source> <volume>22</volume>, <fpage>439</fpage>&#x2013;<lpage>445</lpage>. <pub-id pub-id-type="doi">10.1016/j.jval.2019.01.006</pub-id>
<pub-id pub-id-type="pmid">30975395</pub-id>
</citation>
</ref>
<ref id="B4">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Cavanaugh</surname>
<given-names>J. E.</given-names>
</name>
<name>
<surname>Neath</surname>
<given-names>A. A.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>The akaike information criterion: background, derivation, properties, application, interpretation, and refinements</article-title>. <source>Wiley Interdiscip. Rev. Comput. Stat.</source> <volume>11</volume>, <fpage>e1460</fpage>. <pub-id pub-id-type="doi">10.1002/wics.1460</pub-id>
</citation>
</ref>
<ref id="B5">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Colombo</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Maathuis</surname>
<given-names>M. H.</given-names>
</name>
</person-group> (<year>2014</year>). <article-title>Order-independent constraint-based causal structure learning</article-title>. <source>J. Mach. Learn. Res.</source> <volume>15</volume>, <fpage>3741</fpage>&#x2013;<lpage>3782</lpage>.</citation>
</ref>
<ref id="B6">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Ducamp</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Gonzales</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Wuillemin</surname>
<given-names>P.-H.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>Agrum/pyagrum: a toolbox to build models and algorithms for probabilistic graphical models in python</article-title>,&#x201d; in <conf-name>International Conference on Probabilistic Graphical Models (PMLR)</conf-name>.</citation>
</ref>
<ref id="B7">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Geiger</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Heckerman</surname>
<given-names>D.</given-names>
</name>
</person-group> (<year>1994</year>). &#x201c;<article-title>Learning gaussian networks</article-title>,&#x201d; in <source>Uncertainty in artificial intelligence</source> (<publisher-name>Elsevier</publisher-name>), <fpage>235</fpage>&#x2013;<lpage>243</lpage>.</citation>
</ref>
<ref id="B8">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Glymour</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Zhang</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Spirtes</surname>
<given-names>P.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>Review of causal discovery methods based on graphical models</article-title>. <source>Front. Genet.</source> <volume>10</volume>, <fpage>524</fpage>. <pub-id pub-id-type="doi">10.3389/fgene.2019.00524</pub-id>
<pub-id pub-id-type="pmid">31214249</pub-id>
</citation>
</ref>
<ref id="B9">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Heckerman</surname>
<given-names>D.</given-names>
</name>
</person-group> (<year>1998</year>). <article-title>A tutorial on learning with bayesian networks</article-title>. <source>Learn. Graph. models</source>, <fpage>301</fpage>&#x2013;<lpage>354</lpage>. <pub-id pub-id-type="doi">10.1007/978-94-011-5014-9_11</pub-id>
</citation>
</ref>
<ref id="B10">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Heckerman</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Geiger</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Chickering</surname>
<given-names>D. M.</given-names>
</name>
</person-group> (<year>1995</year>). <article-title>Learning bayesian networks: the combination of knowledge and statistical data</article-title>. <source>Mach. Learn.</source> <volume>20</volume>, <fpage>197</fpage>&#x2013;<lpage>243</lpage>. <pub-id pub-id-type="doi">10.1023/a:1022623210503</pub-id>
</citation>
</ref>
<ref id="B11">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Jensen</surname>
<given-names>F. V.</given-names>
</name>
<name>
<surname>Nielsen</surname>
<given-names>T. D.</given-names>
</name>
</person-group> (<year>2007</year>). <source>Bayesian networks and decision graphs</source>, <volume>2</volume>. <publisher-name>Springer</publisher-name>.</citation>
</ref>
<ref id="B12">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Ji</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Xia</surname>
<given-names>Q.</given-names>
</name>
<name>
<surname>Meng</surname>
<given-names>G.</given-names>
</name>
</person-group> (<year>2015</year>). &#x201c;<article-title>A review of parameter learning methods in bayesian network</article-title>,&#x201d; in <conf-name>Advanced Intelligent Computing Theories and Applications: 11th International Conference, ICIC 2015</conf-name>, <conf-loc>Fuzhou, China</conf-loc>, <conf-date>August 20-23, 2015</conf-date> (<publisher-name>Springer</publisher-name>), <fpage>3</fpage>&#x2013;<lpage>12</lpage>.</citation>
</ref>
<ref id="B13">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Kadowaki</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Shimizu</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Washio</surname>
<given-names>T.</given-names>
</name>
</person-group> (<year>2013</year>). &#x201c;<article-title>Estimation of causal structures in longitudinal data using non-gaussianity</article-title>,&#x201d; in <conf-name>2013 IEEE International Workshop on Machine Learning for Signal Processing (MLSP)</conf-name>, <conf-loc>Southampton, UK</conf-loc>, <conf-date>22-25 September 2013</conf-date> (<publisher-name>IEEE</publisher-name>), <fpage>1</fpage>&#x2013;<lpage>6</lpage>.</citation>
</ref>
<ref id="B14">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Kalainathan</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Goudet</surname>
<given-names>O.</given-names>
</name>
<name>
<surname>Dutta</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>Causal discovery toolbox: uncovering causal relationships in python</article-title>. <source>J. Mach. Learn. Res.</source> <volume>21</volume>, <fpage>1</fpage>&#x2013;<lpage>5</lpage>.<pub-id pub-id-type="pmid">34305477</pub-id>
</citation>
</ref>
<ref id="B15">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Kalisch</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>M&#xe4;chler</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Colombo</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Maathuis</surname>
<given-names>M. H.</given-names>
</name>
<name>
<surname>B&#xfc;hlmann</surname>
<given-names>P.</given-names>
</name>
</person-group> (<year>2012</year>). <article-title>Causal inference using graphical models with the r package pcalg</article-title>. <source>J. Stat. Softw.</source> <volume>47</volume>, <fpage>1</fpage>&#x2013;<lpage>26</lpage>. <pub-id pub-id-type="doi">10.18637/jss.v047.i11</pub-id>
</citation>
</ref>
<ref id="B16">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Kammouh</surname>
<given-names>O.</given-names>
</name>
<name>
<surname>Gardoni</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Cimellaro</surname>
<given-names>G. P.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>Probabilistic framework to evaluate the resilience of engineering systems using bayesian and dynamic bayesian networks</article-title>. <source>Reliab. Eng. and Syst. Saf.</source> <volume>198</volume>, <fpage>106813</fpage>. <pub-id pub-id-type="doi">10.1016/j.ress.2020.106813</pub-id>
</citation>
</ref>
<ref id="B17">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Kitson</surname>
<given-names>N. K.</given-names>
</name>
<name>
<surname>Constantinou</surname>
<given-names>A. C.</given-names>
</name>
<name>
<surname>Guo</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Chobtham</surname>
<given-names>K.</given-names>
</name>
</person-group> (<year>2023</year>). <article-title>A survey of bayesian network structure learning</article-title>. <source>Artif. Intell. Rev.</source> <volume>56</volume>, <fpage>8721</fpage>&#x2013;<lpage>8814</lpage>. <pub-id pub-id-type="doi">10.1007/s10462-022-10351-w</pub-id>
</citation>
</ref>
<ref id="B18">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Kjaerulff</surname>
<given-names>U. B.</given-names>
</name>
<name>
<surname>Madsen</surname>
<given-names>A. L.</given-names>
</name>
</person-group> (<year>2008</year>). <source>Bayesian networks and influence diagrams</source>, <volume>200</volume>. <publisher-name>Springer Science&#x2b; Business Media</publisher-name>, <fpage>114</fpage>.</citation>
</ref>
<ref id="B19">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Koller</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Friedman</surname>
<given-names>N.</given-names>
</name>
</person-group> (<year>2009</year>). <source>Probabilistic graphical models: principles and techniques</source>. <publisher-name>MIT press</publisher-name>.</citation>
</ref>
<ref id="B20">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Korb</surname>
<given-names>K. B.</given-names>
</name>
<name>
<surname>Nicholson</surname>
<given-names>A. E.</given-names>
</name>
</person-group> (<year>2010</year>). <source>Bayesian artificial intelligence</source>. <publisher-loc>Boca Raton, FL:</publisher-loc> <publisher-name>CRC Press</publisher-name>.</citation>
</ref>
<ref id="B21">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Molak</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2023</year>). <source>Causal inference and discovery in python: unlock the secrets of modern causal machine learning with DoWhy, EconML, PyTorch and more</source>. <publisher-loc>Birmingham, England:</publisher-loc> <publisher-name>Packt Publishing Ltd</publisher-name>.</citation>
</ref>
<ref id="B22">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Neath</surname>
<given-names>A. A.</given-names>
</name>
<name>
<surname>Cavanaugh</surname>
<given-names>J. E.</given-names>
</name>
</person-group> (<year>2012</year>). <article-title>The bayesian information criterion: background, derivation, and applications</article-title>. <source>Wiley Interdiscip. Rev. Comput. Stat.</source> <volume>4</volume>, <fpage>199</fpage>&#x2013;<lpage>203</lpage>. <pub-id pub-id-type="doi">10.1002/wics.199</pub-id>
</citation>
</ref>
<ref id="B23">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Needham</surname>
<given-names>C. J.</given-names>
</name>
<name>
<surname>Bradford</surname>
<given-names>J. R.</given-names>
</name>
<name>
<surname>Bulpitt</surname>
<given-names>A. J.</given-names>
</name>
<name>
<surname>Westhead</surname>
<given-names>D. R.</given-names>
</name>
</person-group> (<year>2007</year>). <article-title>A primer on learning in bayesian networks for computational biology</article-title>. <source>PLoS Comput. Biol.</source> <volume>3</volume>, <fpage>e129</fpage>. <pub-id pub-id-type="doi">10.1371/journal.pcbi.0030129</pub-id>
<pub-id pub-id-type="pmid">17784779</pub-id>
</citation>
</ref>
<ref id="B24">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Nogueira</surname>
<given-names>A. R.</given-names>
</name>
<name>
<surname>Pugnana</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Ruggieri</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Pedreschi</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Gama</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>2022</year>). <article-title>Methods and tools for causal discovery and causal inference</article-title>. <source>Wiley Interdiscip. Rev. data Min. Knowl. Discov.</source> <volume>12</volume>, <fpage>e1449</fpage>. <pub-id pub-id-type="doi">10.1002/widm.1449</pub-id>
</citation>
</ref>
<ref id="B25">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Pearl</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>2014</year>). <source>Probabilistic reasoning in intelligent systems: networks of plausible inference</source>. <publisher-name>Elsevier</publisher-name>.</citation>
</ref>
<ref id="B26">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Pedregosa</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Varoquaux</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Gramfort</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Michel</surname>
<given-names>V.</given-names>
</name>
<name>
<surname>Thirion</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Grisel</surname>
<given-names>O.</given-names>
</name>
<etal/>
</person-group> (<year>2011</year>). <article-title>Scikit-learn: machine learning in python</article-title>. <source>J. Mach. Learn. Res.</source> <volume>12</volume>, <fpage>2825</fpage>&#x2013;<lpage>2830</lpage>.</citation>
</ref>
<ref id="B27">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Ramsey</surname>
<given-names>J. D.</given-names>
</name>
<name>
<surname>Zhang</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Glymour</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Romero</surname>
<given-names>R. S.</given-names>
</name>
<name>
<surname>Huang</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Ebert-Uphoff</surname>
<given-names>I.</given-names>
</name>
<etal/>
</person-group> (<year>2018</year>). &#x201c;<article-title>Tetrad&#x2014;a toolbox for causal discovery</article-title>.&#x201d; in <source>8th international workshop on climate informatics</source>, <fpage>1</fpage>&#x2013;<lpage>4</lpage>.</citation>
</ref>
<ref id="B28">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Scanagatta</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Salmer&#xf3;n</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Stella</surname>
<given-names>F.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>A survey on bayesian network structure learning from data</article-title>. <source>Prog. Artif. Intell.</source> <volume>8</volume>, <fpage>425</fpage>&#x2013;<lpage>439</lpage>. <pub-id pub-id-type="doi">10.1007/s13748-019-00194-y</pub-id>
</citation>
</ref>
<ref id="B29">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Schreiber</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>Pomegranate: fast and flexible probabilistic modeling in python</article-title>. <source>J. Mach. Learn. Res.</source> <volume>18</volume>, <fpage>1</fpage>&#x2013;<lpage>6</lpage>.</citation>
</ref>
<ref id="B30">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Scutari</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2010</year>). <article-title>Learning bayesian networks with the bnlearn r package</article-title>. <source>J. Stat. Softw.</source> <volume>35</volume>, <fpage>1</fpage>&#x2013;<lpage>22</lpage>. <pub-id pub-id-type="doi">10.18637/jss.v035.i03</pub-id>
<pub-id pub-id-type="pmid">21603108</pub-id>
</citation>
</ref>
<ref id="B31">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Scutari</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Denis</surname>
<given-names>J.-B.</given-names>
</name>
</person-group> (<year>2021</year>). <source>Bayesian networks: with examples in R</source>. <publisher-name>Chapman and Hall/CRC</publisher-name>.</citation>
</ref>
<ref id="B32">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Scutari</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Lebre</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2013</year>). <source>Bayesian networks in R: with applications in systems biology</source>. <publisher-loc>New York</publisher-loc>: <publisher-name>Springer Verlag New York Inc</publisher-name>.</citation>
</ref>
<ref id="B33">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Scutari</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Graafland</surname>
<given-names>C. E.</given-names>
</name>
<name>
<surname>Guti&#xe9;rrez</surname>
<given-names>J. M.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>Who learns better bayesian network structures: accuracy and speed of structure learning algorithms</article-title>. <source>Int. J. Approx. Reason.</source> <volume>115</volume>, <fpage>235</fpage>&#x2013;<lpage>253</lpage>. <pub-id pub-id-type="doi">10.1016/j.ijar.2019.10.003</pub-id>
</citation>
</ref>
<ref id="B34">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Shimizu</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Shimizu</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Hyv&#xe4;rinen</surname>
<given-names>H.</given-names>
</name>
</person-group> (<year>2006</year>). <article-title>A linear Non-gaussian acyclic model for causal discovery</article-title>. <source>J. Mach. Learn. Res.</source>
</citation>
</ref>
<ref id="B35">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Spirtes</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Glymour</surname>
<given-names>C. N.</given-names>
</name>
<name>
<surname>Scheines</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>2000</year>). <source>Causation, prediction, and search</source>. <publisher-name>MIT press</publisher-name>.</citation>
</ref>
<ref id="B36">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Verma</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Pearl</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>1990</year>). &#x201c;<article-title>Equivalence and synthesis of causal models</article-title>,&#x201d; in <conf-name>Proceedings of the Sixth Annual Conference on Uncertainty in Artificial Intelligence</conf-name>, <fpage>255</fpage>&#x2013;<lpage>270</lpage>.</citation>
</ref>
<ref id="B37">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Vonk</surname>
<given-names>M. C.</given-names>
</name>
<name>
<surname>Malekovic</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>B&#xe4;ck</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Kononova</surname>
<given-names>A. V.</given-names>
</name>
</person-group> (<year>2023</year>). <article-title>Disentangling causality: assumptions in causal discovery and inference</article-title>. <source>Artif. Intell. Rev.</source> <volume>56</volume>, <fpage>10613</fpage>&#x2013;<lpage>10649</lpage>. <pub-id pub-id-type="doi">10.1007/s10462-023-10411-9</pub-id>
</citation>
</ref>
<ref id="B38">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Zhang</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Zhu</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Kalander</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Ng</surname>
<given-names>I.</given-names>
</name>
<name>
<surname>Ye</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Chen</surname>
<given-names>Z.</given-names>
</name>
<etal/>
</person-group> (<year>2021</year>). <article-title>gcastle: a python toolbox for causal discovery</article-title>. <comment>arXiv preprint arXiv:2111</comment>.</citation>
</ref>
<ref id="B39">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Zheng</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Huang</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Chen</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Ramsey</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Gong</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Cai</surname>
<given-names>R.</given-names>
</name>
<etal/>
</person-group> (<year>2024</year>). <article-title>Causal-learn: causal discovery in python</article-title>. <source>J. Mach. Learn. Res.</source> <volume>25</volume>, <fpage>1</fpage>&#x2013;<lpage>8</lpage>.</citation>
</ref>
</ref-list>
</back>
</article>