因果推理工具

causalit的Python项目详细描述


#因果关系

此软件包包含使用观察(而非实验)数据集进行因果分析的工具。主要文档位于github.com/akelleh/causality


这个包最简单的接口可能是通过[`causality.analysis.causaldataframe`]中的"causaldataframe"对象(https://github.com/akelleh/causality/blob/master/causality/analysis/dataframe.py l8)。这只是"pandas.dataframe"对象的扩展,因此它继承了相同的方法。

首先,它有一个'causaldataframe.zmean'方法。当您试图估计离散变量"x"对连续变量"y"的影响时,此方法允许您控制一组变量"z"。它既支持在每个"x"值处返回"y"估计值,也支持提供引导错误栏。有关详细信息,请查看自述文件[此处](https://github.com/akelleh/causality/tree/master/causality/analysis)。

可以使用"causaldataframe.zplot"方法来完成此操作。有关详细信息,请查看自述文件[此处](https://github.com/akelleh/causality/tree/master/causality/analysis)。




观测和实验数据的因果效应。大多数工具都是参数化的,比如"倾向分数匹配",可以在"因果关系.估计.参数化"中找到。其他模型是非参数的,依赖于直接估计密度和使用g-估计方法。




目前(2016/01/23),唯一实现的算法是Pearl(2000)的IC\*算法。它有不错的测试覆盖率,但请随意写一些!我在"tests/unit/test\u ic.py"中留下了一些存根。

要在数据集上运行图形搜索,可以使用以下算法(以ic为例):

``python
import numpy
import pandas as pd

pendence_tests导入robustregressiontest

生成一些玩具数据:
size=2000
x1=numpy.random.normal(size=size)
x2=x1+numpy.random.normal(size=size)
x3=x1+numpy.random.normal(size=size)
x4=x2+x3+numpy.random.normal(size=size)
x5=x4+numpy.random.normal(size=size)

将数据加载到数据帧:
x=pd.数据帧({'x1':x1,'x2':x2,'x3':x3,'x4':x4,'x5':x5})

定义变量类型:"c"是"连续的"。这里定义的变量是执行搜索的变量,而不是数据帧中定义的所有变量。
变量类型={x1':'c','x2':'c','x3':'c','x4':'c','x5':'c}

c_算法.搜索(x,变量类型)
```

在这个图中,每个变量都是一个节点(从dataframe列中命名),每个边表示节点之间的统计依赖性,这些依赖性无法通过对为搜索指定的变量进行调整来消除。如果一条边可以使用可用的数据定向,则箭头在"箭头"中指示。如果边也满足真正因果关系的局部标准,则该有向边将具有"marked=true"。如果我们P从搜索结果中打印边,我们可以看到哪些边是定向的,哪些边满足真正原因的本地标准:
``python
>;>;graph.edges(data=true)
[('x2','x1',{'arrows':[],'marked':false})、
('x2','x4',{'arrows':['x4','marked':false})、
('x3','x1',{'arrows':[],'marked':false})、
('x3'、'x4'、{'arrows':['x4']、'marked':false})、
('x4'、'x5'、{'arrows':['x5'、'marked':true})
`````

我们可以看到从`'x2'到`'x4'、`'x3'到`'x4'、`'x4'到`'x5'的边都指向每对边中的第二个边。此外,我们还发现从"x4"到"x5"的边满足真正因果关系的本地标准。这与Pearl(2000)图"2.3(d)"中给出的结构相匹配。




您可以提供一组"可接受的"变量来进行控制,并测量给定原因的效果的因果分布,或给定原因的效果的预期值。

通过调整图形中x的父对象来调整变量。使用上面的数据集,您可以从因果关系中运行类似于
``python
`python
from causalization.estimation.adjustimportadjustfordirectcausfordirectcauss



g=digraph

g.add从(['x1','x2'x2','x3','x4','x4','x5']]]
g.add nodes from(['x1','x2'x2'x2'xx','x2'x2'x2'x4'),('x3','x3','x3','x3','x3'x3','x3','x4')])
调整=直接调整uses()
```

>然后,您可以看到通过打印调整来调整变量集。可接受的集合(g,['x2',['x3'])
集合(['x1'])
````
如果我们没有调整到"x1",我们将错误地发现"x2"对"x3"有因果关系,这是由于建议路径"x2,x1,x3"。对"x1"的调整消除了这种偏见。

ct=causaleffect(x,['x2'],['x3'],varvarvariacucucucucucucucucucucucucucucucucucucucucucucucucucucucucucucucucucucucucucucucucusususususususususususet=list(accesususususususususususususususususususet)
>;x=pd.dataframe({'x2':[0.],'x3':[0.]})
>>>;>effect.pdf(x)
>0.26891568315603296
```````>>


,对于高斯高斯高斯高斯高斯高斯0个。以及方差2。如果调整"x2"的值,就会发现"x3"的概率不会改变。只有条件分布"p(x3 x2)"是不正确的,因为在这种情况下,观察和干预是不等价的。测试的运行时间很长。在不久的将来将进行许多优化,包括
*实现快速的互信息计算,o(n logn)
*加速集成用于控制的变量
*获取用户提供的图形,并找到一组可接受的集
*确定因果效应的前门标准方法

_因果关系。剑桥大学出版社(2000)。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
内存Java正在运行。jar heapdump错误   java如何在安卓画布中弯曲文本区域?   java如何在Gdx 安卓游戏编程中获得矩形的真实触碰位置?   找不到java Spring MVC控制器   在Java中使用双重检查锁定单例扩展类   java在高效的时间和内存中动态执行insert(索引、数据)、delete(索引)、getAt(索引)操作。   java 安卓 Toast和视图帮助   java协议缓冲区:从文件中读取所有序列化消息   java如何在Jackson中为参数化接口类型执行通用自定义反序列化程序   与简单的空检查相比,使用(平面)映射的java优势是什么?   异步方法seam中的java Get contextparam   jar使用相同的java运行时运行另一个java程序   java访问Spring批处理中的作业参数   java给定字符串为空或null   在h2数据库1.4中找不到java类“org.h2.fulltext.FullTextLucene”。*不适用于Lucene Core 4*   java Spring Boot在使用@enableSync时不响应任何请求   java错误:在bash上找不到或加载主类pj2   “返回对象”和“返回(对象)”之间的Java差异   java Android开发:如何使用onKeyUp?