dowhy.causal_identifier 包#
子模块#
dowhy.causal_identifier.auto_identifier 模块#
- class dowhy.causal_identifier.auto_identifier.AutoIdentifier(estimand_type: EstimandType, backdoor_adjustment: BackdoorAdjustment = BackdoorAdjustment.BACKDOOR_DEFAULT, optimize_backdoor: bool = False, costs: List | None = None)[源代码]#
基础类:
object实现不同识别方法的类。
目前支持后门和工具变量识别方法。识别基于提供的因果图。
该类用于与CausalModel的向后兼容 未来将被弃用,转而支持函数调用auto_identify_effect()
- class dowhy.causal_identifier.auto_identifier.BackdoorAdjustment(value)[来源]#
基础类:
Enum一个枚举。
- BACKDOOR_DEFAULT = 'default'#
- BACKDOOR_EFFICIENT = 'efficient-adjustment'#
- BACKDOOR_EXHAUSTIVE = 'exhaustive-search'#
- BACKDOOR_MAX = 'maximal-adjustment'#
- BACKDOOR_MIN = 'minimal-adjustment'#
- BACKDOOR_MINCOST_EFFICIENT = 'efficient-mincost-adjustment'#
- BACKDOOR_MIN_EFFICIENT = 'efficient-minimal-adjustment'#
- class dowhy.causal_identifier.auto_identifier.EstimandType(value)[source]#
基础类:
Enum一个枚举。
- NONPARAMETRIC_ATE = 'nonparametric-ate'#
- NONPARAMETRIC_CDE = 'nonparametric-cde'#
- NONPARAMETRIC_NDE = 'nonparametric-nde'#
- NONPARAMETRIC_NIE = 'nonparametric-nie'#
- dowhy.causal_identifier.auto_identifier.build_backdoor_estimands_dict(treatment_names: List[str], outcome_names: List[str], observed_nodes: List[str], backdoor_sets: List[str], estimands_dict: Dict)[source]#
如果需要,通过过滤未观察到的变量来构建后门集的最终字典。
- dowhy.causal_identifier.auto_identifier.construct_backdoor_estimand(treatment_name: List[str], outcome_name: List[str], common_causes: List[str])[source]#
- dowhy.causal_identifier.auto_identifier.construct_frontdoor_estimand(treatment_name: List[str], outcome_name: List[str], frontdoor_variables_names: List[str])[source]#
- dowhy.causal_identifier.auto_identifier.construct_iv_estimand(treatment_name: List[str], outcome_name: List[str], instrument_names: List[str])[source]#
- dowhy.causal_identifier.auto_identifier.construct_mediation_estimand(estimand_type: EstimandType, action_nodes: List[str], outcome_nodes: List[str], mediator_nodes: List[str])[source]#
- dowhy.causal_identifier.auto_identifier.find_valid_adjustment_sets(graph: DiGraph, action_nodes: List[str], outcome_nodes: List[str], observed_nodes: List[str], backdoor_paths: List, bdoor_graph: DiGraph, dseparation_algo: str, backdoor_sets: List, filt_eligible_variables: List, backdoor_adjustment: BackdoorAdjustment, max_iterations: int)[来源]#
- dowhy.causal_identifier.auto_identifier.get_default_backdoor_set_id(graph: DiGraph, action_nodes: List[str], outcome_nodes: List[str], backdoor_sets_dict: Dict)[source]#
- dowhy.causal_identifier.auto_identifier.identify_ate_effect(graph: DiGraph, action_nodes: List[str], outcome_nodes: List[str], observed_nodes: List[str], backdoor_adjustment: BackdoorAdjustment, optimize_backdoor: bool, estimand_type: EstimandType, costs: List, conditional_node_names: List[str] | None = None)[source]#
- dowhy.causal_identifier.auto_identifier.identify_backdoor(graph: DiGraph, action_nodes: List[str], outcome_nodes: List[str], observed_nodes: List[str], backdoor_adjustment: BackdoorAdjustment, include_unobserved: bool = False, dseparation_algo: str = 'default', direct_effect: bool = False)[source]#
- dowhy.causal_identifier.auto_identifier.identify_cde_effect(graph: DiGraph, action_nodes: List[str], outcome_nodes: List[str], observed_nodes: List[str], backdoor_adjustment: BackdoorAdjustment, estimand_type: EstimandType)[source]#
识别受控直接效应。有关定义,请参见Vanderwheele (2011)。 受控直接和中介效应:定义、识别和界限。 https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4193506/
使用do-calculus规则,识别产生一个调整集。 它基于的原则是,在一个图中,从治疗到结果的直接边被移除后,对调整集进行条件化应该能够d-分离治疗和结果。
- dowhy.causal_identifier.auto_identifier.identify_effect_auto(graph: DiGraph, action_nodes: str | List[str], outcome_nodes: str | List[str], observed_nodes: str | List[str], estimand_type: EstimandType, conditional_node_names: List[str] | None = None, backdoor_adjustment: BackdoorAdjustment = BackdoorAdjustment.BACKDOOR_DEFAULT, optimize_backdoor: bool = False, costs: List | None = None) IdentifiedEstimand[source]#
返回已识别的估计量的主要方法(如果存在)。
如果estimand_type是非参数ATE,则使用后门、工具变量和前门识别方法,基于因果图检查是否存在可识别的estimand。
- Parameters:
optimize_backdoor – 如果为True,使用优化算法计算后门集
costs – 与图中变量相关的非负成本。仅用于
对于estimand_type='non-parametric-ate'和backdoor_adjustment='efficient-mincost-adjustment'。如果用户没有提供成本,并且backdoor_adjustment='efficient-mincost-adjustment',则假定图中所有变量的成本都为一。 :param conditional_node_names: 用于确定治疗的变量。如果没有提供,则假定干预是静态的。 :returns: 目标估计量,IdentifiedEstimand类的一个实例
- dowhy.causal_identifier.auto_identifier.identify_efficient_backdoor(graph: DiGraph, action_nodes: List[str], outcome_nodes: List[str], observed_nodes: List[str], backdoor_adjustment: BackdoorAdjustment, costs: List, conditional_node_names: List[str] | None = None)[source]#
实现算法以计算高效后门集的方法,如Rotnitzky和Smucler(2020)、Smucler、Sapienza和Rotnitzky(2021)以及Smucler和Rotnitzky(2022)所述。
对于backdoor_adjustment='efficient-adjustment',计算一个最优的后门集,即由可观测变量组成的后门集,该后门集产生的干预均值的非参数估计量在基于可观测后门集的估计量中具有最小的渐近方差。当没有潜在变量时,这个最优后门集总是存在,并且算法在这种情况下保证能够计算它。在具有潜在变量的非参数图模型下,这样的后门集可能不存在。当已知某些充分条件不满足时,会引发错误。
对于backdoor_adjustment=’efficient-minimal-adjustment’,计算一个最优的最小后门集, 即一个由可观测变量组成的最小后门集,该集在基于可观测最小后门集的干预均值非参数估计中, 具有最小的渐近方差。
对于backdoor_adjustment=’efficient-mincost-adjustment’,计算一个最优的最小成本后门集,即一个由可观测变量组成的最小成本后门集,该后门集产生的干预均值的非参数估计器在基于可观测最小成本后门集的估计器中具有最小的渐近方差。后门集的成本定义为组成它的变量的成本之和。
通过此方法计算的各种最优后门集不仅在非参数图形模型和非参数干预均值估计器下是最优的,而且在线性图形模型和OLS估计器下也是最优的,根据Henckel、Perkovic和Maathuis(2020)的结果。
- Parameters:
成本 – 一个与图中变量相关的非负成本列表。仅用于
对于 estimatand_type='non-parametric-ate' 和 backdoor_adjustment='efficient-mincost-adjustment'。如果用户没有提供成本,并且 backdoor_adjustment='efficient-mincost-adjustment',则假设图中所有变量的成本都为一。列表的结构应为 [(node, {"cost": x}) for node in nodes] 的形式。 :param conditional_node_names: 用于确定处理的变量。如果没有提供,则假设干预将处理设置为常数。 :returns: backdoor_sets,一个字典列表,每个字典的值都是一个后门集。
- dowhy.causal_identifier.auto_identifier.identify_frontdoor(graph: DiGraph, action_nodes: List[str], outcome_nodes: List[str], observed_nodes: List[str], dseparation_algo: str = 'default')[source]#
如果存在,找到一个有效的前门变量集。
- dowhy.causal_identifier.auto_identifier.identify_mediation(graph: DiGraph, action_nodes: List[str], outcome_nodes: List[str])[source]#
如果存在,请找到一个有效的调解器。
目前仅支持单一变量中介集。
- dowhy.causal_identifier.auto_identifier.identify_mediation_first_stage_confounders(graph: DiGraph, action_nodes: List[str], outcome_nodes: List[str], mediator_nodes: List[str], observed_nodes: List[str], backdoor_adjustment: BackdoorAdjustment)[source]#
- dowhy.causal_identifier.auto_identifier.identify_mediation_second_stage_confounders(graph: DiGraph, action_nodes: List[str], mediator_nodes: List[str], outcome_nodes: List[str], observed_nodes: List[str], backdoor_adjustment: BackdoorAdjustment)[来源]#
- dowhy.causal_identifier.auto_identifier.identify_nde_effect(graph: DiGraph, action_nodes: List[str], outcome_nodes: List[str], observed_nodes: List[str], backdoor_adjustment: BackdoorAdjustment, estimand_type: EstimandType)[source]#
- dowhy.causal_identifier.auto_identifier.identify_nie_effect(graph: DiGraph, action_nodes: List[str], outcome_nodes: List[str], observed_nodes: List[str], backdoor_adjustment: BackdoorAdjustment, estimand_type: EstimandType)[source]#
dowhy.causal_identifier.backdoor 模块#
- class dowhy.causal_identifier.backdoor.Backdoor(graph, nodes1, nodes2)[source]#
基础类:
object用于在源节点和目标节点之间优化实现后门变量搜索的类。
- class dowhy.causal_identifier.backdoor.HittingSetAlgorithm(list_of_sets, colliders={})[source]#
基础类:
object用于获取近似最小后门变量集的Hitting Set算法类,以便为每个节点对进行条件设置。
- Parameters:
list_of_sets – 集合列表,其中每个集合包含表示源节点和目标节点之间的单个后门路径的节点。
dowhy.causal_identifier.efficient_backdoor 模块#
- class dowhy.causal_identifier.efficient_backdoor.EfficientBackdoor(graph: DiGraph, action_nodes: List[str], outcome_nodes: List[str], observed_nodes: List[str], conditional_node_names=None, costs=None)[source]#
基础类:
object实现用于寻找最优(高效)后门集的方法。
- Parameters:
graph – nx.DiGraph 一个因果图。
costs – 列表 一个与图中变量相关联的非负成本列表。仅用于 estimand_type=’non-parametric-ate’ 和 method_name=’efficient-mincost-adjustment’。如果 用户未提供成本,并且 method_name=’efficient-mincost-adjustment’,则假定图中所有变量的成本 均为一。列表的结构应为 [(node, {“cost”: x}) for node in nodes] 的形式。
conditional_node_names – list 一个包含用于确定治疗的变量列表。如果没有提供,则假设干预将治疗设置为常数。
- ancestors_all(nodes)[source]#
计算一组节点的所有祖先集合的方法。 一个节点总是它自己的祖先。
- Parameters:
nodes – 列表 图中的节点列表。
- Returns ancestors:
集合 节点集合中节点的祖先节点集合。
- backdoor_graph(G)[source]#
- Method to compute the proper back-door graph associated with
治疗和结果。
- Parameters:
G – nx.DiGraph 一个有向无环图。
- Returns Gbd:
nx.DiGraph G的适当后门图。
- build_D()[source]#
返回与处理、结果、条件和可观察变量相关的D流网络。如果一个节点没有‘cost’属性,此函数将假设成本为无穷大。
请参阅Smucler和Rotnitzky(2022年)在《因果推断杂志》上发表的论文,了解此流网络的完整定义。
- Returns D:
nx.DiGraph D流网络。
- build_H0()[source]#
返回与治疗、结果、条件和可观察变量相关的H0图。有关此图的完整定义,请参见Smucler、Sapienza和Rotnitzky(2021)在Biometrika中的文章。
- Returns H0:
nx.Graph H0图。
- build_H1()[source]#
返回与治疗、结果、条件和可观察变量相关的H1图。有关此图的完整定义,请参见Smucler、Sapienza和Rotnitzky(2021)在Biometrika中的文章。
- Returns H1:
nx.Graph H1图。
- causal_vertices()[source]#
- Method to compute the set of all vertices that lie in a causal path
在治疗和结果之间。
- Returns causal_vertices:
集合 一个集合,其顶点位于处理与结果之间的某些因果路径上。
- compute_smallest_mincut()[source]#
返回与处理、结果、条件和可观察变量相关的流网络D中的最小割,该最小割包含在任何其他最小割中。
- Returns S_c:
集合 具有上述属性的最小割。
- forbidden()[source]#
- Method to compute the forbidden set with respect to treatment and
结果。
- Returns forbidden:
set 禁止的集合。
- h_operator(S)[source]#
给定流网络D中的一组顶点S,返回操作符h(S),即无向图H1中的一组顶点。
有关此运算符的完整定义,请参见Smucler和Rotnitzky(2022)在《因果推断杂志》上的文章。
- Parameters:
S – 集合 在流网络D中与处理、结果、条件和可观察变量相关联的一组顶点。
- Returns Z:
集合 通过将h运算符应用于S得到的集合。
- ignore()[source]#
- Method to compute the set of ignorable vertices with respect to
治疗、结果、条件和可观察变量。 用于构建H0和H1图。有关此集合的完整定义,请参见Smucler、Sapienza和Rotnitzky(2021),Biometrika。
- Returns ignore:
set 可忽略的顶点集合。
- optimal_adj_set()[source]#
返回关于治疗、结果、条件和可观测变量的最优调整集。
如果Smucler、Sapienza和Rotnitzky(2021年)在《Biometrika》中概述的最优调整集存在的充分条件不成立,则会引发错误。
- Returns:
最优:集合 最优调整集合。
- optimal_mincost_adj_set()[source]#
返回关于治疗、结果、条件和可观测变量的最优最小成本调整集。
请注意,当成本恒定时,这是在最小基数调整集中的最优调整集。
- Returns:
optimal_mincost: set 最优最小成本调整集。
dowhy.causal_identifier.id_identifier 模块#
- class dowhy.causal_identifier.id_identifier.IDExpression[source]#
基础类:
object用于存储因果估计量的类,这是使用ID算法进行识别步骤的结果。 该对象存储了一系列估计器(self._product),必须获取这些估计器的乘积,以及一系列变量(self._sum),必须对这些变量进行边缘化处理。
- add_product(element: Dict | IDExpression)[源代码]#
将估算器添加到产品列表中。
- Parameters:
element – 要附加到产品列表的估计器。
- class dowhy.causal_identifier.id_identifier.IDIdentifier[source]#
基础类:
object此类用于与CausalModel的向后兼容性 未来将被弃用,转而支持函数调用id_identify_effect()
- dowhy.causal_identifier.id_identifier.identify_effect_id(graph: DiGraph, action_nodes: str | List[str], outcome_nodes: str | List[str]) IDExpression[source]#
ID算法的实现。 链接 - https://ftp.cs.ucla.edu/pub/stat_ser/shpitser-thesis.pdf 伪代码已在第40页提供。
- Parameters:
treatment_names – 包含处理变量名称的有序集合。
:param outcome_names: 包含结果变量名称的有序集合。
- Returns:
目标估计量,IDExpression类的一个实例。
dowhy.causal_identifier.identified_estimand 模块#
- class dowhy.causal_identifier.identified_estimand.IdentifiedEstimand(identifier, treatment_variable, outcome_variable, estimand_type=None, estimands=None, backdoor_variables=None, instrumental_variables=None, frontdoor_variables=None, mediator_variables=None, mediation_first_stage_confounders=None, mediation_second_stage_confounders=None, default_backdoor_id=None, identifier_method=None, no_directed_path=False)[来源]#
基础类:
object用于存储因果估计量的类,通常是识别步骤的结果。
dowhy.causal_identifier.identify_effect 模块#
- class dowhy.causal_identifier.identify_effect.CausalIdentifier(*args, **kwargs)[source]#
基础类:
Protocol定义CausalIdentifier的协议,所有CausalIdentifiers必须至少符合此方法列表。
该类用于与CausalModel的向后兼容 未来将被弃用,转而支持函数调用auto_identify_effect()
- identify_effect(graph: DiGraph, action_nodes: str | List[str], outcome_nodes: str | List[str], **kwargs)[源代码]#
基于因果图识别要估计的因果效应 :param graph: 要分析的因果图 :param action_nodes: 处理的名称 :param outcome_nodes: 结果的名称 :param **kwargs: 特定CausalIdentifier的identify_effect所需的额外参数 例如:AutoIdentifier中的conditional_node_names或IDIdentifier中的node_names :returns: 如果识别出因果效应,则返回一个概率表达式(estimand),否则返回NULL
- dowhy.causal_identifier.identify_effect.identify_effect(graph: DiGraph, action_nodes: str | List[str], outcome_nodes: str | List[str], observed_nodes: str | List[str]) IdentifiedEstimand[源代码]#
基于因果图识别要估计的因果效应
- Parameters:
graph – 要分析的因果图
treatment – 治疗名称
outcome – 结果名称
- Returns:
如果已识别,则为因果效应的概率表达式(estimand),否则为NULL
模块内容#
- class dowhy.causal_identifier.AutoIdentifier(estimand_type: EstimandType, backdoor_adjustment: BackdoorAdjustment = BackdoorAdjustment.BACKDOOR_DEFAULT, optimize_backdoor: bool = False, costs: List | None = None)[源代码]#
基础类:
object实现不同识别方法的类。
目前支持后门和工具变量识别方法。识别基于提供的因果图。
该类用于与CausalModel的向后兼容 未来将被弃用,转而支持函数调用auto_identify_effect()
- class dowhy.causal_identifier.BackdoorAdjustment(value)[来源]#
基础类:
Enum一个枚举。
- BACKDOOR_DEFAULT = 'default'#
- BACKDOOR_EFFICIENT = 'efficient-adjustment'#
- BACKDOOR_EXHAUSTIVE = 'exhaustive-search'#
- BACKDOOR_MAX = 'maximal-adjustment'#
- BACKDOOR_MIN = 'minimal-adjustment'#
- BACKDOOR_MINCOST_EFFICIENT = 'efficient-mincost-adjustment'#
- BACKDOOR_MIN_EFFICIENT = 'efficient-minimal-adjustment'#
- class dowhy.causal_identifier.EstimandType(value)[source]#
基础类:
Enum一个枚举。
- NONPARAMETRIC_ATE = 'nonparametric-ate'#
- NONPARAMETRIC_CDE = 'nonparametric-cde'#
- NONPARAMETRIC_NDE = 'nonparametric-nde'#
- NONPARAMETRIC_NIE = 'nonparametric-nie'#
- class dowhy.causal_identifier.IDIdentifier[source]#
基础类:
object此类用于与CausalModel的向后兼容性 未来将被弃用,转而支持函数调用id_identify_effect()
- class dowhy.causal_identifier.IdentifiedEstimand(identifier, treatment_variable, outcome_variable, estimand_type=None, estimands=None, backdoor_variables=None, instrumental_variables=None, frontdoor_variables=None, mediator_variables=None, mediation_first_stage_confounders=None, mediation_second_stage_confounders=None, default_backdoor_id=None, identifier_method=None, no_directed_path=False)[来源]#
基础类:
object用于存储因果估计量的类,通常是识别步骤的结果。
- dowhy.causal_identifier.construct_backdoor_estimand(treatment_name: List[str], outcome_name: List[str], common_causes: List[str])[source]#
- dowhy.causal_identifier.construct_frontdoor_estimand(treatment_name: List[str], outcome_name: List[str], frontdoor_variables_names: List[str])[source]#
- dowhy.causal_identifier.construct_iv_estimand(treatment_name: List[str], outcome_name: List[str], instrument_names: List[str])[source]#
- dowhy.causal_identifier.identify_effect(graph: DiGraph, action_nodes: str | List[str], outcome_nodes: str | List[str], observed_nodes: str | List[str]) IdentifiedEstimand[源代码]#
基于因果图识别要估计的因果效应
- Parameters:
graph – 要分析的因果图
treatment – 治疗名称
outcome – 结果名称
- Returns:
如果已识别,则为因果效应的概率表达式(estimand),否则为NULL
- dowhy.causal_identifier.identify_effect_auto(graph: DiGraph, action_nodes: str | List[str], outcome_nodes: str | List[str], observed_nodes: str | List[str], estimand_type: EstimandType, conditional_node_names: List[str] | None = None, backdoor_adjustment: BackdoorAdjustment = BackdoorAdjustment.BACKDOOR_DEFAULT, optimize_backdoor: bool = False, costs: List | None = None) IdentifiedEstimand[source]#
返回已识别的估计量的主要方法(如果存在)。
如果estimand_type是非参数ATE,则使用后门、工具变量和前门识别方法,基于因果图检查是否存在可识别的estimand。
- Parameters:
optimize_backdoor – 如果为True,使用优化算法计算后门集
costs – 与图中变量相关的非负成本。仅用于
对于estimand_type='non-parametric-ate'和backdoor_adjustment='efficient-mincost-adjustment'。如果用户没有提供成本,并且backdoor_adjustment='efficient-mincost-adjustment',则假定图中所有变量的成本都为一。 :param conditional_node_names: 用于确定治疗的变量。如果没有提供,则假定干预是静态的。 :returns: 目标估计量,IdentifiedEstimand类的一个实例
- dowhy.causal_identifier.identify_effect_id(graph: DiGraph, action_nodes: str | List[str], outcome_nodes: str | List[str]) IDExpression[source]#
ID算法的实现。 链接 - https://ftp.cs.ucla.edu/pub/stat_ser/shpitser-thesis.pdf 伪代码已在第40页提供。
- Parameters:
treatment_names – 包含处理变量名称的有序集合。
:param outcome_names: 包含结果变量名称的有序集合。
- Returns:
目标估计量,IDExpression类的一个实例。