dowhy 包#
子包#
- dowhy.api 包
- dowhy.causal_estimators package
- Submodules
- dowhy.causal_estimators.causalml module
- dowhy.causal_estimators.distance_matching_estimator module
- dowhy.causal_estimators.econml module
- dowhy.causal_estimators.generalized_linear_model_estimator module
- dowhy.causal_estimators.instrumental_variable_estimator module
- dowhy.causal_estimators.linear_regression_estimator module
- dowhy.causal_estimators.propensity_score_estimator module
- dowhy.causal_estimators.propensity_score_matching_estimator module
- dowhy.causal_estimators.propensity_score_stratification_estimator module
- dowhy.causal_estimators.propensity_score_weighting_estimator module
- dowhy.causal_estimators.regression_discontinuity_estimator module
- dowhy.causal_estimators.regression_estimator module
- dowhy.causal_estimators.two_stage_regression_estimator module
TwoStageRegressionEstimatorTwoStageRegressionEstimator.DEFAULT_FIRST_STAGE_MODELTwoStageRegressionEstimator.DEFAULT_SECOND_STAGE_MODELTwoStageRegressionEstimator.build_first_stage_features()TwoStageRegressionEstimator.construct_symbolic_estimator()TwoStageRegressionEstimator.estimate_effect()TwoStageRegressionEstimator.fit()
- Module contents
- dowhy.causal_identifier package
- Submodules
- dowhy.causal_identifier.auto_identifier module
AutoIdentifierBackdoorAdjustmentEstimandTypebuild_backdoor_estimands_dict()construct_backdoor_estimand()construct_frontdoor_estimand()construct_iv_estimand()construct_mediation_estimand()find_valid_adjustment_sets()get_default_backdoor_set_id()identify_ate_effect()identify_backdoor()identify_cde_effect()identify_effect_auto()identify_efficient_backdoor()identify_frontdoor()identify_mediation()identify_mediation_first_stage_confounders()identify_mediation_second_stage_confounders()identify_nde_effect()identify_nie_effect()
- dowhy.causal_identifier.backdoor module
- dowhy.causal_identifier.efficient_backdoor module
EfficientBackdoorEfficientBackdoor.ancestors_all()EfficientBackdoor.backdoor_graph()EfficientBackdoor.build_D()EfficientBackdoor.build_H0()EfficientBackdoor.build_H1()EfficientBackdoor.causal_vertices()EfficientBackdoor.compute_smallest_mincut()EfficientBackdoor.forbidden()EfficientBackdoor.h_operator()EfficientBackdoor.ignore()EfficientBackdoor.optimal_adj_set()EfficientBackdoor.optimal_mincost_adj_set()EfficientBackdoor.optimal_minimal_adj_set()EfficientBackdoor.unblocked()
- dowhy.causal_identifier.id_identifier module
- dowhy.causal_identifier.identified_estimand module
- dowhy.causal_identifier.identify_effect module
- Module contents
- dowhy.causal_prediction package
- dowhy.causal_refuters package
- Subpackages
- Submodules
- dowhy.causal_refuters.add_unobserved_common_cause module
- dowhy.causal_refuters.assess_overlap module
- dowhy.causal_refuters.assess_overlap_overrule module
- dowhy.causal_refuters.bootstrap_refuter module
- dowhy.causal_refuters.data_subset_refuter module
- dowhy.causal_refuters.dummy_outcome_refuter module
- dowhy.causal_refuters.evalue_sensitivity_analyzer module
- dowhy.causal_refuters.graph_refuter module
- dowhy.causal_refuters.linear_sensitivity_analyzer module
LinearSensitivityAnalyzerLinearSensitivityAnalyzer.check_sensitivity()LinearSensitivityAnalyzer.compute_bias_adjusted()LinearSensitivityAnalyzer.partial_r2_func()LinearSensitivityAnalyzer.plot()LinearSensitivityAnalyzer.plot_estimate()LinearSensitivityAnalyzer.plot_t()LinearSensitivityAnalyzer.robustness_value_func()LinearSensitivityAnalyzer.treatment_regression()
- dowhy.causal_refuters.non_parametric_sensitivity_analyzer module
- dowhy.causal_refuters.partial_linear_sensitivity_analyzer module
PartialLinearSensitivityAnalyzerPartialLinearSensitivityAnalyzer.calculate_robustness_value()PartialLinearSensitivityAnalyzer.check_sensitivity()PartialLinearSensitivityAnalyzer.compute_r2diff_benchmarking_covariates()PartialLinearSensitivityAnalyzer.get_confidence_levels()PartialLinearSensitivityAnalyzer.get_phi_lower_upper()PartialLinearSensitivityAnalyzer.get_regression_r2()PartialLinearSensitivityAnalyzer.is_benchmarking_needed()PartialLinearSensitivityAnalyzer.perform_benchmarking()PartialLinearSensitivityAnalyzer.plot()
- dowhy.causal_refuters.placebo_treatment_refuter module
- dowhy.causal_refuters.random_common_cause module
- dowhy.causal_refuters.refute_estimate module
- dowhy.causal_refuters.reisz module
- Module contents
AddUnobservedCommonCauseBootstrapRefuterDataSubsetRefuterDummyOutcomeRefuterPlaceboTreatmentRefuterRandomCommonCauserefute_bootstrap()refute_data_subset()refute_dummy_outcome()refute_estimate()refute_placebo_treatment()refute_random_common_cause()sensitivity_e_value()sensitivity_simulation()
- dowhy.data_transformers 包
- dowhy.do_samplers package
- dowhy.gcm package
- Subpackages
- Submodules
- dowhy.gcm.anomaly module
- dowhy.gcm.anomaly_scorer module
- dowhy.gcm.anomaly_scorers module
- dowhy.gcm.auto module
- dowhy.gcm.causal_mechanisms module
- dowhy.gcm.causal_models module
- dowhy.gcm.confidence_intervals module
- dowhy.gcm.confidence_intervals_cms module
- dowhy.gcm.config module
- dowhy.gcm.constant module
- dowhy.gcm.density_estimator module
- dowhy.gcm.density_estimators module
- dowhy.gcm.distribution_change module
- dowhy.gcm.divergence module
- dowhy.gcm.falsify module
EvaluationResultFalsifyConstFalsifyConst.F_GIVEN_VIOLATIONSFalsifyConst.F_PERM_VIOLATIONSFalsifyConst.GIVEN_VIOLATIONSFalsifyConst.LOCAL_VIOLATION_INSIGHTFalsifyConst.MECFalsifyConst.METHODFalsifyConst.N_TESTSFalsifyConst.N_VIOLATIONSFalsifyConst.PERM_GRAPHSFalsifyConst.PERM_VIOLATIONSFalsifyConst.P_VALUEFalsifyConst.P_VALUESFalsifyConst.VALIDATE_CMFalsifyConst.VALIDATE_LMCFalsifyConst.VALIDATE_PDFalsifyConst.VALIDATE_TPA
apply_suggestions()falsify_graph()plot_evaluation_results()plot_local_insights()run_validations()validate_cm()validate_lmc()validate_pd()validate_tpa()
- dowhy.gcm.feature_relevance module
- dowhy.gcm.fitting_sampling module
- dowhy.gcm.influence module
- dowhy.gcm.model_evaluation module
- dowhy.gcm.shapley module
- dowhy.gcm.stats module
- dowhy.gcm.stochastic_models module
- dowhy.gcm.uncertainty module
- dowhy.gcm.unit_change module
- dowhy.gcm.validation module
- dowhy.gcm.whatif module
- Module contents
- dowhy.graph_learners package
- dowhy.interpreters package
- dowhy.utils package
- Submodules
- dowhy.utils.api module
- dowhy.utils.cit module
- dowhy.utils.cli_helpers module
- dowhy.utils.dgp module
- dowhy.utils.graph_operations module
- dowhy.utils.graphviz_plotting module
- dowhy.utils.networkx_plotting module
- dowhy.utils.ordered_set module
- dowhy.utils.plotting module
- dowhy.utils.propensity_score module
- dowhy.utils.regression module
- Module contents
子模块#
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用于每个因果估计器返回的估计对象的类
- 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:
因果估计的标准误差。
- 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__'#
- 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_std_error(data: DataFrame, method=None, **kwargs)[来源]#
计算获得的因果估计的标准误差。
- Parameters:
method – 计算标准误差的方法。
kwargs – 传递给估算方法的其他可选参数。
- Returns:
因果估计的标准误差。
- 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()时,编码器会被重置,因为假设数据已经发生了变化。
为每个变量子集(处理、共同原因和效果修饰符)使用单独的编码器。
- 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”作为边属性可以确保边以虚线绘制。如果没有提供图形字符串,可以提供治疗、结果、混杂因素、工具变量和效应修饰符(如果有的话)的名称来创建图形。
- build_graph(common_cause_names, instrument_names, effect_modifier_names, mediator_names)[source]#
根据变量名称及其语义创建节点和边。
目前仅考虑“直接”效应修饰因子的图形表示。因此,除非使用图形明确表示,否则所有效应修饰因子均被视为“直接”的。基于VanderWheele和Robins的效应修饰因子分类:“四种效应修饰类型:基于有向无环图的分类。流行病学。2007年。”
- 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图
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_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。
- 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
- 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 类的一个实例
dowhy.causal_refuter 模块#
- class dowhy.causal_refuter.CausalRefutation(estimated_effect, new_effect, refutation_type)[source]#
基础类:
object用于存储反驳方法结果的类。
- class dowhy.causal_refuter.CausalRefuter(data, identified_estimand, estimate, **kwargs)[来源]#
基础类:
object不同反驳方法的基类。
子类实现特定的反驳方法。
# 待办事项:在此处添加通用参数的文档字符串,并从子反驳类中移除
此类用于与CausalModel的向后兼容性 未来将被弃用,转而支持函数调用refute_method_name()函数
- DEFAULT_NUM_SIMULATIONS = 100#
- PROGRESS_BAR_COLOR = 'green'#
- 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.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 模块#
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.choice的
axis关键字实现。示例#
从 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_to_categorical(arr, num_vars, num_discrete_vars, quantiles=[0.25, 0.5, 0.75], one_hot_encode=False)[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]#
基于单个产品项目创建每日销售数据集。
- 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.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: (可选) 额外的参数
dowhy.graph 模块#
本模块定义了与因果图相关的基本接口和函数。
- class dowhy.graph.DirectedGraph(*args, **kwargs)[source]#
基础类:
HasNodes,HasEdges,Protocol一个协议,表示图形因果模型所需的有向图。
该协议专门定义了networkx.DiGraph类的一个子集,使得该类自动与DirectedGraph兼容。虽然在大多数情况下,networkx.DiGraph是构建因果图时的首选类,但任何人都可以选择提供自己的DirectGraph接口实现。
- 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_all_nodes(graph: DiGraph, observed_nodes: List[Any], include_unobserved_nodes: bool) List[Any][源代码]#
- 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_learner 模块#
dowhy.interpreter 模块#
dowhy.plotter 模块#
模块内容#
- 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_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。
- 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
- 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 类的一个实例
- 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类的一个实例。