Getting started with DoWhy: A simple example

https://www.pywhy.org/dowhy/v0.8/example_notebooks/dowhy_simple_example.html

!pip install git+https://github.com/microsoft/dowhy.git

import numpy as np

import pandas as pd

from dowhy import CausalModel

import dowhy.datasets

# Avoid printing dataconversion warnings from sklearn and numpy

import warnings

from sklearn.exceptions import DataConversionWarning

warnings.filterwarnings(action='ignore', category=DataConversionWarning)

warnings.filterwarnings(action='ignore', category=FutureWarning)

# Config dict to set the logging level

import logging

import logging.config

DEFAULT_LOGGING = {

    'version': 1,

    'disable_existing_loggers': False,

    'loggers': {

        '': {

            'level': 'WARN',

        },

    }

}


logging.config.dictConfig(DEFAULT_LOGGING)

logging.info("Getting started with DoWhy. Running notebook...")

data = dowhy.datasets.linear_dataset(beta=10,

        num_common_causes=5,

        num_instruments = 2,

        num_effect_modifiers=1,

        num_samples=5000,

        treatment_is_binary=True,

        stddev_treatment_noise=10,

        num_discrete_common_causes=1)

df = data["df"]

print(df.head())

print(data["dot_graph"])

print("\n")

print(data["gml_graph"])

# With graph

model=CausalModel(

        data = df,

        treatment=data["treatment_name"],

        outcome=data["outcome_name"],

        graph=data["gml_graph"]

        )

model.view_model()

from IPython.display import Image, display

display(Image(filename="causal_model.png"))

identified_estimand = model.identify_effect(proceed_when_unidentifiable=True)

print(identified_estimand)

causal_estimate = model.estimate_effect(identified_estimand,

        method_name="backdoor.propensity_score_stratification")

print(causal_estimate)

print("Causal Estimate is " + str(causal_estimate.value))

# Causal effect on the control group (ATC)

causal_estimate_att = model.estimate_effect(identified_estimand,

        method_name="backdoor.propensity_score_stratification",

        target_units = "atc")

print(causal_estimate_att)

print("Causal Estimate is " + str(causal_estimate_att.value))

# Without graph

model= CausalModel(

        data=df,

        treatment=data["treatment_name"],

        outcome=data["outcome_name"],

        common_causes=data["common_causes_names"],

        effect_modifiers=data["effect_modifier_names"])

model.view_model()

from IPython.display import Image, display

display(Image(filename="causal_model.png"))

identified_estimand = model.identify_effect(proceed_when_unidentifiable=True)

estimate = model.estimate_effect(identified_estimand,

                                 method_name="backdoor.propensity_score_stratification")

print(estimate)

print("Causal Estimate is " + str(estimate.value))

res_random=model.refute_estimate(identified_estimand, estimate, method_name="random_common_cause")

print(res_random)

res_placebo=model.refute_estimate(identified_estimand, estimate,

        method_name="placebo_treatment_refuter", placebo_type="permute")

print(res_placebo)

res_subset=model.refute_estimate(identified_estimand, estimate,

        method_name="data_subset_refuter", subset_fraction=0.9)

print(res_subset)

res_subset=model.refute_estimate(identified_estimand, estimate,

        method_name="data_subset_refuter", subset_fraction=0.9, random_seed = 1)

print(res_subset)

res_unobserved=model.refute_estimate(identified_estimand, estimate, method_name="add_unobserved_common_cause",

                                     confounders_effect_on_treatment="binary_flip", confounders_effect_on_outcome="linear",

                                    effect_strength_on_treatment=0.01, effect_strength_on_outcome=0.02)

print(res_unobserved)

res_unobserved_range=model.refute_estimate(identified_estimand, estimate, method_name="add_unobserved_common_cause",

                                     confounders_effect_on_treatment="binary_flip", confounders_effect_on_outcome="linear",

                                    effect_strength_on_treatment=np.array([0.001, 0.005, 0.01, 0.02]), effect_strength_on_outcome=0.01)

print(res_unobserved_range)

res_unobserved_range=model.refute_estimate(identified_estimand, estimate, method_name="add_unobserved_common_cause",

                                           confounders_effect_on_treatment="binary_flip", confounders_effect_on_outcome="linear",

                                           effect_strength_on_treatment=[0.001, 0.005, 0.01, 0.02],

                                           effect_strength_on_outcome=[0.001, 0.005, 0.01,0.02])

print(res_unobserved_range)

res_unobserved_auto = model.refute_estimate(identified_estimand, estimate, method_name="add_unobserved_common_cause",

                                         


confounders_effect_on_treatment="binary_flip", confounders_effect_on_outcome="linear")


print(res_unobserved_auto)

留言

這個網誌中的熱門文章

可轉移性、普遍性、代表性和外部有效性

頻率學派 vs 貝氏學派

貝氏分析計算器