dowhy 包#

子包#

子模块#

dowhy.causal_estimator 模块#

class dowhy.causal_estimator.CausalEstimate(data, treatment_name, outcome_name, estimate, target_estimand, realized_estimand_expr, control_value, treatment_value, conditional_estimates=None, **kwargs)[来源]#

基础类:object

用于每个因果估计器返回的估计对象的类

add_effect_strength(strength_dict)[source]#
add_estimator(estimator_instance)[来源]#
add_params(**kwargs)[来源]#
estimate_conditional_effects(effect_modifiers=None, num_quantiles=5)[source]#

估计给定变量条件下的治疗效果。

如果提供了数值效应修饰符,它将被离散化为分位数箱。如果您想要自定义离散化,您可以自己操作:创建一个包含离散化效应修饰符的新列,然后将该列的名称包含在effect_modifier_names参数中。

Parameters:
  • effect_modifiers – 用于估计条件效应的效应修饰变量的名称。如果未提供,则默认为在创建CausalEstimator对象时指定的效应修饰变量。

  • num_quantiles – 将数值效应修饰变量离散化为的分位数数量。不影响任何分类效应修饰变量。

Returns:

一个(多索引)数据框,为(离散化的)效应修饰符的每个值提供单独的效果。

get_confidence_intervals(confidence_level=None, method=None, **kwargs)[source]#

获取所获得估计的置信区间。

默认情况下,这是通过自举置信区间来完成的,但如果特定的估计器实现了其他估计置信区间的方法,则可以覆盖此设置。

如果提供的方法不是bootstrap,此函数将调用特定估计器的实现。

Parameters:
  • method – 用于估计置信区间的方法。

  • confidence_level – 估计的置信区间的置信水平。

  • kwargs – 传递给CI方法的其他可选参数。

Returns:

获得的置信区间。

get_standard_error(method=None, **kwargs)[来源]#

获取所获得估计的标准误差。

默认情况下,这是通过自举标准误差来完成的,但如果特定估计器实现了其他估计标准误差的方法,则可以覆盖此设置。

如果提供的方法不是bootstrap,此函数将调用特定估计器的实现。

Parameters:
  • method – 计算标准误差的方法。

  • kwargs – 传递给估算方法的其他可选参数。

Returns:

因果估计的标准误差。

interpret(method_name=None, **kwargs)[source]#

解释因果估计。

Parameters:
  • method_name – 使用的方法(字符串)或方法列表。如果为None,则使用特定估计器的默认值。

  • kwargs: – 直接传递给解释器方法的可选参数。

Returns:

test_stat_significance(method=None, **kwargs)[source]#

测试所获得估计的统计显著性。

默认情况下,使用重采样来创建非参数显著性测试。 各个子估计器可以实现不同的方法。 如果方法名称与“bootstrap”不同,此函数将调用子估计器的实现。

Parameters:
  • method – 用于检查统计显著性的方法

  • kwargs – 传递给估算方法的其他可选参数。

Returns:

显著性检验的p值

class dowhy.causal_estimator.CausalEstimator(identified_estimand: IdentifiedEstimand, test_significance: bool | str = False, evaluate_effect_strength: bool = False, confidence_intervals: bool = False, num_null_simulations: int = 1000, num_simulations: int = 399, sample_size_fraction: int = 1, confidence_level: float = 0.95, need_conditional_estimates: bool | str = 'auto', num_quantiles_to_discretize_cont_cols: int = 5, **_)[source]#

基础类:object

因果效应估计器的基类。

子类实现不同的估计方法。所有估计方法都在“dowhy.causal_estimators”包中。

使用数据和相关变量的名称初始化估计器。

此方法从其子类的构造函数中调用。

Parameters:
  • identified_estimand – 表示要估计的目标识别估计量的概率表达式。

  • test_significance – 二进制标志或字符串,指示是否测试显著性以及使用哪种方法。所有估计器都支持 test_significance=”bootstrap”,该方法使用自举法估计所获得估计值的 p 值。个别估计器可以覆盖此设置以支持自定义测试方法。自举法支持一个可选参数 num_null_simulations。如果为 False,则不进行测试。如果为 True,则使用自定义方法(如果可用)测试估计值的显著性,否则使用自举法。

  • evaluate_effect_strength – (实验性) 是否评估效果的强度

  • confidence_intervals – 二进制标志或字符串,指示是否应计算置信区间以及应使用哪种方法。所有方法都支持通过使用参数 confidence_intervals="bootstrap" 来使用自举方法估计置信区间。自举方法接受两个参数(num_simulations 和 sample_size_fraction),可以在 params 字典中可选地指定这些参数。估计器也可以覆盖此方法以实现其自己的置信区间方法。如果此参数为 False,则不计算置信区间。如果为 True,则通过估计器的特定方法(如果可用)计算置信区间,否则通过自举方法计算。

  • num_null_simulations – 用于测试估计器统计显著性的模拟次数

  • num_simulations – 用于估计置信区间(和/或标准误差)的模拟次数

  • sample_size_fraction – 用于引导估计器的样本大小

  • confidence_level – 置信区间估计的置信水平

  • need_conditional_estimates – 布尔标志,指示是否应计算条件估计。如果图中有效应修饰符,则默认为True

  • num_quantiles_to_discretize_cont_cols – 将数值效应修饰符分割成的分位数数量,以便能够估计其上的条件处理效应。

  • kwargs – (可选)额外的估计器特定参数

Returns:

估计器类的一个实例。

class BootstrapEstimates(estimates, params)#

基础类:tuple

创建新的BootstrapEstimates实例(estimates, params)

estimates#

字段编号 0 的别名

params#

字段编号1的别名

DEFAULT_CONFIDENCE_LEVEL = 0.95#
DEFAULT_INTERPRET_METHOD = ['textual_effect_interpreter']#
DEFAULT_NOTIMPLEMENTEDERROR_MSG = 'not yet implemented for {0}. If you would this to be implemented in the next version, please raise an issue at https://github.com/microsoft/dowhy/issues'#
DEFAULT_NUMBER_OF_SIMULATIONS_CI = 399#
DEFAULT_NUMBER_OF_SIMULATIONS_STAT_TEST = 1000#
DEFAULT_SAMPLE_SIZE_FRACTION = 1#
NUM_QUANTILES_TO_DISCRETIZE_CONT_COLS = 5#
TEMP_CAT_COLUMN_PREFIX = '__categorical__'#
construct_symbolic_estimator(estimand)[source]#
do(x, data_df=None)[source]#

实现do-operator的方法。

给定治疗的值x,返回当治疗被干预到值x时结果的期望值。

Parameters:
  • x – 处理的值

  • data_df – 应用do-operator的数据。

Returns:

当治疗被干预/设置为x时的结果值。

estimate_confidence_intervals(data: DataFrame, estimate_value, confidence_level=None, method=None, **kwargs)[source]#

找到与任何估计器对应的置信区间 默认情况下,这是通过自助法置信区间来完成的 但如果特定估计器实现了其他估计置信区间的方法,则可以覆盖此方法。

如果提供的方法不是bootstrap,此函数将调用特定估计器的实现。

Parameters:
  • estimate_value – 获得的估计值

  • method – 用于估计置信区间的方法。

  • confidence_level – 估计的置信区间的置信水平。

  • kwargs – 传递给CI方法的其他可选参数。

Returns:

获得的置信区间。

estimate_effect_naive(data: DataFrame)[source]#
Parameters:

data – 用于估计效果的Pandas数据框

estimate_std_error(data: DataFrame, method=None, **kwargs)[来源]#

计算获得的因果估计的标准误差。

Parameters:
  • method – 计算标准误差的方法。

  • kwargs – 传递给估算方法的其他可选参数。

Returns:

因果估计的标准误差。

evaluate_effect_strength(data: DataFrame, estimate)[来源]#
get_new_estimator_object(identified_estimand, test_significance=False, evaluate_effect_strength=False, confidence_intervals=None)[source]#

创建一个与传入的估计参数相同类型的新估计器。

创建一个带有 identified_estimand 的新对象

Parameters:

identified_estimand – IdentifiedEstimand IdentifiedEstimand类的一个实例,提供了关于当治疗影响结果时使用的因果路径的信息

Returns:

生成给定估计值的相同估计器类的新实例。

static is_bootstrap_parameter_changed(bootstrap_estimates_params, given_params)[source]#

检查引导程序的参数是否已更改。

这是一种效率方法,用于检查是否需要重新采样引导样本。 如果参数已更改且应重新采样,则返回True。

Parameters:
  • bootstrap_estimates_params – 当前引导样本的参数字典

  • given_params – 用户传递的参数字典

Returns:

一个二进制标志,表示参数是否不同。

reset_encoders()[来源]#

移除对数据编码器的任何引用,导致它们在下次fit()时重新创建。

重要的是数据要一致编码,否则模型会产生不一致的输出。 特别是,分类变量需要进行独热编码;原始数据值的映射 在模型训练/拟合和推理时必须保持一致。

当再次调用fit()时,编码器会被重置,因为假设数据已经发生了变化。

为每个变量子集(处理、共同原因和效果修饰符)使用单独的编码器。

signif_results_tostr(signif_results)[source]#
target_units_tostr()[source]#
test_significance(data: DataFrame, estimate_value, method=None, **kwargs)[source]#

测试所获得估计值的统计显著性。

默认情况下,使用重采样来创建非参数显著性测试。 这是一个通用过程。各个子估计器可以实现不同的方法。 如果方法名称与“bootstrap”不同,此函数将调用子估计器的实现。

Parameters:
  • self – 类 Estimator 的对象实例

  • estimate_value – 获得的估计值

  • method – 用于检查统计显著性的方法

Returns:

显著性检验的p值

update_input(treatment_value, control_value, target_units)[source]#
class dowhy.causal_estimator.RealizedEstimand(identified_estimand, estimator_name)[来源]#

基础类:object

update_assumptions(estimator_assumptions)[source]#
update_estimand_expression(estimand_expression)[source]#
dowhy.causal_estimator.estimate_effect(data: DataFrame, treatment: str | List[str], outcome: str | List[str], identifier_name: str, estimator: CausalEstimator, control_value: int = 0, treatment_value: int = 1, target_units: str = 'ate', effect_modifiers: List[str] | None = None, fit_estimator: bool = True, method_params: Dict | None = None)[source]#

估计已识别的因果效应。

此外,您可以直接调用任何EconML估计方法。惯例是“backdoor.econml.path-to-estimator-class”。例如,对于位于EconML的“dml”模块中的双重机器学习估计器(“DML”类),您可以使用方法名称“backdoor.econml.dml.DML”。也可以调用CausalML估计器。请参阅此演示笔记本

Parameters:
  • treatment – 处理的名称

  • outcome – 结果的名称

  • identified_estimand – 一个表示要估计的效果的概率表达式。CausalModel.identify_effect 方法的输出

  • estimator – 使用的CausalEstimator实例

  • control_value – 对照组中的处理值,用于效果估计。如果处理是多变量的,这可以是一个列表。

  • treatment_value – 处理组中的处理值,用于效果估计。如果处理是多变量的,这可以是一个列表。

  • target_units – (实验性) 应该为其估计治疗效果的单元。这可以是三种类型之一。(1) 用于常见目标单元规范的字符串(即“ate”、“att”和“atc”),(2) 可以用作数据索引的lambda函数(pandas DataFrame),或(3) 一个新的DataFrame,其中包含effect_modifiers的值,并且仅针对此新数据估计效果。

  • effect_modifiers – 这里也可以(可选地)指定效果修饰变量的名称,因为它们不影响识别。如果为None,则使用CausalModel中的effect_modifiers。

  • fit_estimator – 布尔标志,指示是否拟合估计器。 将其设置为False对于使用先前拟合的估计器来估计对新数据的影响非常有用。

Returns:

CausalEstimate类的一个实例,包含因果效应估计和其他依赖于方法的信息

dowhy.causal_graph 模块#

class dowhy.causal_graph.CausalGraph(treatment_name, outcome_name, graph=None, common_cause_names=None, instrument_names=None, effect_modifier_names=None, mediator_names=None, observed_node_names=None, missing_nodes_as_confounders=False)[源代码]#

基础类:object

用于创建和修改因果图的类。

接受一个networkx有向图,一个ProbabilisticCausalModel ,一个gml格式(首选)或dot格式的图字符串(或文本文件)。可以为边和节点设置类似Graphviz的属性。例如,将style=”dashed”作为边属性可以确保边以虚线绘制。

如果没有提供图形字符串,可以提供治疗、结果、混杂因素、工具变量和效应修饰符(如果有的话)的名称来创建图形。

add_missing_nodes_as_common_causes(observed_node_names)[source]#
add_node_attributes(observed_node_names)[源代码]#
add_unobserved_common_cause(observed_node_names, color='gray')[来源]#
all_observed(node_names)[source]#
build_graph(common_cause_names, instrument_names, effect_modifier_names, mediator_names)[source]#

根据变量名称及其语义创建节点和边。

目前仅考虑“直接”效应修饰因子的图形表示。因此,除非使用图形明确表示,否则所有效应修饰因子均被视为“直接”的。基于VanderWheele和Robins的效应修饰因子分类:“四种效应修饰类型:基于有向无环图的分类。流行病学。2007年。”

check_dseparation(nodes1, nodes2, nodes3, new_graph=None, dseparation_algo='default')[来源]#
check_valid_backdoor_set(nodes1, nodes2, nodes3, backdoor_paths=None, new_graph=None, dseparation_algo='default')[来源]#

假设第一个参数(nodes1)是处理变量, 第二个是结果变量,第三个是候选的后门集

check_valid_frontdoor_set(nodes1, nodes2, candidate_nodes, frontdoor_paths=None, new_graph=None, dseparation_algo='default')[来源]#

检查对于一组处理变量,节点1到一组结果变量,节点2的前门变量是否有效。

check_valid_mediation_set(nodes1, nodes2, candidate_nodes, mediation_paths=None)[source]#

检查候选节点是否是从处理集 nodes1 到结果集 nodes2 的有效中介。

do_surgery(node_names, remove_outgoing_edges=False, remove_incoming_edges=False, target_node_names=None, remove_only_direct_edges_to_target=False)[source]#

基于do-surgery概念创建新图的方法。

Parameters:
  • node_names – 手术的焦点节点

  • remove_outgoing_edges – 是否移除焦点节点的出边

  • remove_incoming_edges – 是否移除指向焦点节点的入边

  • target_node_names – 手术的目标节点(可选),仅在 remove_only_direct_edges_to_target 为 True 时使用

  • remove_only_direct_edges_to_target – 是否仅移除从焦点节点到目标节点的直接边

Returns:

在指定移除边之后的新networkx图

filter_unobserved_variables(node_names)[source]#
get_adjacency_matrix(*args, **kwargs)[来源]#

从networkx图中获取邻接矩阵

get_all_directed_paths(nodes1, nodes2)[来源]#

获取节点集之间的所有有向路径。

目前仅支持单例集合。

get_all_nodes(include_unobserved=True)[source]#
get_ancestors(node_name, new_graph=None)[来源]#
get_backdoor_paths(nodes1, nodes2)[来源]#
get_causes(nodes, remove_edges=None)[来源]#
get_common_causes(nodes1, nodes2)[source]#

假设nodes1导致nodes2(例如,nodes1是治疗方法,nodes2是结果)

get_descendants(nodes)[source]#
get_effect_modifiers(nodes1, nodes2)[来源]#
get_instruments(treatment_nodes, outcome_nodes)[来源]#
get_parents(node_name)[来源]#
get_unconfounded_observed_subgraph()[来源]#
has_directed_path(action_nodes, outcome_nodes)[来源]#

检查两组节点之间是否存在任何有向路径。

当且仅当每个处理至少有一条直接路径通向其中一个结果时,返回True。并且,每个结果至少有一条来自其中一个处理的直接路径。

is_blocked(path, conditioned_nodes)[来源]#

使用d-分离标准来判断conditioned_nodes是否阻塞给定路径。

view_graph(layout=None, size=None, file_name='causal_model')[source]#

dowhy.causal_model 模块#

包含dowhy包主要模型类的模块。

class dowhy.causal_model.CausalModel(data, treatment, outcome, graph=None, common_causes=None, instruments=None, effect_modifiers=None, estimand_type='nonparametric-ate', proceed_when_unidentifiable=False, missing_nodes_as_confounders=False, identify_vars=False, **kwargs)[source]#

基础类:object

用于存储因果模型状态的主类。

初始化数据并创建因果图实例。

分配处理和结果变量。 同时检查并找到处理和结果的共同原因和工具。

必须提供至少一个graph、common_causes或instruments。如果未提供这些变量中的任何一个,则稍后可以使用learn_graph()。

Parameters:
  • data – 包含处理、结果和其他变量的pandas数据框。

  • treatment – 处理变量的名称

  • outcome – 结果变量的名称

  • graph – 包含DAG的DOT文件的路径或包含DAG规范的DOT格式字符串

  • common_causes – 治疗和结果的常见原因的名称。仅在图形为None时使用。

  • instruments – 用于处理对结果影响的工具变量名称。仅在图形为None时使用。

  • effect_modifiers – 可以修改治疗效果的变量名称。如果未提供,则使用因果图来查找效果修饰符。估计器将根据effect_modifiers的每个值返回多个不同的估计值。

  • estimand_type – 请求的估计类型(目前仅支持“nonparametric-ate”)。未来可能会支持其他特定的参数化识别形式。

  • proceed_when_unidentifiable – 是否通过忽略潜在未观察到的混杂因素来进行识别。二进制标志。

  • missing_nodes_as_confounders – 二进制标志,指示数据框中未包含在因果图中的变量是否应自动包含为混杂节点。

  • identify_vars – 决定在初始化类时是否计算共同原因、工具变量和效果修饰符的变量。当用户自行提供common_causes、instruments或effect modifiers时,identify_vars应设置为False(否则identify_vars代码可能会覆盖用户提供的值)。此外,如果没有提供图,则此操作没有意义。

Returns:

CausalModel 类的一个实例

do(x, identified_estimand, method_name=None, fit_estimator=True, method_params=None)[source]#

用于估计干预治疗后结果值的操作符。

Parameters:
  • x – 治疗变量的干预值

  • identified_estimand – 一个表示要估计的效果的概率表达式。CausalModel.identify_effect 方法的输出

  • method_name – 任何要使用的估计方法。有关支持的估计方法列表,请参阅 estimate_effect 方法的文档。

  • fit_estimator – 布尔标志,指示是否拟合估计器。 将其设置为False对于使用先前拟合的估计器对新数据执行do-operation非常有用。

  • method_params – 包含任何方法特定参数的字典。这些参数直接传递给估计方法。

Returns:

CausalEstimate类的一个实例,包含因果效应估计和其他依赖于方法的信息

estimate_effect(identified_estimand, method_name=None, control_value=0, treatment_value=1, test_significance=None, evaluate_effect_strength=False, confidence_intervals=False, target_units='ate', effect_modifiers=None, fit_estimator=True, method_params=None)[来源]#

估计已识别的因果效应。

目前需要明确指定方法名称。方法名称遵循识别方法后跟特定估计方法的约定:“[backdoor/iv/frontdoor].estimation_method_name”。有关支持的方法列表,请查看用户指南。以下是一些示例。

  • 倾向评分匹配: “backdoor.propensity_score_matching”

  • 倾向得分分层: “backdoor.propensity_score_stratification”

  • 基于倾向得分的逆加权:“backdoor.propensity_score_weighting”

  • 线性回归: “backdoor.linear_regression”

  • 广义线性模型(例如,逻辑回归):"backdoor.generalized_linear_model"

  • 工具变量:“iv.instrumental_variable”

  • 回归不连续性:“iv.regression_discontinuity”

  • 两阶段回归: “frontdoor.two_stage_regression”

此外,您可以直接调用任何EconML估计方法。惯例是“[backdoor/iv].econml.path-to-estimator-class”。例如,对于位于EconML的“dml”模块中的双重机器学习估计器(“DML”类),您可以使用方法名称“backdoor.econml.dml.DML”。请参阅此演示笔记本

Parameters:
  • identified_estimand – 一个表示要估计的效果的概率表达式。CausalModel.identify_effect 方法的输出

  • method_name – 要使用的估计方法的名称。

  • control_value – 对照组中的处理值,用于效果估计。如果处理是多变量的,这可以是一个列表。

  • treatment_value – 处理组中的处理值,用于效果估计。如果处理是多变量的,这可以是一个列表。

  • test_significance – 二进制标志,用于指示是否对估计值进行额外的统计显著性测试。

  • evaluate_effect_strength – (实验性) 二元标志,用于估计处理效果的相对强度。该度量可用于比较相同结果的不同处理(通过依次使用不同的处理方法运行此方法)。

  • confidence_intervals – (实验性) 二进制标志,指示是否应计算置信区间。

  • target_units – (实验性) 应该为其估计治疗效果的单元。这可以是三种类型之一。(1) 用于常见目标单元规范的字符串(即“ate”、“att”和“atc”),(2) 可以用作数据索引的lambda函数(pandas DataFrame),或(3) 一个新的DataFrame,其中包含effect_modifiers的值,并且仅针对此新数据估计效果。

  • effect_modifiers – 这里也可以(可选地)指定效果修饰变量的名称,因为它们不影响识别。如果为None,则使用CausalModel中的effect_modifiers。

  • fit_estimator – 布尔标志,指示是否拟合估计器。 将其设置为False对于使用先前拟合的估计器来估计对新数据的影响非常有用。

  • method_params – 包含任何方法特定参数的字典。这些参数直接传递给估计方法。有关允许的方法特定参数,请参阅每种估计方法的文档。

Returns:

CausalEstimate类的一个实例,包含因果效应估计和其他依赖于方法的信息

get_common_causes()[source]#
get_effect_modifiers()[source]#
get_estimator(method_name)[来源]#

检索与给定method_name匹配的现有CausalEstimator对象。

CausalEstimator 对象在 estimate_effect() 中创建并存储在缓存中以供重用。 可以为不同的方法创建不同的实例。 它们可以在不同的数据上多次重用,使用 estimate_effect(fit_estimator=False)。 这对于例如估计同一数据集的不同样本的效果非常有用。

estimate_effect()返回的CausalEstimate对象还包含一个指向用于生成它的CausalEstimator对象的引用:

effect = model.estimate_effect(…) effect.estimator # 返回拟合的CausalEstimator估计器对象

Parameters:

method_name – 要使用的估计方法的名称。

Returns:

如果存在给定方法的CausalEstimator实例,则返回该实例,否则返回None。

get_instruments()[来源]#
identify_effect(estimand_type=None, method_name='default', proceed_when_unidentifiable=None, optimize_backdoor=False)[source]#

使用因果图的属性来识别要估计的因果效应。

Parameters:
  • method_name – 用于识别算法的方法名称。(“id-algorithm” 或 “default”)

  • proceed_when_unidentifiable – 二进制标志,指示在存在(潜在)未观察到的混杂因素时是否应继续进行识别。

Returns:

如果已识别,则为因果效应的概率表达式(estimand),否则为NULL

init_graph(graph, identify_vars)[source]#

使用用户提供的图初始化 self._graph。

interpret(method_name=None, **kwargs)[source]#

解释因果模型。

Parameters:
  • method_name – 用于解释模型的方法。如果为None,则选择默认的解释器,该解释器描述模型摘要并显示相关的因果图。

  • kwargs: – 直接传递给解释器方法的可选参数。

Returns:

learn_graph(method_name='cdt.causality.graph.LiNGAM', *args, **kwargs)[source]#

从数据中学习因果图。此函数以方法名称为输入,并使用学习到的图初始化因果图对象。

Parameters:
  • self – CausalModel 类(或其子类)的实例

  • method_name – 从相关库中导入的对象的确切方法名称。

Returns:

一个用学习到的图初始化的CausalGraph类的实例。

refute_estimate(estimand, estimate, method_name=None, show_progress_bar=False, **kwargs)[来源]#

反驳一个估计的因果效应。

If method_name is provided, uses the provided method. In the future, we may support automatic selection of suitable refutation tests. Following refutation methods are supported.
  • 添加一个随机生成的混杂因素:“random_common_cause”

  • 添加一个与治疗和结果都相关的混杂因素:“add_unobserved_common_cause”

  • 用安慰剂(随机)变量替换治疗:“placebo_treatment_refuter”

  • 移除数据的随机子集:“data_subset_refuter”

Parameters:
  • estimand – 目标估计量,IdentifiedEstimand类的一个实例(通常是identify_effect的输出)

  • estimate – 需要被反驳的估计值,CausalEstimate类的一个实例(通常是estimate_effect的输出)

  • method_name – 反驳方法的名称

  • show_progress_bar – 布尔标志,用于确定是否显示进度条

  • kwargs – (可选)直接传递给反驳方法的附加参数。可以在这里指定一个随机种子以确保结果的可重复性('random_seed' 参数)。对于特定方法的参数,请查阅该方法的文档。所有反驳方法都在 causal_refuters 子包中。

Returns:

RefuteResult 类的一个实例

refute_graph(k=1, independence_test=None, independence_constraints=None)[来源]#

检查输入图中的依赖关系是否与数据集匹配 - ( X ⫫ Y ) | Z 其中 X 和 Y 目前被视为单例集 Z 可以包含多个变量 :param k: 集合 Z 中的协变量数量 :param independence_test: 包含测试数据中条件独立性方法的字典 :param independence_constraints: 用户输入的测试含义列表,格式为

[(x,y,(z1,z2)), (x,y, (z3,)) ]

: 返回: GraphRefuter 类的一个实例

summary(print_to_stdout=False)[source]#

打印模型的文本摘要。

Returns:

包含摘要的字符串

view_model(layout=None, size=(8, 6), file_name='causal_model')[source]#

查看因果DAG。

Parameters:
  • layout – 指定图形布局的字符串。

  • size – 元组 (x, y) 指定图形的宽度和高度,单位为英寸。

  • file_name – 指定保存因果图png的文件名的字符串。

Returns:

图表的可视化

dowhy.causal_refuter 模块#

class dowhy.causal_refuter.CausalRefutation(estimated_effect, new_effect, refutation_type)[source]#

基础类:object

用于存储反驳方法结果的类。

add_refuter(refuter_instance)[来源]#
add_significance_test_results(refutation_result)[来源]#
interpret(method_name=None, **kwargs)[source]#

解释反驳结果。

Parameters:

method_name – 使用的方法(字符串)或方法列表。如果为None,则使用特定反驳者的默认值。

Returns:

class dowhy.causal_refuter.CausalRefuter(data, identified_estimand, estimate, **kwargs)[来源]#

基础类:object

不同反驳方法的基类。

子类实现特定的反驳方法。

# 待办事项:在此处添加通用参数的文档字符串,并从子反驳类中移除

此类用于与CausalModel的向后兼容性 未来将被弃用,转而支持函数调用refute_method_name()函数

DEFAULT_NUM_SIMULATIONS = 100#
PROGRESS_BAR_COLOR = 'green'#
choose_variables(required_variables)[source]#
perform_bootstrap_test(estimate, simulations)[来源]#
perform_normal_distribution_test(estimate, simulations)[来源]#
refute_estimate(show_progress_bar=False)[来源]#
test_significance(estimate, simulations, test_type='auto', significance_level=0.05)[来源]#
class dowhy.causal_refuter.SignificanceTestType(value)[source]#

基础类:Enum

一个枚举。

AUTO = 'auto'#
BOOTSTRAP = 'bootstrap'#
NORMAL = 'normal_test'#
dowhy.causal_refuter.choose_variables(required_variables: bool | int | list, variables_of_interest: List)[source]#

该方法提供了一种选择混杂因子的方式,我们希望修改这些混杂因子的值,以发现其对治疗影响结果能力的影响。

dowhy.causal_refuter.perform_bootstrap_test(estimate, simulations: List)[source]#
dowhy.causal_refuter.perform_normal_distribution_test(estimate, simulations: List)[source]#
dowhy.causal_refuter.test_significance(estimate, simulations: List, test_type: SignificanceTestType = SignificanceTestType.AUTO, significance_level: float = 0.05)[source]#

测试通过反驳者生成的模拟所获得的估计的统计显著性。

当我们实际上在测试估计值时,使用反驳者的样本统计量的基础是,我们理想地期望它们遵循相同的分布。

对于反驳测试(例如,安慰剂反驳者),将零分布视为在多次模拟中使用安慰剂处理的效果估计分布,并计算真实估计(例如,安慰剂测试为零)在零下的可能性。如果真实效果估计的概率低于p值,则估计方法未通过测试。

对于敏感性分析测试(例如,bootstrap、子集或共同原因反驳者),零分布捕捉了在“真实”数据集下(例如,具有额外混杂因素或不同抽样)的效果估计分布,我们在此分布下计算获得估计的概率。如果概率低于p值,则估计方法未能通过测试。

零假设 - 估计是分布的一部分 备择假设 - 估计不在分布中。

Parameters:
  • 'estimate' – CausalEstimate 从原始数据的估计器获得的估计值。

  • 'simulations' – np.array 一个包含模拟结果的数组

  • 'test_type' – string, 默认值 ‘auto’ 用户希望执行的测试类型。

  • 'significance_level' – float, 默认值 0.05 统计检验的显著性水平

Returns:

significance_dict: Dict 一个包含 p_value 和指示结果是否具有统计显著性的布尔值的字典

dowhy.data_transformer 模块#

class dowhy.data_transformer.DimensionalityReducer(data_array, ndims, **kwargs)[源代码]#

基础类:object

reduce(target_dimensions=None)[source]#

dowhy.datasets 模块#

用于生成一些样本数据集的模块。

dowhy.datasets.choice(a, size=None, replace=True, p=None)#

从给定的一维数组中生成随机样本

版本1.7.0新增。

注意

新代码应使用~numpy.random.Generator.choice方法,而不是~numpy.random.Generator实例;请参阅random-quick-start

参数#

a1-D array-like or int

如果是一个ndarray,则从其元素中生成随机样本。 如果是一个整数,则随机样本的生成方式类似于np.arange(a)

sizeint or tuple of ints, optional

输出形状。如果给定的形状是,例如,(m, n, k),那么 m * n * k 个样本将被抽取。默认值为 None,在这种情况下 将返回单个值。

replaceboolean, optional

样本是否是有放回的。默认是True,意味着a的值可以被多次选择。

p1-D array-like, optional

与a中每个条目相关的概率。 如果未给出,则样本假定在a中的所有条目上均匀分布。

返回#

samplessingle item or ndarray

生成的随机样本

引发#

ValueError

如果a是一个整数且小于零,如果a或p不是一维的, 如果a是一个大小为0的类数组,如果p不是一个概率向量, 如果a和p的长度不同,或者如果replace=False且样本大小大于总体大小

另请参阅#

randint, shuffle, permutation random.Generator.choice: 应该在新代码中使用

注释#

通过p设置用户指定的概率使用了一种比默认更通用但效率较低的采样器。即使p的每个元素都是1 / len(a),通用采样器产生的样本也与优化采样器不同。

从二维数组中随机采样行无法通过此函数实现,但可以通过Generator.choiceaxis关键字实现。

示例#

从 np.arange(5) 中生成一个大小为 3 的均匀随机样本:

>>> np.random.choice(5, 3)
array([0, 3, 4]) # random
>>> #This is equivalent to np.random.randint(0,5,3)

从 np.arange(5) 生成一个大小为 3 的非均匀随机样本:

>>> np.random.choice(5, 3, p=[0.1, 0, 0.3, 0.6, 0])
array([3, 3, 0]) # random

从 np.arange(5) 中生成一个大小为 3 的均匀随机样本,不重复:

>>> np.random.choice(5, 3, replace=False)
array([3,1,0]) # random
>>> #This is equivalent to np.random.permutation(np.arange(5))[:3]

从 np.arange(5) 生成一个大小为 3 的非均匀随机样本,不重复:

>>> np.random.choice(5, 3, replace=False, p=[0.1, 0, 0.3, 0.6, 0])
array([2, 3, 0]) # random

上述任何操作都可以使用任意的类数组对象重复,而不仅仅是整数。例如:

>>> aa_milne_arr = ['pooh', 'rabbit', 'piglet', 'Christopher']
>>> np.random.choice(aa_milne_arr, 5, p=[0.5, 0.1, 0.1, 0.3])
array(['pooh', 'pooh', 'pooh', 'Christopher', 'piglet'], # random
      dtype='<U11')
dowhy.datasets.construct_col_names(name, num_vars, num_discrete_vars, num_discrete_levels, one_hot_encode)[source]#
dowhy.datasets.convert_continuous_to_discrete(arr)[source]#
dowhy.datasets.convert_to_binary(x, stochastic=True)[source]#
dowhy.datasets.convert_to_categorical(arr, num_vars, num_discrete_vars, quantiles=[0.25, 0.5, 0.75], one_hot_encode=False)[source]#
dowhy.datasets.create_discrete_column(num_samples, std_dev=1)[source]#
dowhy.datasets.create_dot_graph(treatments, outcome, common_causes, instruments, effect_modifiers=[], frontdoor_variables=[])[源代码]#
dowhy.datasets.create_gml_graph(treatments, outcome, common_causes, instruments, effect_modifiers=[], frontdoor_variables=[])[source]#
dowhy.datasets.dataset_from_random_graph(num_vars, num_samples=1000, prob_edge=0.3, random_seed=None, prob_type_of_data=(0.333, 0.333, 0.334))[source]#

此函数生成一个包含离散和连续类型变量的数据集。 它创建一个随机图,并根据图中的关系线性建模变量。

Parameters:
  • num_vars – 数据集中的变量数量

  • num_samples – 数据集中的样本数量

:param prob_edge : 图中两个随机节点之间存在边的概率 :param random_seed: 生成随机图的种子 :param prob_type_of_data : 包含数据为离散、二元和连续概率的3元素元组 :returns ret_dict : 包含数据框、结果、处理、图字符串以及连续、离散和二元列信息的字典

dowhy.datasets.generate_random_graph(n, max_iter=10)[source]#

生成随机有向无环图的函数 :param n: 图中的节点数量 :param max_iter: 创建图的迭代次数

Returns:

有向无环图

参见:https://datascience.oneoffcoder.com/generate-random-bbn.html

dowhy.datasets.lalonde_dataset() DataFrame[source]#

https://users.nber.org/~rdehejia/nswdata2.html下载并返回Lalonde数据集

dowhy.datasets.linear_dataset(beta, num_common_causes, num_samples, num_instruments=0, num_effect_modifiers=0, num_treatments=None, num_frontdoor_variables=0, treatment_is_binary=True, treatment_is_category=False, outcome_is_binary=False, stochastic_discretization=True, num_discrete_common_causes=0, num_discrete_instruments=0, num_discrete_effect_modifiers=0, stddev_treatment_noise=1, stddev_outcome_noise=0.01, one_hot_encode=False)[source]#

生成一个具有已知效应大小的合成数据集。

此函数生成一个包含num_samples记录的pandas数据框。变量遵循命名约定,其中第一个字母表示其在因果图中的角色,然后是序列号。

Parameters:
  • beta (int长度为 num_treatments 的 list/ndarray 类型为 int) – 结果生成方程(‘y’)中处理(‘v?’)的系数。

  • num_common_causes (int) – 影响治疗和结果的变量数量 [w -> v; w -> y]

  • num_samples (int) – 要生成的记录数量

  • num_instruments (int) – 工具变量的数量 [z -> v],默认为 0

  • num_effect_modifiers (int) – 影响修饰符的数量,即仅影响结果 [x -> y] 的变量,默认为 0

  • num_treatments – 处理变量的数量 [v]。默认情况下从 beta 参数推断。当提供时,beta 会被循环使用以匹配 num_treatments。

:type num_treatments : Union[None, int] :param num_frontdoor_variables : 前门中介变量的数量 [v -> FD -> y],默认为 0 :type num_frontdoor_variables: int :param treatment_is_binary: 如果 treatment_is_category 为 True,则不能为 True,默认为 True :type treatment_is_binary: bool :param treatment_is_category: 如果 treatment_is_binary 为 True,则不能为 True,默认为 False :type treatment_is_category: bool :param outcome_is_binary: 默认为 False, :type outcome_is_binary: bool :param stochastic_discretization: 如果为 False,则在指定离散变量时使用四分位数。它们可以进行热编码,默认为 True :type stochastic_discretization: bool :param num_discrete_common_causes: 总 num_common_causes 中的离散共同原因的数量,默认为 0 :type num_discrete_common_causes: int :param num_discrete_instruments: 总 num_instruments 中的离散工具变量的数量,默认为 0 :type num_discrete_instruments : int :param num_discrete_effect_modifiers : 总 effect_modifiers 中的离散效应修饰符的数量,默认为 0 :type num_discrete_effect_modifiers: int :param stddev_treatment_noise : 默认为 1 :type stddev_treatment_noise : float :param stddev_outcome_noise: 默认为 0.01 :type stddev_outcome_noise: float :param one_hot_encode: 默认为 False :type one_hot_encode: bool

Returns:

包含pandas数据框和一些其他元数据变量的字典。

”df”: pd.dataFrame 包含num_samples条记录。变量遵循命名约定,第一个字母表示其在因果图中的角色,然后是序列号。

v变量 - 是处理变量。它们可以是二元的或连续的。在连续的情况下,abs(beta)定义了它们的大小;

y - 是结果变量。生成方程为,

y = normal(0, stddev_outcome_noise) + t @ beta [其中@是numpy矩阵乘法,允许beta为向量]

W变量 - 通常同时影响处理变量和结果变量,并且是独立同分布的。如果是连续的,它们是Norm(mu = Unif(-1,1), sigma = 1)

Z变量 - 工具变量。每个工具变量影响所有处理变量。即如果有一个工具变量和两个处理变量,则z0->v0, z0->v1

X变量 - 效应修饰变量。如果是连续的,它们是Norm(mu = Unif(-1,1), sigma = 1)

FD变量 - 前门变量,v0->FD0->y

”treatment_name”: str/list(str) “outcome_name”: str “common_causes_names”: str/list(str) “instrument_names”: str/list(str) “effect_modifier_names”: str/list(str) “frontdoor_variables_names”: str/list(str) “dot_graph”: dot_graph, “gml_graph”: gml_graph, “ate”: float, 数据集中的真实ate

Return type:

字典

示例#

dowhy.datasets.partially_linear_dataset(beta, num_common_causes, num_unobserved_common_causes=0, strength_unobserved_confounding=1, num_samples=500, num_treatments=None, treatment_is_binary=True, treatment_is_category=False, outcome_is_binary=False, stochastic_discretization=True, num_discrete_common_causes=0, stddev_treatment_noise=1, stddev_outcome_noise=0, one_hot_encode=False, training_sample_size=10, random_state=0)[source]#
dowhy.datasets.psid_dataset() DataFrame[source]#

https://users.nber.org/~rdehejia/nswdata2.html下载并返回PSID数据集

这是由Lalonde构建的一个非实验性比较组,完全由控制观察组成。

dowhy.datasets.sales_dataset(start_date: str = '2021-01-01', end_date: str = '2021-12-31', frequency: str = 'd', num_shopping_events: int = 15, original_product_price: int = 1000, product_production_cost: int = 500, based_ad_spending: int = 1000, change_of_price: float = 1.0, change_of_demand: float = 1.25, page_visitor_factor: float = 1.0) DataFrame[source]#

基于单个产品项目创建每日销售数据集。

这与博客文章紧密相关:https://aws.amazon.com/blogs/opensource/root-cause-analysis-with-dowhy-an-open-source-python-library-for-causal-machine-learning/

Parameters:
  • start_date – 数据集的开始日期,格式为“YYYY-MM-DD”。默认值为“2021-01-01”。

  • end_date – 数据集的结束日期,格式为“YYYY-MM-DD”。默认值为“2021-12-31”。

  • frequency – 日期范围的频率。默认为“d”(每日)。

  • num_shopping_events – 特殊购物活动的数量。默认值为15。

  • original_product_price – 产品的初始价格。默认值为1000。

  • product_production_cost – 生产一个单位产品的成本。默认值为500。

  • based_ad_spending – 广告活动的基础支出。默认值为1000。

  • change_of_price – 价格变化的因子。例如,值为0.9表示价格下降10%。默认值为1.0。

  • change_of_demand – 需求随价格变化的因子。更多信息请参见 https://en.wikipedia.org/wiki/Price_elasticity_of_demand。 这会影响销售的单位数量。默认值为1.25。

  • page_visitor_factor – 用于调整页面访问次数的因子。默认值为1.0。

Returns:

一个包含与销售数据相关的列的数据框。数据集的列包括: - 购物活动?:一个二进制值,表示是否发生了特殊的购物活动。 - 广告支出:广告活动的支出。 - 页面浏览量:产品详情页的访问次数。 - 单价:设备的价格,可能会因临时折扣而有所不同。 - 销售单位:销售的单位数量。 - 收入:每日收入。 - 运营成本:每日运营费用。 - 利润:每日利润。

dowhy.datasets.sigmoid(x)[source]#
dowhy.datasets.simple_iv_dataset(beta, num_samples, num_treatments=None, treatment_is_binary=True, outcome_is_binary=False)[source]#

简单的工具变量数据集,包含一个单一的工具变量和一个单一的混杂因素。

dowhy.datasets.stochastically_convert_to_three_level_categorical(x)[source]#
dowhy.datasets.xy_dataset(num_samples, effect=True, num_common_causes=1, is_linear=True, sd_error=1)[source]#

dowhy.do_sampler 模块#

class dowhy.do_sampler.DoSampler(graph: DiGraph, action_nodes: List[str], outcome_nodes: List[str], observed_nodes: List[str], data, params=None, variable_types=None, num_cores=1, keep_original_treatment=False, estimand_type=EstimandType.NONPARAMETRIC_ATE)[source]#

基础类:object

干预分布采样器的基类。

使用数据和相关变量的名称初始化一个do采样器。

采样实现了Pearl(2000)中的do()操作。这个操作是在因果贝叶斯网络上定义的,其显式实现是MCMC采样方法的基础。

我们将三步过程背后的思想抽象化,以允许其他方法。disrupt_causes方法是使治疗分配可忽略的手段。在Pearl框架中,这是我们切断指向因果状态的边的地方。对于其他方法,这通常是通过使用一些假设条件可忽略性的方法(例如加权,或使用Robins G公式进行显式调节)来实现的。

接下来,make_treatment_effective 方法反映了我们施加的干预是“有效的”这一假设。最简单的情况下,我们将因果状态固定为某个特定值。如果因果状态没有指定值,则跳过此步骤,使用原始值代替。

最后,我们从结果分布中进行采样。这可以是从point_sample方法中采样,如果推理方法不支持批量采样,或者从sample方法中采样,如果支持。为了方便,point_sample方法使用multiprocessing进行并行化,使用num_cores kwargs来设置用于并行化的核心数量。

虽然不同的方法会有自己的类属性,但_df方法应该是所有方法共有的。这是一个临时数据集,最初是原始数据的副本,并被修改以反映do操作的步骤。阅读现有方法(加权可能是最简单的)以了解如何自己实现这一点。

Parameters:
  • data – 包含数据的 pandas.DataFrame

  • identified_estimand – dowhy.causal_identifier.IdentifiedEstimand: 使用后门方法的估计量

用于效果识别。 :param treatments: list or str: 处理变量的名称 :param outcomes: list or str: 结果变量的名称 :param variable_types: dict: 包含变量名称和类型的字典。'c' 表示连续,'o' 表示有序,'d' 表示离散,'u' 表示无序离散。 :param keep_original_treatment: bool: 是否使用 make_treatment_effective,或保留原始 处理分配。 :param params: (可选) 额外的参数

disrupt_causes()[source]#

重写此方法以有条件地忽略治疗分配 :return:

do_sample(x)[source]#
make_treatment_effective(x)[来源]#

这更可能是您希望使用的实现,但某些方法可能需要重写此方法以使治疗有效。 :param x: :return:

point_sample()[source]#
reset()[source]#

如果你的DoSampler有比_df属性更多的属性,你应该通过重写此方法将它们全部重置为初始化值。 :return:

sample()[source]#

默认情况下,这期望在类初始化时构建一个包含sample方法的采样器。如果你想使用不同的采样方法,请重写此方法。 :return:

dowhy.graph 模块#

本模块定义了与因果图相关的基本接口和函数。

class dowhy.graph.DirectedGraph(*args, **kwargs)[source]#

基础类: HasNodes, HasEdges, Protocol

一个协议,表示图形因果模型所需的有向图。

该协议专门定义了networkx.DiGraph类的一个子集,使得该类自动与DirectedGraph兼容。虽然在大多数情况下,networkx.DiGraph是构建因果图时的首选类,但任何人都可以选择提供自己的DirectGraph接口实现。

abstract predecessors(node)[source]#
class dowhy.graph.HasEdges(*args, **kwargs)[source]#

基础类:Protocol

该协议定义了具有边的类的特征。

abstract property edges#

:返回一个 Dict[Tuple[Any, Any], Dict[Any, Any]]

class dowhy.graph.HasNodes(*args, **kwargs)[source]#

基础类:Protocol

该协议定义了具有节点的类的特征。

abstract property nodes#

:返回 Dict[Any, Dict[Any, Any]]

dowhy.graph.build_graph(action_nodes: List[str], outcome_nodes: List[str], common_cause_nodes: List[str] | None = None, instrument_nodes=None, effect_modifier_nodes=None, mediator_nodes=None)[source]#

根据变量名称及其语义创建节点和边。

目前仅考虑“直接”效应修饰因子的图形表示。因此,除非使用图形明确表示,否则所有效应修饰因子均被视为“直接”的。基于VanderWheele和Robins的效应修饰因子分类:“四种效应修饰类型:基于有向无环图的分类。流行病学。2007年。”

dowhy.graph.build_graph_from_str(graph_str: str) DiGraph[source]#

用户友好的函数,根据图形字符串返回一个networkx图形。

支持的格式:dot, gml, daggity

graph_str 参数可以引用包含编码图的文本文件的路径,或者作为字符串包含实际的编码图。

Parameters:

graph_str (str) – 包含文件路径或编码图的字符串

Returns:

一个网络有向图对象

dowhy.graph.check_dseparation(graph: DiGraph, nodes1, nodes2, nodes3, new_graph=None, dseparation_algo='default')[source]#
dowhy.graph.check_valid_backdoor_set(graph: DiGraph, nodes1, nodes2, nodes3, backdoor_paths=None, new_graph: DiGraph | None = None, dseparation_algo='default')[source]#

假设第一个参数(nodes1)是处理变量, 第二个是结果变量,第三个是候选的后门集

dowhy.graph.check_valid_frontdoor_set(graph: DiGraph, nodes1, nodes2, candidate_nodes, frontdoor_paths=None, new_graph: DiGraph | None = None, dseparation_algo='default')[source]#

检查对于一组处理变量,节点1到一组结果变量,节点2的前门变量是否有效。

dowhy.graph.check_valid_mediation_set(graph: DiGraph, nodes1, nodes2, candidate_nodes, mediation_paths=None)[source]#

检查候选节点是否是从处理集 nodes1 到结果集 nodes2 的有效中介。

dowhy.graph.do_surgery(graph: DiGraph, node_names, remove_outgoing_edges=False, remove_incoming_edges=False, target_node_names=None, remove_only_direct_edges_to_target=False)[源代码]#

基于do-surgery概念创建新图的方法。

Parameters:
  • node_names – 手术的焦点节点

  • remove_outgoing_edges – 是否移除焦点节点的出边

  • remove_incoming_edges – 是否移除指向焦点节点的入边

  • target_node_names – 手术的目标节点(可选),仅在 remove_only_direct_edges_to_target 为 True 时使用

  • remove_only_direct_edges_to_target – 是否仅移除从焦点节点到目标节点的直接边

Returns:

在指定移除边之后的新networkx图

dowhy.graph.get_adjacency_matrix(graph: DiGraph, *args, **kwargs)[source]#

从networkx图中获取邻接矩阵

dowhy.graph.get_all_directed_paths(graph: DiGraph, nodes1, nodes2)[源代码]#

获取节点集之间的所有有向路径。

目前仅支持单例集合。

dowhy.graph.get_all_nodes(graph: DiGraph, observed_nodes: List[Any], include_unobserved_nodes: bool) List[Any][源代码]#
dowhy.graph.get_backdoor_paths(graph: DiGraph, nodes1, nodes2)[source]#
dowhy.graph.get_descendants(graph: DiGraph, nodes)[source]#
dowhy.graph.get_instruments(graph: DiGraph, treatment_nodes, outcome_nodes)[source]#
dowhy.graph.get_ordered_predecessors(causal_graph: DirectedGraph, node: Any) List[Any][source]#

此函数以明确定义的顺序返回节点的前驱。

这是必要的,因为我们通过使用节点的父节点来选择Dataframes中的列子集,而这些父节点可能不会以可靠的顺序返回。

dowhy.graph.has_directed_path(graph: DiGraph, action_nodes, outcome_nodes)[源代码]#

检查两组节点之间是否存在任何有向路径。

当且仅当每个处理至少有一条直接路径通向其中一个结果时,返回True。并且,每个结果至少有一条来自其中一个处理的直接路径。

dowhy.graph.is_blocked(graph: DiGraph, path, conditioned_nodes)[source]#

使用d-分离标准来判断conditioned_nodes是否阻塞给定路径。

dowhy.graph.is_root_node(causal_graph: DirectedGraph, node: Any) bool[source]#
dowhy.graph.node_connected_subgraph_view(g: DirectedGraph, node: Any) Any[source]#

返回提供的图g的一个视图,该视图仅包含与传入节点连接的节点

dowhy.graph.validate_acyclic(causal_graph: DirectedGraph) None[source]#
dowhy.graph.validate_node_in_graph(causal_graph: HasNodes, node: Any) None[source]#

dowhy.graph_learner 模块#

class dowhy.graph_learner.GraphLearner(data, library_class, *args, **kwargs)[source]#

基础类:object

因果发现方法的基类。

子类实现不同的发现方法。所有发现方法都在“dowhy.causal_discoverers”包中。

learn_graph()[源代码]#

发现因果图和DOT格式的图。

dowhy.interpreter 模块#

class dowhy.interpreter.Interpreter(instance, **kwargs)[source]#

基础类:object

所有解释方法的基类。

初始化一个解释器。

Parameters:

instance – 一个类型为 CausalModel、CausalEstimate 或 CausalRefutation 的对象。

SUPPORTED_ESTIMATORS = []#
SUPPORTED_MODELS = []#
SUPPORTED_REFUTERS = []#
interpret()[source]#

实现解释器功能的方法。

由解释器子类覆盖。

dowhy.plotter 模块#

dowhy.plotter.plot_causal_effect(estimate, treatment, outcome)[source]#
dowhy.plotter.plot_treatment_outcome(treatment, outcome, time_var)[source]#

模块内容#

class dowhy.CausalModel(data, treatment, outcome, graph=None, common_causes=None, instruments=None, effect_modifiers=None, estimand_type='nonparametric-ate', proceed_when_unidentifiable=False, missing_nodes_as_confounders=False, identify_vars=False, **kwargs)[source]#

基础类:object

用于存储因果模型状态的主类。

初始化数据并创建因果图实例。

分配处理和结果变量。 同时检查并找到处理和结果的共同原因和工具。

必须提供至少一个graph、common_causes或instruments。如果未提供这些变量中的任何一个,则稍后可以使用learn_graph()。

Parameters:
  • data – 包含处理、结果和其他变量的pandas数据框。

  • treatment – 处理变量的名称

  • outcome – 结果变量的名称

  • graph – 包含DAG的DOT文件的路径或包含DAG规范的DOT格式字符串

  • common_causes – 治疗和结果的常见原因的名称。仅在图形为None时使用。

  • instruments – 用于处理对结果影响的工具变量名称。仅在图形为None时使用。

  • effect_modifiers – 可以修改治疗效果的变量名称。如果未提供,则使用因果图来查找效果修饰符。估计器将根据effect_modifiers的每个值返回多个不同的估计值。

  • estimand_type – 请求的估计类型(目前仅支持“nonparametric-ate”)。未来可能会支持其他特定的参数化识别形式。

  • proceed_when_unidentifiable – 是否通过忽略潜在未观察到的混杂因素来进行识别。二进制标志。

  • missing_nodes_as_confounders – 二进制标志,指示数据框中未包含在因果图中的变量是否应自动包含为混杂节点。

  • identify_vars – 决定在初始化类时是否计算共同原因、工具变量和效果修饰符的变量。当用户自行提供common_causes、instruments或effect modifiers时,identify_vars应设置为False(否则identify_vars代码可能会覆盖用户提供的值)。此外,如果没有提供图,则此操作没有意义。

Returns:

CausalModel 类的一个实例

do(x, identified_estimand, method_name=None, fit_estimator=True, method_params=None)[source]#

用于估计干预治疗后结果值的操作符。

Parameters:
  • x – 治疗变量的干预值

  • identified_estimand – 一个表示要估计的效果的概率表达式。CausalModel.identify_effect 方法的输出

  • method_name – 任何要使用的估计方法。有关支持的估计方法列表,请参阅 estimate_effect 方法的文档。

  • fit_estimator – 布尔标志,指示是否拟合估计器。 将其设置为False对于使用先前拟合的估计器对新数据执行do-operation非常有用。

  • method_params – 包含任何方法特定参数的字典。这些参数直接传递给估计方法。

Returns:

CausalEstimate类的一个实例,包含因果效应估计和其他依赖于方法的信息

estimate_effect(identified_estimand, method_name=None, control_value=0, treatment_value=1, test_significance=None, evaluate_effect_strength=False, confidence_intervals=False, target_units='ate', effect_modifiers=None, fit_estimator=True, method_params=None)[来源]#

估计已识别的因果效应。

目前需要明确指定方法名称。方法名称遵循识别方法后跟特定估计方法的约定:“[backdoor/iv/frontdoor].estimation_method_name”。有关支持的方法列表,请查看用户指南。以下是一些示例。

  • 倾向评分匹配: “backdoor.propensity_score_matching”

  • 倾向得分分层: “backdoor.propensity_score_stratification”

  • 基于倾向得分的逆加权:“backdoor.propensity_score_weighting”

  • 线性回归: “backdoor.linear_regression”

  • 广义线性模型(例如,逻辑回归):"backdoor.generalized_linear_model"

  • 工具变量:“iv.instrumental_variable”

  • 回归不连续性:“iv.regression_discontinuity”

  • 两阶段回归: “frontdoor.two_stage_regression”

此外,您可以直接调用任何EconML估计方法。惯例是“[backdoor/iv].econml.path-to-estimator-class”。例如,对于位于EconML的“dml”模块中的双重机器学习估计器(“DML”类),您可以使用方法名称“backdoor.econml.dml.DML”。请参阅此演示笔记本

Parameters:
  • identified_estimand – 一个表示要估计的效果的概率表达式。CausalModel.identify_effect 方法的输出

  • method_name – 要使用的估计方法的名称。

  • control_value – 对照组中的处理值,用于效果估计。如果处理是多变量的,这可以是一个列表。

  • treatment_value – 处理组中的处理值,用于效果估计。如果处理是多变量的,这可以是一个列表。

  • test_significance – 二进制标志,用于指示是否对估计值进行额外的统计显著性测试。

  • evaluate_effect_strength – (实验性) 二元标志,用于估计处理效果的相对强度。该度量可用于比较相同结果的不同处理(通过依次使用不同的处理方法运行此方法)。

  • confidence_intervals – (实验性) 二进制标志,指示是否应计算置信区间。

  • target_units – (实验性) 应该为其估计治疗效果的单元。这可以是三种类型之一。(1) 用于常见目标单元规范的字符串(即“ate”、“att”和“atc”),(2) 可以用作数据索引的lambda函数(pandas DataFrame),或(3) 一个新的DataFrame,其中包含effect_modifiers的值,并且仅针对此新数据估计效果。

  • effect_modifiers – 这里也可以(可选地)指定效果修饰变量的名称,因为它们不影响识别。如果为None,则使用CausalModel中的effect_modifiers。

  • fit_estimator – 布尔标志,指示是否拟合估计器。 将其设置为False对于使用先前拟合的估计器来估计对新数据的影响非常有用。

  • method_params – 包含任何方法特定参数的字典。这些参数直接传递给估计方法。有关允许的方法特定参数,请参阅每种估计方法的文档。

Returns:

CausalEstimate类的一个实例,包含因果效应估计和其他依赖于方法的信息

get_common_causes()[source]#
get_effect_modifiers()[source]#
get_estimator(method_name)[来源]#

检索与给定method_name匹配的现有CausalEstimator对象。

CausalEstimator 对象在 estimate_effect() 中创建并存储在缓存中以供重用。 可以为不同的方法创建不同的实例。 它们可以在不同的数据上多次重用,使用 estimate_effect(fit_estimator=False)。 这对于例如估计同一数据集的不同样本的效果非常有用。

estimate_effect()返回的CausalEstimate对象还包含一个指向用于生成它的CausalEstimator对象的引用:

effect = model.estimate_effect(…) effect.estimator # 返回拟合的CausalEstimator估计器对象

Parameters:

method_name – 要使用的估计方法的名称。

Returns:

如果存在给定方法的CausalEstimator实例,则返回该实例,否则返回None。

get_instruments()[来源]#
identify_effect(estimand_type=None, method_name='default', proceed_when_unidentifiable=None, optimize_backdoor=False)[source]#

使用因果图的属性来识别要估计的因果效应。

Parameters:
  • method_name – 用于识别算法的方法名称。(“id-algorithm” 或 “default”)

  • proceed_when_unidentifiable – 二进制标志,指示在存在(潜在)未观察到的混杂因素时是否应继续进行识别。

Returns:

如果已识别,则为因果效应的概率表达式(estimand),否则为NULL

init_graph(graph, identify_vars)[source]#

使用用户提供的图初始化 self._graph。

interpret(method_name=None, **kwargs)[source]#

解释因果模型。

Parameters:
  • method_name – 用于解释模型的方法。如果为None,则选择默认的解释器,该解释器描述模型摘要并显示相关的因果图。

  • kwargs: – 直接传递给解释器方法的可选参数。

Returns:

learn_graph(method_name='cdt.causality.graph.LiNGAM', *args, **kwargs)[source]#

从数据中学习因果图。此函数以方法名称为输入,并使用学习到的图初始化因果图对象。

Parameters:
  • self – CausalModel 类(或其子类)的实例

  • method_name – 从相关库中导入的对象的确切方法名称。

Returns:

一个用学习到的图初始化的CausalGraph类的实例。

refute_estimate(estimand, estimate, method_name=None, show_progress_bar=False, **kwargs)[来源]#

反驳一个估计的因果效应。

If method_name is provided, uses the provided method. In the future, we may support automatic selection of suitable refutation tests. Following refutation methods are supported.
  • 添加一个随机生成的混杂因素:“random_common_cause”

  • 添加一个与治疗和结果都相关的混杂因素:“add_unobserved_common_cause”

  • 用安慰剂(随机)变量替换治疗:“placebo_treatment_refuter”

  • 移除数据的随机子集:“data_subset_refuter”

Parameters:
  • estimand – 目标估计量,IdentifiedEstimand类的一个实例(通常是identify_effect的输出)

  • estimate – 需要被反驳的估计值,CausalEstimate类的一个实例(通常是estimate_effect的输出)

  • method_name – 反驳方法的名称

  • show_progress_bar – 布尔标志,用于确定是否显示进度条

  • kwargs – (可选)直接传递给反驳方法的附加参数。可以在这里指定一个随机种子以确保结果的可重复性('random_seed' 参数)。对于特定方法的参数,请查阅该方法的文档。所有反驳方法都在 causal_refuters 子包中。

Returns:

RefuteResult 类的一个实例

refute_graph(k=1, independence_test=None, independence_constraints=None)[来源]#

检查输入图中的依赖关系是否与数据集匹配 - ( X ⫫ Y ) | Z 其中 X 和 Y 目前被视为单例集 Z 可以包含多个变量 :param k: 集合 Z 中的协变量数量 :param independence_test: 包含测试数据中条件独立性方法的字典 :param independence_constraints: 用户输入的测试含义列表,格式为

[(x,y,(z1,z2)), (x,y, (z3,)) ]

: 返回: GraphRefuter 类的一个实例

summary(print_to_stdout=False)[source]#

打印模型的文本摘要。

Returns:

包含摘要的字符串

view_model(layout=None, size=(8, 6), file_name='causal_model')[source]#

查看因果DAG。

Parameters:
  • layout – 指定图形布局的字符串。

  • size – 元组 (x, y) 指定图形的宽度和高度,单位为英寸。

  • file_name – 指定保存因果图png的文件名的字符串。

Returns:

图表的可视化

class dowhy.EstimandType(value)[source]#

基础类:Enum

一个枚举。

NONPARAMETRIC_ATE = 'nonparametric-ate'#
NONPARAMETRIC_CDE = 'nonparametric-cde'#
NONPARAMETRIC_NDE = 'nonparametric-nde'#
NONPARAMETRIC_NIE = 'nonparametric-nie'#
dowhy.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.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.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类的一个实例。