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)[source]#
基类:
object实现不同识别方法的类。
目前支持后门和工具变量识别方法。识别过程基于提供的因果图。
此类用于向后兼容 CausalModel,未来将被弃用,推荐使用函数调用 auto_identify_effect()
- class dowhy.causal_identifier.auto_identifier.BackdoorAdjustment(value)[source]#
基类:
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, 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)[source]#
- 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]#
识别受控直接效应(CDE)。关于其定义,请参阅 Vanderwheele (2011) 的文章《受控直接和中介效应:定义、识别和界限》。https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4193506/
使用 do-演算规则,识别过程会产生一个调整集合。其基本原则是,在一个移除治疗到结果之间直接边的图中,对调整集合进行条件化处理可以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#
返回已识别的可估计量(如果存在)的主要方法。
如果 estimand_type 是非参数 ATE,则使用后门、工具变量和前门识别方法,基于因果图检查是否存在可识别的可估计量。
- 参数:
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’,计算最优最小成本后门集合,即由可观测变量组成的最小成本后门集合,该集合产生的干预均值的非参数估计量在基于可观测最小成本后门集合的所有估计量中具有最小的渐近方差。后门集合的成本定义为组成该集合的变量的成本总和。
通过此方法计算出的各种最优后门集合,不仅在非参数图模型和干预均值的非参数估计量下是最优的,而且根据 Henckel、Perkovic 和 Maathuis (2020) 的结果,在线性图模型和 OLS 估计量下也是最优的。
- 参数:
costs – 一个列表,包含与图中变量相关的非负成本。仅用于
estimatand_type=’non-parametric-ate’ 和 backdoor_adjustment=’efficient-mincost-adjustment’。如果用户未提供成本,且 backdoor_adjustment=’efficient-mincost-adjustment’,则假定图中所有变量的成本等于一。列表的结构应为 [(节点, {“成本”: 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)[source]#
- 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 算法的类,旨在获取每对节点需要进行条件化的近似最小后门变量集合。
- 参数:
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实现寻找最优(高效)后门集合的方法。
- 参数:
graph – nx.DiGraph 一个因果图。
costs – list 一个列表,包含与图中变量相关的非负成本。仅用于 estimatand_type=’non-parametric-ate’ 和 method_name=’efficient-mincost-adjustment’。如果用户未提供成本,且 method_name=’efficient-mincost-adjustment’,则假定图中所有变量的成本等于一。列表的结构应为 [(节点, {“成本”: x}) for node in nodes] 的形式。
conditional_node_names – list 一个列表,包含用于确定治疗的变量。如果未提供,则假定干预将治疗设定为常数。
- ancestors_all(nodes)[source]#
计算一组节点所有祖先集合的方法。一个节点总是它自己的祖先。
- 参数:
nodes – list 图中节点的列表。
- 返回 ancestors:
set 作为 nodes 中节点的祖先的节点集合。
- backdoor_graph(G)[source]#
- 计算与以下内容相关的适当后门图的方法
治疗和结果。
- 参数:
G – nx.DiGraph 一个有向无环图。
- 返回 Gbd:
nx.DiGraph G 的适当后门图。
- build_D()[source]#
返回与治疗、结果、条件和可观测变量相关的 D 流网络。如果节点没有 ‘cost’ 属性,此函数将假定成本为无穷大。
有关此流网络的完整定义,请参阅 Smucler 和 Rotnitzky (2022) 发表在 Journal of Causal Inference 上的文章。
- 返回 D:
nx.DiGraph D 流网络。
- build_H0()[source]#
返回与治疗、结果、条件和可观测变量相关的 H0 图。有关此图的完整定义,请参阅 Smucler、Sapienza 和 Rotnitzky (2021) 发表在 Biometrika 上的文章。
- 返回 H0:
nx.Graph H0 图。
- build_H1()[source]#
返回与治疗、结果、条件和可观测变量相关的 H1 图。有关此图的完整定义,请参阅 Smucler、Sapienza 和 Rotnitzky (2021) 发表在 Biometrika 上的文章。
- 返回 H1:
nx.Graph H1 图。
- causal_vertices()[source]#
- 计算位于因果路径中的所有顶点集合的方法
在治疗和结果之间。
- 返回 causal_vertices:
set 包含位于治疗和结果之间某些因果路径上的顶点的集合。
- compute_smallest_mincut()[source]#
返回与治疗、结果、条件和可观测变量相关的流网络 D 中的最小割集,该最小割集包含在任何其他最小割集中。
- 返回 S_c:
set 具有上述属性的最小割集。
- h_operator(S)[source]#
给定流网络 D 中顶点集合 S,返回算子 h(S),即无向图 H1 中的顶点集合。
有关此算子的完整定义,请参阅 Smucler 和 Rotnitzky (2022) 发表在 Journal of Causal Inference 上的文章。
- 参数:
S – set 与治疗、结果、条件和可观测变量相关的流网络 D 中的顶点集合。
- 返回 Z:
set 通过对 S 应用 h 算子获得的集合。
- ignore()[source]#
- 计算关于以下内容的可忽略顶点集合的方法
治疗、结果、条件和可观测变量。用于构建 H0 和 H1 图。有关此集合的完整定义,请参阅 Smucler、Sapienza 和 Rotnitzky (2021) 发表在 Biometrika 上的文章。
- 返回 ignore:
set 可忽略顶点集合。
- optimal_adj_set()[source]#
返回关于治疗、结果、条件和可观测变量的最优调整集合。
如果在 Smucler、Sapienza 和 Rotnitzky (2021) 发表在 Biometrika 上的文章中概述的最优调整集合存在的充分条件不满足,则会引发错误。
- 返回:
optimal: 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)[source]#
将估计量添加到乘积列表中。
- 参数:
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 页提供。
- 参数:
treatment_names – 包含处理变量名称的 OrderedSet。
:param outcome_names: 包含结果变量名称的 OrderedSet。
- 返回:
目标可估量,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)[source]#
基类:
object用于存储因果可估量(通常作为识别步骤的结果)的类。
dowhy.causal_identifier.identify_effect 模块#
- class dowhy.causal_identifier.identify_effect.CausalIdentifier(*args, **kwargs)[source]#
基类:
Protocol定义 CausalIdentifier 的协议,所有 CausalIdentifier 必须至少符合此方法列表。
此类用于向后兼容 CausalModel,未来将被弃用,推荐使用函数调用 auto_identify_effect()
- identify_effect(graph: DiGraph, action_nodes: str | List[str], outcome_nodes: str | List[str], **kwargs)[source]#
根据因果图识别待估计的因果效应 :param graph: 待分析的因果图 :param action_nodes: 处理(干预)的名称 :param outcome_nodes: 结果的名称 :param **kwargs: 特定 CausalIdentifier 的 identify_effect 方法所需的额外参数,例如:AutoIdentifier 中的 conditional_node_names 或 IDIdentifier 中的 node_names :returns: 如果识别成功,则返回表示因果效应的概率表达式(可估计量),否则返回 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[source]#
基于因果图识别要估计的因果效应
- 参数:
graph – 要分析的因果图
treatment – 处理的名称
outcome – 结果的名称
- 返回:
如果识别成功,则返回因果效应的概率表达式(可估量),否则返回 NULL
模块内容#
- class dowhy.causal_identifier.AutoIdentifier(estimand_type: EstimandType, backdoor_adjustment: BackdoorAdjustment = BackdoorAdjustment.BACKDOOR_DEFAULT, optimize_backdoor: bool = False, costs: List | None = None)[source]#
基类:
object实现不同识别方法的类。
目前支持后门和工具变量识别方法。识别过程基于提供的因果图。
此类用于向后兼容 CausalModel,未来将被弃用,推荐使用函数调用 auto_identify_effect()
- class dowhy.causal_identifier.BackdoorAdjustment(value)[source]#
基类:
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)[source]#
基类:
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[source]#
基于因果图识别要估计的因果效应
- 参数:
graph – 要分析的因果图
treatment – 处理的名称
outcome – 结果的名称
- 返回:
如果识别成功,则返回因果效应的概率表达式(可估量),否则返回 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,则使用后门、工具变量和前门识别方法,基于因果图检查是否存在可识别的可估计量。
- 参数:
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 页提供。
- 参数:
treatment_names – 包含处理变量名称的 OrderedSet。
:param outcome_names: 包含结果变量名称的 OrderedSet。
- 返回:
目标可估量,IDExpression 类的一个实例。