y0
(发音为“为什么不?”)是用于因果推理的 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()
解析回来。
可以在此 Jupyter Notebook 中找到 DSL 的完整演示
y0
有一个建立在networkx
之上的非循环有向混合图的概念,可用于建模因果关系:
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 ),
],
)
y0
在y0.examples
中有许多预先编写的示例,这些示例来自 Pearl、Shpitser、Bareinboim 等。
y0
提供了许多算法的实际实现,这些算法在过去 15 年的出版物中仍未实现,包括:
算法 | 参考 |
---|---|
ID | 施皮策和珀尔,2006 |
国际数据中心 | 施皮策和珀尔,2008 |
ID* | 施皮策和珀尔,2012 |
国际数据中心* | 施皮策和珀尔,2012 |
替代结果 | 蒂卡和卡尔瓦宁,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 因果推理引擎的开发由以下拨款资助:
资助机构 | 程序 | 授予 |
---|---|---|
美国国防部高级研究计划局 | 自动化科学知识提取 (ASKE) | HR00111990009 |
PNNL 数据模型融合计划 | 用于分析安全约束单元承诺的因果推理和机器学习方法(SCY0) | 90001 |
美国国防部高级研究计划局 | 自动化科学知识提取和建模 (ASKEM) | HR00112220036 |
该包是使用@audreyfeldroy 的cookiecutter 包使用@cthoyt 的cookiecutter-snekpack 模板创建的。
如果您想通过贡献代码来参与,则自述文件的最后部分适用。
要以开发模式安装,请使用以下命令:
git clone git+https://github.com/y0-causal-inference/y0.git
cd y0
pip install -e .
该项目使用cruft
来使样板文件(即配置、贡献指南、文档配置)与上游 cookiecutter 包保持同步。更新如下:
pip install cruft
cruft update
有关 Cruft 更新命令的更多信息可在此处获取。
克隆存储库并使用pip install tox tox-uv
安装tox
后, tests/
文件夹中的单元测试可以通过以下命令重复运行:
tox -e py
此外,这些测试会在 GitHub Action 中的每次提交时自动重新运行。
可以使用以下内容在本地构建文档:
git clone git+https://github.com/y0-causal-inference/y0.git
cd y0
tox -e docs
open docs/build/html/index.html
该文档会自动安装该包以及pyproject.toml
中指定的额外docs
。可以在那里添加sphinx
插件,例如texext
。此外,它们需要添加到docs/source/conf.py
中的extensions
列表中。
可以使用本指南将文档部署到 ReadTheDocs。 .readthedocs.yml
YAML 文件包含您需要的所有配置。您还可以在 GitHub 上设置持续集成,不仅检查 Sphinx 是否可以在隔离环境中构建文档(即使用tox -e docs-test
),还检查 ReadTheDocs 是否也可以构建文档。
Zenodo 是一个长期存档系统,可为您的软件包的每个版本分配一个 DOI。
完成这些步骤后,您就可以开始了!在 GitHub 上进行“发布”后(步骤如下),您可以导航到 https://zenodo.org/account/settings/github/repository/y0-causal-inference/y0 查看该发布的 DOI并链接到 Zenodo 记录。
您只需执行以下步骤一次。
您必须为每台机器执行一次以下步骤。在您的主目录中创建一个名为.pypirc
的文件,并包含以下内容:
[distutils]
index-servers =
pypi
testpypi
[pypi]
username = __token__
password = <the API token you just got>
# This block is optional in case you want to be able to make test releases to the Test PyPI server
[testpypi]
repository = https://test.pypi.org/legacy/
username = __token__
password = <an API token from test PyPI>
请注意,由于 PyPI 需要基于令牌的身份验证,因此我们逐字使用__token__
作为用户。如果您已经有一个带有[distutils]
部分的.pypirc
文件,只需确保有一个index-servers
键并且pypi
位于其关联列表中。有关配置.pypirc
文件的更多信息可以在此处找到。
在开发模式下安装软件包并使用pip install tox tox-uv
安装tox
后,从 shell 运行以下命令:
tox -e finish
该脚本执行以下操作:
pyproject.toml
、 CITATION.cff
、 src/y0/version.py
和docs/source/conf.py
中的版本号切换为不带-dev
后缀build
将代码打包在 tar 存档和wheel中twine
上传到 PyPI。tox -e bumpversion -- minor
。 这将触发 Zenodo 为您的版本分配一个 DOI。