dowhy 软件包#
子软件包#
- dowhy.api 软件包
- dowhy.causal_estimators 软件包
- 子模块
- dowhy.causal_estimators.causalml 模块
- dowhy.causal_estimators.distance_matching_estimator 模块
- dowhy.causal_estimators.econml 模块
- dowhy.causal_estimators.generalized_linear_model_estimator 模块
- dowhy.causal_estimators.instrumental_variable_estimator 模块
- dowhy.causal_estimators.linear_regression_estimator 模块
- dowhy.causal_estimators.propensity_score_estimator 模块
- dowhy.causal_estimators.propensity_score_matching_estimator 模块
- dowhy.causal_estimators.propensity_score_stratification_estimator 模块
- dowhy.causal_estimators.propensity_score_weighting_estimator 模块
- dowhy.causal_estimators.regression_discontinuity_estimator 模块
- dowhy.causal_estimators.regression_estimator 模块
- dowhy.causal_estimators.two_stage_regression_estimator 模块
TwoStageRegressionEstimator
TwoStageRegressionEstimator.DEFAULT_FIRST_STAGE_MODEL
TwoStageRegressionEstimator.DEFAULT_SECOND_STAGE_MODEL
TwoStageRegressionEstimator.build_first_stage_features()
TwoStageRegressionEstimator.construct_symbolic_estimator()
TwoStageRegressionEstimator.estimate_effect()
TwoStageRegressionEstimator.fit()
- 模块内容
- dowhy.causal_identifier 软件包
- 子模块
- dowhy.causal_identifier.auto_identifier 模块
AutoIdentifier
BackdoorAdjustment
EstimandType
build_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 模块
- dowhy.causal_identifier.efficient_backdoor 模块
EfficientBackdoor
EfficientBackdoor.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 模块
- dowhy.causal_identifier.identified_estimand 模块
- dowhy.causal_identifier.identify_effect 模块
- 模块内容
- dowhy.causal_prediction 软件包
- dowhy.causal_refuters 软件包
- 子软件包
- 子模块
- dowhy.causal_refuters.add_unobserved_common_cause 模块
- dowhy.causal_refuters.assess_overlap 模块
- dowhy.causal_refuters.assess_overlap_overrule 模块
- dowhy.causal_refuters.bootstrap_refuter 模块
- dowhy.causal_refuters.data_subset_refuter 模块
- dowhy.causal_refuters.dummy_outcome_refuter 模块
- dowhy.causal_refuters.evalue_sensitivity_analyzer 模块
- dowhy.causal_refuters.graph_refuter 模块
- dowhy.causal_refuters.linear_sensitivity_analyzer 模块
LinearSensitivityAnalyzer
LinearSensitivityAnalyzer.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 模块
- dowhy.causal_refuters.partial_linear_sensitivity_analyzer 模块
PartialLinearSensitivityAnalyzer
PartialLinearSensitivityAnalyzer.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 模块
- dowhy.causal_refuters.random_common_cause 模块
- dowhy.causal_refuters.refute_estimate 模块
- dowhy.causal_refuters.reisz 模块
- 模块内容
AddUnobservedCommonCause
BootstrapRefuter
DataSubsetRefuter
DummyOutcomeRefuter
PlaceboTreatmentRefuter
RandomCommonCause
refute_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 软件包
- dowhy.gcm 软件包
- 子软件包
- 子模块
- dowhy.gcm.anomaly 模块
- dowhy.gcm.anomaly_scorer 模块
- dowhy.gcm.anomaly_scorers 模块
- dowhy.gcm.auto 模块
- dowhy.gcm.causal_mechanisms 模块
- dowhy.gcm.causal_models 模块
- dowhy.gcm.confidence_intervals 模块
- dowhy.gcm.confidence_intervals_cms 模块
- dowhy.gcm.config 模块
- dowhy.gcm.constant 模块
- dowhy.gcm.density_estimator 模块
- dowhy.gcm.density_estimators 模块
- dowhy.gcm.distribution_change 模块
- dowhy.gcm.divergence 模块
- dowhy.gcm.falsify 模块
EvaluationResult
FalsifyConst
FalsifyConst.F_GIVEN_VIOLATIONS
FalsifyConst.F_PERM_VIOLATIONS
FalsifyConst.GIVEN_VIOLATIONS
FalsifyConst.LOCAL_VIOLATION_INSIGHT
FalsifyConst.MEC
FalsifyConst.METHOD
FalsifyConst.N_TESTS
FalsifyConst.N_VIOLATIONS
FalsifyConst.PERM_GRAPHS
FalsifyConst.PERM_VIOLATIONS
FalsifyConst.P_VALUE
FalsifyConst.P_VALUES
FalsifyConst.VALIDATE_CM
FalsifyConst.VALIDATE_LMC
FalsifyConst.VALIDATE_PD
FalsifyConst.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 模块
- dowhy.gcm.fitting_sampling 模块
- dowhy.gcm.influence 模块
- dowhy.gcm.model_evaluation 模块
- dowhy.gcm.shapley 模块
- dowhy.gcm.stats 模块
- dowhy.gcm.stochastic_models 模块
- dowhy.gcm.uncertainty 模块
- dowhy.gcm.unit_change 模块
- dowhy.gcm.validation 模块
- dowhy.gcm.whatif 模块
- 模块内容
- dowhy.graph_learners 软件包
- dowhy.interpreters 软件包
- dowhy.utils 软件包
子模块#
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)[source]#
基类:
object
表示每个因果效应估计器返回的估计结果对象
- estimate_conditional_effects(effect_modifiers=None, num_quantiles=5)[source]#
估计在给定变量条件下的处理效应。
如果提供了数值型的效应修正因子,它将被离散化为分位数箱。如果您想要自定义离散化,可以自行完成:创建一个包含离散化后的效应修正因子的新列,然后将该列的名称包含在 effect_modifier_names 参数中。
- 参数:
effect_modifiers – 要估计条件效应的效应修正因子变量的名称。如果未提供,则默认为创建 CausalEstimator 对象时指定的效应修正因子。
num_quantiles – 将数值型效应修正因子变量离散化为的分位数数量。不影响任何分类型效应修正因子。
- 返回:
一个(多索引)DataFrame,为(离散化后的)效应修正因子的每个值提供单独的效应估计。
- get_confidence_intervals(confidence_level=None, method=None, **kwargs)[source]#
获取获得的估计结果的置信区间。
默认情况下,这是通过自举(bootstrap)置信区间完成的,但如果特定的估计器实现了其他估计置信区间的方法,则可以覆盖此行为。
如果提供的方法不是自举(bootstrap),此函数将调用特定估计器的实现方法。
- 参数:
method – 估计置信区间的方法。
confidence_level – 估计结果置信区间的置信水平。
kwargs – 要传递给置信区间方法的其他可选参数。
- 返回:
获得的置信区间。
- get_standard_error(method=None, **kwargs)[source]#
获取获得的估计结果的标准误。
默认情况下,这是通过自举(bootstrap)标准误完成的,但如果特定的估计器实现了其他估计标准误的方法,则可以覆盖此行为。
如果提供的方法不是自举(bootstrap),此函数将调用特定估计器的实现方法。
- 参数:
method – 计算标准误的方法。
kwargs – 要传递给估计方法的其他可选参数。
- 返回:
因果估计的标准误。
- class dowhy.causal_estimator.CausalEstimator(identified_estimand: IdentifiedEstimand, test_significance: bool | str = False, evaluate_effect_strength: bool = False, confidence_intervals: bool | str = 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”软件包中
使用数据和相关变量的名称初始化估计器。
此方法在其子类的构造函数中调用。
- 参数:
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 – (可选)其他估计器特定参数
- 返回:
估计器类的实例。
- 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 运算符的方法。
给定处理变量的值 x,返回当处理变量被干预设置为值 x 时结果变量的期望值。
- 参数:
x – 处理变量的值
data_df – 应用 do 运算符的数据。
- 返回:
当处理变量被干预/设置为 x 时结果变量的值。
- estimate_confidence_intervals(data: DataFrame, estimate_value, confidence_level=None, method=None, **kwargs)[source]#
找到对应于任何估计器的置信区间。默认情况下,这是通过自举(bootstrap)置信区间完成的,但如果特定的估计器实现了其他估计置信区间的方法,则可以覆盖此行为。
如果提供的方法不是自举(bootstrap),此函数将调用特定估计器的实现方法。
- 参数:
estimate_value – 获得的估计值
method – 估计置信区间的方法。
confidence_level – 估计结果置信区间的置信水平。
kwargs – 要传递给置信区间方法的其他可选参数。
- 返回:
获得的置信区间。
- estimate_std_error(data: DataFrame, method=None, **kwargs)[source]#
计算获得的因果估计结果的标准误。
- 参数:
method – 计算标准误的方法。
kwargs – 要传递给估计方法的其他可选参数。
- 返回:
因果估计的标准误。
- get_new_estimator_object(identified_estimand, test_significance=False, evaluate_effect_strength=False, confidence_intervals=None)[source]#
创建与 estimate 参数中传递的估计器类型相同的新估计器对象。
使用 identified_estimand 创建新对象
- 参数:
identified_estimand – IdentifiedEstimand 可识别估计量类的一个实例,提供有关在处理影响结果时采用因果路径的信息
- 返回:
生成给定估计结果的同一估计器类的新实例。
- static is_bootstrap_parameter_changed(bootstrap_estimates_params, given_params)[source]#
检查自举的参数是否已更改。
这是一个效率方法,用于检查是否需要重新采样自举样本。如果参数已更改并应再次进行重采样,则返回 True。
- 参数:
bootstrap_estimates_params – 当前自举样本的参数字典
given_params – 用户传递的参数字典
- 返回:
表示参数是否不同的布尔标志。
- reset_encoders()[source]#
删除对任何数据编码器的引用,使其在下次 fit() 时重新创建。
重要的是数据必须一致编码,否则模型会产生不一致的输出。特别是,分类变量是进行独热编码的;原始数据值的映射在模型训练/拟合和推理时必须完全相同。
当再次调用 fit() 时,编码器会被重置,因为数据被认为是已经更改。
每个变量子集(处理、共同原因和效应修正因子)都使用单独的编码器。
- class dowhy.causal_estimator.RealizedEstimand(identified_estimand, estimator_name)[source]#
基类:
object
- 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 估计器也可以被调用。参见此演示笔记本。
- 参数:
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 – 也可以在此处(可选)指定效应修正因子变量的名称,因为它们不影响识别。如果为 None,则使用 CausalModel 中的效应修正因子。
fit_estimator – 布尔标志,指示是否拟合估计器。将其设置为 False 在使用先前拟合的估计器在新数据上估计效应时很有用。
- 返回:
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 DiGraph 对象、
ProbabilisticCausalModel <dowhy.gcm.ProbabilisticCausalModel
对象、gml 格式(首选)或 dot 格式的图字符串(或文本文件)。可以为边和节点设置类似 Graphviz 的属性。例如,将 style=”dashed” 作为边属性,确保边绘制成虚线。如果未提供图字符串,则可以提供干预变量、结果变量、混杂因子、工具变量和效应修正变量(如果有)的名称来创建图。
- build_graph(common_cause_names, instrument_names, effect_modifier_names, mediator_names)[源代码]#
根据变量名称及其语义创建节点和边。
目前仅考虑“直接”效应修正变量的图形表示。因此,所有效应修正变量都被假定为“直接”的,除非通过图另有表达。基于 VanderWheele 和 Robins 的效应修正变量分类:“四种效应修正类型:基于有向无环图的分类。Epidemiology. 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')[源代码]#
检查候选节点集是否对于从干预变量集 nodes1 到结果变量集 nodes2 是有效前门变量。
- check_valid_mediation_set(nodes1, nodes2, candidate_nodes, mediation_paths=None)[源代码]#
检查候选节点是否对于从干预变量集 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)[源代码]#
基于 do-干预(do-surgery)概念创建新图的方法。
- 参数:
node_names – 干预的焦点节点
remove_outgoing_edges – 是否移除焦点节点的出边
remove_incoming_edges – 是否移除焦点节点的入边
target_node_names – 干预的可选目标节点,仅当 remove_only_direct_edges_to_target 为 True 时使用
remove_only_direct_edges_to_target – 是否仅移除从焦点节点到目标节点的直接边
- 返回:
移除指定边后的新 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)[源代码]#
基类:
object
用于存储因果模型状态的主类。
初始化数据并创建因果图实例。
分配干预变量和结果变量。同时检查并查找干预变量和结果变量的共同原因和工具变量。
必须至少提供 graph、common_causes 或 instruments 中的一个。如果未提供这些变量,则稍后可以使用 learn_graph()。
- 参数:
data – 包含干预、结果及其他变量的 pandas 数据框。
treatment – 干预变量的名称
outcome – 结果变量的名称
graph – 包含 DAG 的 DOT 文件路径或 DOT 格式的 DAG 规范字符串
common_causes – 干预变量和结果变量的共同原因名称。仅当 graph 为 None 时使用。
instruments – 干预变量对结果变量的效应的工具变量名称。仅当 graph 为 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 代码可能会覆盖用户提供的值)。如果未提供图,此参数也无意义。
- 返回:
CausalModel 类的一个实例
- do(x, identified_estimand, method_name=None, fit_estimator=True, method_params=None)[源代码]#
do 算子,用于估计对干预变量进行干预后的结果变量的值。
- 参数:
x – 干预变量的干预值
identified_estimand – 表示要估计的效应的概率表达式。CausalModel.identify_effect 方法的输出
method_name – 要使用的任何估计方法名称。支持的估计方法列表请参见 estimate_effect 方法的文档。
fit_estimator – 是否拟合估计器的布尔标记。将其设置为 False 对于使用之前拟合的估计器计算新数据上的 do 运算很有用。
method_params – 包含任何特定于方法的参数的字典。这些参数直接传递给估计方法。
- 返回:
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”。支持方法的列表请查阅用户指南。以下是一些示例。
倾向评分匹配 (Propensity Score Matching): “backdoor.propensity_score_matching”
倾向评分分层 (Propensity Score Stratification): “backdoor.propensity_score_stratification”
基于倾向评分的逆权重法 (Propensity Score-based Inverse Weighting): “backdoor.propensity_score_weighting”
线性回归 (Linear Regression): “backdoor.linear_regression”
广义线性模型 (Generalized Linear Models)(例如,Logistic 回归): “backdoor.generalized_linear_model”
工具变量法 (Instrumental Variables): “iv.instrumental_variable”
回归不连续性 (Regression Discontinuity): “iv.regression_discontinuity”
两阶段回归 (Two Stage Regression): “frontdoor.two_stage_regression”
此外,您可以直接调用任何 EconML 估计方法。惯例是 “[backdoor/iv].econml.path-to-estimator-class”。例如,对于位于 EconML 的“dml”模块中的双重机器学习估计器(“DML”类),您可以使用方法名称 “backdoor.econml.dml.DML”。参见此演示笔记本。
- 参数:
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 – 也可以在此处(可选)指定效应修正因子变量的名称,因为它们不影响识别。如果为 None,则使用 CausalModel 中的效应修正因子。
fit_estimator – 布尔标志,指示是否拟合估计器。将其设置为 False 在使用先前拟合的估计器在新数据上估计效应时很有用。
method_params – 包含任何特定于方法的参数的字典。这些参数直接传递给估计方法。有关允许的特定于方法的参数,请查阅每种估计方法的文档。
- 返回:
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 估计器对象
- 参数:
method_name – 要使用的估计方法的名称。
- 返回:
给定方法的 CausalEstimator 实例(如果存在),否则为 None。
- identify_effect(estimand_type=None, method_name='default', proceed_when_unidentifiable=None, optimize_backdoor=False)[源代码]#
利用因果图的属性,识别需要估计的因果效应。
- 参数:
method_name – 识别算法的方法名称。(“id-algorithm”或“default”)
proceed_when_unidentifiable – 布尔标记,指示在存在(潜在的)未观测混杂因子时是否应继续进行识别。
- 返回:
如果识别成功,则返回因果效应的概率表达式(可估计量),否则返回 NULL
- interpret(method_name=None, **kwargs)[源代码]#
解释因果模型。
- 参数:
method_name – 用于解释模型的方法。如果为 None,则选择默认解释器,它会描述模型摘要并显示相关的因果图。
kwargs: – 直接传递给解释器方法的可选参数。
- 返回:
None
- learn_graph(method_name='cdt.causality.graph.LiNGAM', *args, **kwargs)[源代码]#
从数据中学习因果图。此函数接受方法名称作为输入,并使用学习到的图初始化因果图对象。
- 参数:
self – CausalModel 类(或其子类)的实例
method_name – 要从相关库导入的对象的精确方法名称。
- 返回:
使用学习到的图初始化的 CausalGraph 类的一个实例。
- refute_estimate(estimand, estimate, method_name=None, show_progress_bar=False, **kwargs)[源代码]#
反驳估计的因果效应。
- 如果提供了 method_name,则使用提供的方法。将来,我们可能会支持自动选择合适的反驳检验。支持以下反驳方法。
添加随机生成的混杂因子:“random_common_cause”
添加与干预变量和结果变量相关的混杂因子:“add_unobserved_common_cause”
用安慰剂(随机)变量替换干预变量:“placebo_treatment_refuter”
移除数据的随机子集:“data_subset_refuter”
- 参数:
estimand – 目标可估计量,IdentifiedEstimand 类的一个实例(通常是 identify_effect 的输出)
estimate – 要反驳的估计值,CausalEstimate 类的一个实例(通常是 estimate_effect 的输出)
method_name – 反驳方法的名称
show_progress_bar – 是否显示进度条的布尔标记
kwargs – (可选)直接传递给反驳方法的附加参数。可以在此处指定随机种子以确保结果可复现(‘random_seed’ 参数)。有关特定于方法的参数,请查阅具体方法的文档。所有反驳方法都在 causal_refuters 子包中。
- 返回:
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)[源代码]#
基类:
object
用于存储反驳方法结果的类。
- class dowhy.causal_refuter.CausalRefuter(data, identified_estimand, estimate, **kwargs)[源代码]#
基类:
object
不同反驳方法的基类。
子类实现具体的反驳方法。
# TODO: 在此处添加通用参数的文档字符串,并从子反驳器类中移除
此类用于与 CausalModel 的向后兼容。将来将被 refute_method_name() 函数调用取代并弃用。
- DEFAULT_NUM_SIMULATIONS = 100#
- PROGRESS_BAR_COLOR = 'green'#
- class dowhy.causal_refuter.SignificanceTestType(value)[源代码]#
基类:
Enum
一个枚举类。
- AUTO = 'auto'#
- BOOTSTRAP = 'bootstrap'#
- NORMAL = 'normal_test'#
- dowhy.causal_refuter.choose_variables(required_variables: bool | int | list, variables_of_interest: List)[源代码]#
此方法提供了一种选择混杂因子的方式,我们可以修改其值来查找其对干预变量影响结果能力的效应。
- dowhy.causal_refuter.test_significance(estimate, simulations: List, test_type: SignificanceTestType = SignificanceTestType.AUTO, significance_level: float =0.05)[源代码]#
检验通过反驳器生成的模拟结果与获得的估计值之间的统计学显著性。
在实际检验估计值时使用反驳器样本统计量背后的依据是,我们理想情况下期望它们遵循相同的分布。
对于反驳检验(例如,安慰剂反驳器),将零分布视为在多次安慰剂干预模拟中效应估计值的分布,并计算在零假设下真实估计值(例如,安慰剂检验中为零)的可能性。如果真实效应估计值的概率低于 p 值,则估计方法未通过检验。
对于敏感性分析检验(例如,Bootstrap、子集或共同原因反驳器),零分布捕获了在“真实”数据集(例如,包含额外混杂因子或不同采样)下效应估计值的分布,我们计算在此分布下获得估计值的概率。如果概率低于 p 值,则估计方法未通过检验。
零假设 - 估计值是分布的一部分。备择假设 - 估计值不属于该分布。
- 参数:
'estimate' – CausalEstimate 从原始数据估计器获得的估计值。
'simulations' – np.array 包含反驳器模拟结果的数组
'test_type' – string, default ‘auto’ 用户希望执行的检验类型。
'significance_level' – float, default 0.05 统计学检验的显著性水平
- 返回:
significance_dict: Dict 一个字典,包含 p 值和一个布尔值,指示结果是否具有统计学显著性
dowhy.data_transformer 模块#
dowhy.datasets 模块#
用于生成一些样本数据集的模块。
- dowhy.datasets.choice(a, size=None, replace=True, p=None)#
从给定的一维数组生成随机样本
1.7.0 版本新增。
注意
新代码应改用 ~numpy.random.Generator 实例的 ~numpy.random.Generator.choice 方法;请参阅随机快速入门。
参数#
- a1-D 数组类对象或 int
如果是 ndarray,则从其元素生成随机样本。如果是 int,则生成的随机样本如同来自
np.arange(a)
- sizeint 或整数元组,可选
输出形状。例如,如果给定形状为
(m, n, k)
,则抽取m * n * k
个样本。默认值为 None,此时返回单个值。- replace布尔值,可选
样本是否进行替换。默认值为 True,表示
a
的值可以多次选中。- p1-D 数组类对象,可选
与 a 中每个条目相关的概率。如果未给出,则假定样本在
a
中的所有条目上呈均匀分布。
返回#
- samples单个项或 ndarray
生成的随机样本
抛出异常#
- ValueError
如果 a 是 int 且小于零,如果 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)[源代码]#
- dowhy.datasets.convert_to_categorical(arr, num_vars, num_discrete_vars, quantiles=[0.25, 0.5, 0.75], one_hot_encode=False)[源代码]#
- 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=[])[源代码]#
- 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))[源代码]#
此函数生成包含离散和连续变量的数据集。它创建一个随机图,并根据图中的关系对变量进行线性建模。
- 参数:
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)[源代码]#
生成随机有向无环图的函数 :param n: 图中的节点数量 :param max_iter: 创建图的迭代次数
- 返回:
有向无环图
参见: https://datascience.oneoffcoder.com/generate-random-bbn.html
- dowhy.datasets.lalonde_dataset() DataFrame [源代码]#
下载并返回 Lalonde 数据集,来自 https://users.nber.org/~rdehejia/nswdata2.html
- 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)[源代码]#
生成一个具有已知效应大小的合成数据集。
此函数生成一个包含 num_samples 条记录的 pandas dataFrame。变量遵循命名约定,其中第一个字母表示其在因果关系图中的作用,后跟一个序列号。
- 参数:
beta (int or list/ndarray of length num_treatments of type 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
- 返回:
- 包含 pandas dataFrame 和其他一些元数据变量的字典。
”df”: 包含 num_samples 条记录的 pd.dataFrame。变量遵循命名约定,其中第一个字母表示其在因果关系图中的作用,后跟一个序列号。
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
- 返回类型:
dict
示例#
- 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)[源代码]#
- dowhy.datasets.psid_dataset() DataFrame [源代码]#
下载并返回 PSID 数据集,来自 https://users.nber.org/~rdehejia/nswdata2.html
这是 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 [源代码]#
创建一个基于单一产品的日销售数据集。
- 参数:
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。
- 返回:
包含与销售数据相关的列的数据框。数据集的列包括: - Shopping Event?:指示是否发生特殊购物事件的二元值。 - Ad Spend:广告活动支出。 - Page Views:产品详情页的访问次数。 - Unit Price:设备价格,可能因临时折扣而有所不同。 - Sold Units:销售单位数量。 - Revenue:每日收入。 - Operational Cost:每日运营成本。 - Profit:每日利润。
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)[源代码]#
基类:
object
干预分布采样器的基类。
使用数据和相关变量名称初始化 do 采样器。
Do 采样实现了 Pearl (2000) 的 do() 操作。这是在因果贝叶斯网络上定义的操作,其显式实现是 MCMC 采样方法的基础。
我们将三步过程背后的思想抽象出来,以允许使用其他方法。disrupt_causes 方法是使处理分配可忽略的手段。在 Pearl 的框架中,这是我们切断指向因果状态的边的地方。对于其他方法,通常会使用一些假设条件可忽略性的方法(例如加权,或使用 Robins G-公式进行显式条件化)。
接下来,make_treatment_effective 方法反映了我们施加的干预是“有效”的假设。最简单地,我们将因果状态固定为某个特定值。如果未指定因果状态的值,并且使用原始值,则会跳过此步骤。
最后,我们从结果分布中进行采样。这可以来自不支持批量采样的推理方法的 point_sample 方法,或者支持批量采样的 sample 方法。为了方便起见,point_sample 方法使用 multiprocessing 并行化,使用 num_cores kwargs 设置用于并行化的核心数量。
虽然不同的方法有自己的类属性,但 _df 方法应为所有方法共有。这是一个临时数据集,它始于原始数据的副本,并被修改以反映 do 操作的步骤。请阅读现有方法(加权可能是最简单的)以了解如何自行实现。
- 参数:
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: (可选) 额外的 method 参数
用于效果识别。 :param treatments: list 或 str: 干预变量的名称 :param outcomes: list 或 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)[源代码]#
Bases:
HasNodes
,HasEdges
,Protocol
一个表示图形因果模型所需有向图的协议。
此协议专门定义了 networkx.DiGraph 类的一个子集,这使得该类与 DirectedGraph 自动兼容。虽然在大多数情况下,networkx.DiGraph 是构建因果图的首选类,但任何人都可以选择提供自己的 DirectGraph 接口实现。
- class dowhy.graph.HasEdges(*args, **kwargs)[源代码]#
Bases:
Protocol
此协议定义了具有边的类的特性。
- abstract property edges#
:returns 一个 Dict[Tuple[Any, Any], Dict[Any, Any]]
- class dowhy.graph.HasNodes(*args, **kwargs)[源代码]#
Bases:
Protocol
此协议定义了具有节点的类的特性。
- abstract property nodes#
:returns 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)[源代码]#
根据变量名称及其语义创建节点和边。
目前仅考虑“直接”效应修正变量的图形表示。因此,所有效应修正变量都被假定为“直接”的,除非通过图另有表达。基于 VanderWheele 和 Robins 的效应修正变量分类:“四种效应修正类型:基于有向无环图的分类。Epidemiology. 2007.”
- dowhy.graph.build_graph_from_str(graph_str: str) DiGraph [源代码]#
一个用户友好的函数,根据图字符串返回 networkx 图。
支持的格式:dot, gml, daggity
参数 graph_str 可以是包含编码图的文本文件的路径,也可以是作为字符串的实际编码图。
- 参数:
graph_str (str) – 包含文件路径或编码图的字符串
- 返回:
一个 networkx 有向图对象
- dowhy.graph.check_dseparation(graph: DiGraph, nodes1, nodes2, nodes3, new_graph=None, dseparation_algo='default')[源代码]#
- dowhy.graph.check_valid_backdoor_set(graph: DiGraph, nodes1, nodes2, nodes3, backdoor_paths=None, new_graph: DiGraph | None = None, dseparation_algo='default')[源代码]#
假设第一个参数 (nodes1) 是干预变量,第二个是结果变量,第三个是候选后门集
- dowhy.graph.check_valid_frontdoor_set(graph: DiGraph, nodes1, nodes2, candidate_nodes, frontdoor_paths=None, new_graph: DiGraph | None = None, dseparation_algo='default')[源代码]#
检查候选节点集是否对于从干预变量集 nodes1 到结果变量集 nodes2 是有效前门变量。
- dowhy.graph.check_valid_mediation_set(graph: DiGraph, nodes1, nodes2, candidate_nodes, mediation_paths=None)[源代码]#
检查候选节点是否对于从干预变量集 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-干预(do-surgery)概念创建新图的方法。
- 参数:
node_names – 干预的焦点节点
remove_outgoing_edges – 是否移除焦点节点的出边
remove_incoming_edges – 是否移除焦点节点的入边
target_node_names – 干预的可选目标节点,仅当 remove_only_direct_edges_to_target 为 True 时使用
remove_only_direct_edges_to_target – 是否仅移除从焦点节点到目标节点的直接边
- 返回:
移除指定边后的新 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] [源代码]#
此函数以明确定义的顺序返回节点的先行节点。
这是必要的,因为我们通过使用节点的父节点来选择 Dataframe 中的列子集,而这些父节点可能不会以可靠的顺序返回。
- dowhy.graph.has_directed_path(graph: DiGraph, action_nodes, outcome_nodes)[源代码]#
检查两组节点之间是否存在任何有向路径。
当且仅当每个干预变量至少有一条直接路径通往一个结果变量,并且每个结果变量至少有一条直接路径来自一个干预变量时,返回 True。
- dowhy.graph.is_blocked(graph: DiGraph, path, conditioned_nodes)[源代码]#
使用 d-分离准则来判断 conditioned_nodes 是否阻塞给定路径。
- dowhy.graph.is_root_node(causal_graph: DirectedGraph, node: Any) bool [源代码]#
- dowhy.graph.node_connected_subgraph_view(g: DirectedGraph, node: Any) Any [源代码]#
返回所提供的图 g 的视图,该视图仅包含与传入节点相连的节点
- dowhy.graph.validate_acyclic(causal_graph: DirectedGraph) None [源代码]#
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)[源代码]#
基类:
object
用于存储因果模型状态的主类。
初始化数据并创建因果图实例。
分配干预变量和结果变量。同时检查并查找干预变量和结果变量的共同原因和工具变量。
必须至少提供 graph、common_causes 或 instruments 中的一个。如果未提供这些变量,则稍后可以使用 learn_graph()。
- 参数:
data – 包含干预、结果及其他变量的 pandas 数据框。
treatment – 干预变量的名称
outcome – 结果变量的名称
graph – 包含 DAG 的 DOT 文件路径或 DOT 格式的 DAG 规范字符串
common_causes – 干预变量和结果变量的共同原因名称。仅当 graph 为 None 时使用。
instruments – 干预变量对结果变量的效应的工具变量名称。仅当 graph 为 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 代码可能会覆盖用户提供的值)。如果未提供图,此参数也无意义。
- 返回:
CausalModel 类的一个实例
- do(x, identified_estimand, method_name=None, fit_estimator=True, method_params=None)[源代码]#
do 算子,用于估计对干预变量进行干预后的结果变量的值。
- 参数:
x – 干预变量的干预值
identified_estimand – 表示要估计的效应的概率表达式。CausalModel.identify_effect 方法的输出
method_name – 要使用的任何估计方法名称。支持的估计方法列表请参见 estimate_effect 方法的文档。
fit_estimator – 是否拟合估计器的布尔标记。将其设置为 False 对于使用之前拟合的估计器计算新数据上的 do 运算很有用。
method_params – 包含任何特定于方法的参数的字典。这些参数直接传递给估计方法。
- 返回:
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”。支持方法的列表请查阅用户指南。以下是一些示例。
倾向评分匹配 (Propensity Score Matching): “backdoor.propensity_score_matching”
倾向评分分层 (Propensity Score Stratification): “backdoor.propensity_score_stratification”
基于倾向评分的逆权重法 (Propensity Score-based Inverse Weighting): “backdoor.propensity_score_weighting”
线性回归 (Linear Regression): “backdoor.linear_regression”
广义线性模型 (Generalized Linear Models)(例如,Logistic 回归): “backdoor.generalized_linear_model”
工具变量法 (Instrumental Variables): “iv.instrumental_variable”
回归不连续性 (Regression Discontinuity): “iv.regression_discontinuity”
两阶段回归 (Two Stage Regression): “frontdoor.two_stage_regression”
此外,您可以直接调用任何 EconML 估计方法。惯例是 “[backdoor/iv].econml.path-to-estimator-class”。例如,对于位于 EconML 的“dml”模块中的双重机器学习估计器(“DML”类),您可以使用方法名称 “backdoor.econml.dml.DML”。参见此演示笔记本。
- 参数:
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 – 也可以在此处(可选)指定效应修正因子变量的名称,因为它们不影响识别。如果为 None,则使用 CausalModel 中的效应修正因子。
fit_estimator – 布尔标志,指示是否拟合估计器。将其设置为 False 在使用先前拟合的估计器在新数据上估计效应时很有用。
method_params – 包含任何特定于方法的参数的字典。这些参数直接传递给估计方法。有关允许的特定于方法的参数,请查阅每种估计方法的文档。
- 返回:
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 估计器对象
- 参数:
method_name – 要使用的估计方法的名称。
- 返回:
给定方法的 CausalEstimator 实例(如果存在),否则为 None。
- identify_effect(estimand_type=None, method_name='default', proceed_when_unidentifiable=None, optimize_backdoor=False)[源代码]#
利用因果图的属性,识别需要估计的因果效应。
- 参数:
method_name – 识别算法的方法名称。(“id-algorithm”或“default”)
proceed_when_unidentifiable – 布尔标记,指示在存在(潜在的)未观测混杂因子时是否应继续进行识别。
- 返回:
如果识别成功,则返回因果效应的概率表达式(可估计量),否则返回 NULL
- interpret(method_name=None, **kwargs)[source]#
解释因果模型。
- 参数:
method_name – 用于解释模型的方法。如果为 None,则选择默认解释器,它会描述模型摘要并显示相关的因果图。
kwargs: – 直接传递给解释器方法的可选参数。
- 返回:
None
- learn_graph(method_name='cdt.causality.graph.LiNGAM', *args, **kwargs)[source]#
从数据中学习因果图。此函数接受方法名称作为输入,并使用学习到的图初始化因果图对象。
- 参数:
self – CausalModel 类(或其子类)的实例
method_name – 要从相关库导入的对象的精确方法名称。
- 返回:
使用学习到的图初始化的 CausalGraph 类的一个实例。
- refute_estimate(estimand, estimate, method_name=None, show_progress_bar=False, **kwargs)[source]#
反驳估计的因果效应。
- 如果提供了 method_name,则使用提供的方法。将来,我们可能会支持自动选择合适的反驳检验。支持以下反驳方法。
添加随机生成的混杂因子:“random_common_cause”
添加与干预变量和结果变量相关的混杂因子:“add_unobserved_common_cause”
用安慰剂(随机)变量替换干预变量:“placebo_treatment_refuter”
移除数据的随机子集:“data_subset_refuter”
- 参数:
estimand – 目标可估计量,IdentifiedEstimand 类的一个实例(通常是 identify_effect 的输出)
estimate – 要反驳的估计值,CausalEstimate 类的一个实例(通常是 estimate_effect 的输出)
method_name – 反驳方法的名称
show_progress_bar – 是否显示进度条的布尔标记
kwargs – (可选)直接传递给反驳方法的附加参数。可以在此处指定随机种子以确保结果可复现(‘random_seed’ 参数)。有关特定于方法的参数,请查阅具体方法的文档。所有反驳方法都在 causal_refuters 子包中。
- 返回:
RefuteResult 类的一个实例
- refute_graph(k=1, independence_test=None, independence_constraints=None)[source]#
检查输入图中的依赖关系是否与数据集匹配 - ( 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 [source]#
根据因果图识别待估计的因果效果
- 参数:
graph – 待分析的因果图
treatment – 干预名称
outcome – 结果名称
- 返回:
如果识别成功,则返回因果效应的概率表达式(可估计量),否则返回 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,则使用后门、工具变量和前门识别方法,根据因果图检查是否存在已识别的估计量。
- 参数:
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 页提供。
- 参数:
treatment_names – 包含干预变量名称的 OrderedSet。
:param outcome_names: 包含结果变量名称的 OrderedSet。
- 返回:
目标估计量,IDExpression 类的一个实例。