跳转到主要内容

因果建模的Python代码。

项目描述

y0

Tests Cookiecutter template from @cthoyt PyPI PyPI - Python Version PyPI - License Documentation Status DOI Code style: black

y0(发音为“why not?”)是因果推理的Python代码。

💪 入门指南

表示概率表达式

y0有一个功能齐全的内部领域特定语言,用于表示概率表达式

from y0.dsl import P, A, B

# The probability of A given B
expr_1 = P(A | B)

# The probability of A given not B
expr_2 = P(A | ~B)

# The joint probability of A and B
expr_3 = P(A, B)

它也可以用于操作表达式

from y0.dsl import P, A, B, Sum

P(A, B).marginalize(A) == Sum[A](P(A, B))
P(A, B).conditional(A) == P(A, B) / Sum[A](P(A, B))

DSL对象可以用str()转换为字符串,并使用y0.parser.parse_y0()解析回对象。

DSL的完整演示可以在这个Jupyter Notebook中找到

表示因果关系

y0networkx 的基础上构建了一个关于非循环有向混合图的抽象,可用于建模因果关系。

from y0.graph import NxMixedGraph
from y0.dsl import X, Y, Z1, Z2

# Example from:
#   J. Pearl and D. Mackenzie (2018)
#   The Book of Why: The New Science of Cause and Effect.
#   Basic Books, p. 240.
napkin = NxMixedGraph.from_edges(
    directed=[
        (Z2, Z1),
        (Z1, X),
        (X, Y),
    ],
    undirected=[
        (Z2, X),
        (Z2, Y),
    ],
)

y0y0.examples 中包含了许多 Pearl、Shpitser、Bareinboim 等人编写的预编写示例。

进行微积分计算

y0 提供了许多在过去 15 年出版物中尚未实现算法的实际实现,包括:

算法 参考文献
标识符 Shpitser 和 Pearl,2006
标识符 Shpitser 和 Pearl,2008
标识符 Shpitser 和 Pearl,2012
标识符 Shpitser 和 Pearl,2012
替代结果 Tikka 和 Karvanen,2018

将算法应用于 ADMG 和因果查询以生成一个表示在 DSL 中的估计量

from y0.dsl import P, X, Y
from y0.examples import napkin
from y0.algorithm.identify import Identification, identify

# TODO after ID* and IDC* are done, we'll update this interface
query = Identification.from_expression(graph=napkin, query=P(Y @ X))
estimand = identify(query)
assert estimand == P(Y @ X)

🚀 安装

可以从 PyPI 安装最新版本

$ pip install y0

可以直接从 GitHub 安装最新代码和数据

$ pip install git+https://github.com/y0-causal-inference/y0.git

👐 贡献

贡献,无论是提交问题、提交拉取请求还是分叉,都是受欢迎的。有关参与更多信息,请参阅 CONTRIBUTING.md

👋 属性

⚖️ 许可证

本包中的代码根据 BSD-3-Clause 许可证 许可。

📖 引用

在我们发布有关 y0 的应用说明之前,您可以通过我们的 Zenodo 记录引用此软件(也请参见上面的徽章)。

@software{y0,
  author       = {Charles Tapley Hoyt and
                  Jeremy Zucker and
                  Marc-Antoine Parent},
  title        = {y0-causal-inference/y0},
  month        = jun,
  year         = 2021,
  publisher    = {Zenodo},
  version      = {v0.1.0},
  doi          = {10.5281/zenodo.4950768},
  url          = {https://doi.org/10.5281/zenodo.4950768}
}

🙏 支持者

该项目已得到几家组织的支持(按字母顺序排列)

💰 资金

Y0 因果推理引擎的开发得到了以下资助

资助机构 计划 拨款
DARPA 自动化科学知识提取(ASKE) HR00111990009
PNNL 数据模型收敛计划 用于分析安全约束单元计划的替代结果因果关系和机器学习方法(SCY0) 90001
DARPA 自动化科学知识提取和建模(ASKEM) HR00112220036

🍪 Cookiecutter

此包是用 @audreyfeldroycookiecutter 包以及 @cthoytcookiecutter-python-package 模板创建的。

🛠️ 开发

请参阅开发者说明

README 的最后一部分是为那些想要通过编写代码贡献来参与的人。

开发者安装

要在开发模式下安装,请使用以下命令

$ git clone git+https://github.com/y0-causal-inference/y0.git
$ cd y0
$ pip install -e .

❓ 测试

在克隆存储库并使用 pip install tox 安装 tox 后,可以从 tests/ 文件夹中重复运行单元测试

$ tox

此外,这些测试会在每次提交时自动重新运行,使用的是 GitHub Action

📦 制作发行版

在开发模式下安装包并使用 pip install tox 安装 tox 后,在 tox.ini 中的 finish 环境中包含创建新发行版的命令。在 shell 中运行以下命令

$ tox -e finish

此脚本执行以下操作

  1. 使用 BumpVersion 将 setup.cfgsrc/y0/version.py 中的版本号切换为不带 -dev 后缀
  2. 将代码打包成 tar 归档和 wheel
  3. 使用 twine 上传到 PyPI。请确保配置了 .pypirc 文件,以避免在此步骤中需要手动输入
  4. 推送到 GitHub。您需要创建一个与版本提升提交关联的发行版。
  5. 将版本提升到下一个补丁版本。如果您进行了重大更改并希望通过次级版本提升版本,请在之后使用tox -e bumpversion minor

项目详情


下载文件

下载适合您平台文件的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

y0-0.2.11.tar.gz (280.5 kB 查看哈希值)

上传时间

构建分布

y0-0.2.11-py3-none-any.whl (135.9 kB 查看哈希值)

上传时间 Python 3

由以下支持