{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": [],
      "gpuType": "T4"
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "z8ujVsdduOYO",
        "outputId": "fd1667cc-bf4b-4d22-cdee-0f11511dc3ab"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "  Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n",
            "  Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n",
            "  Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m62.0/62.0 kB\u001b[0m \u001b[31m3.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m193.0/193.0 kB\u001b[0m \u001b[31m9.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.2/1.2 MB\u001b[0m \u001b[31m43.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m37.3/37.3 MB\u001b[0m \u001b[31m20.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25h  Building wheel for dowhy (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n"
          ]
        }
      ],
      "source": [
        "!pip install git+https://github.com/microsoft/dowhy.git -q"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "import numpy as np\n",
        "import pandas as pd\n",
        "from dowhy import CausalModel\n",
        "import dowhy.datasets\n",
        "import statsmodels.api as sm"
      ],
      "metadata": {
        "id": "QxLY6iptuQeP"
      },
      "execution_count": 2,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "np.random.seed(42)\n"
      ],
      "metadata": {
        "id": "EZDWJMNjuQhA"
      },
      "execution_count": 3,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "data_dict = dowhy.datasets.linear_dataset(\n",
        "    beta=2,\n",
        "    num_common_causes=2,\n",
        "    num_discrete_common_causes=1,\n",
        "    num_instruments=1,\n",
        "    num_samples=5000,\n",
        "    treatment_is_binary=True\n",
        ")\n",
        "\n",
        "data_df = data_dict[\"df\"]\n",
        "\n"
      ],
      "metadata": {
        "id": "lxLwFtGquQjt"
      },
      "execution_count": 4,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "causal_graph = \"\"\"\n",
        "digraph {\n",
        "    Treatment -> Outcome;\n",
        "    Confounder1 -> Treatment;\n",
        "    Confounder2 -> Treatment;\n",
        "    Instrument1 -> Treatment;\n",
        "    Confounder1 -> Outcome;\n",
        "    Confounder2 -> Outcome;\n",
        "}\n",
        "\"\"\"\n",
        "\n",
        "causal_model = CausalModel(\n",
        "    data=data_df,\n",
        "    treatment=data_dict[\"treatment_name\"],\n",
        "    outcome=data_dict[\"outcome_name\"],\n",
        "    graph=data_dict[\"gml_graph\"]\n",
        ")\n"
      ],
      "metadata": {
        "id": "IoCjnoz7uQmP"
      },
      "execution_count": 5,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "X = sm.add_constant(data_df[data_dict[\"treatment_name\"]].astype(float))\n",
        "Y = data_df[data_dict[\"outcome_name\"]].astype(float)\n",
        "ols_model = sm.OLS(Y, X).fit()\n",
        "print(ols_model.summary().tables[1])"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "8Y6T1fyDugU4",
        "outputId": "0d401f94-55e0-4480-eff6-1b1e5b88c4a1"
      },
      "execution_count": 6,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "==============================================================================\n",
            "                 coef    std err          t      P>|t|      [0.025      0.975]\n",
            "------------------------------------------------------------------------------\n",
            "const         -0.1626      0.022     -7.472      0.000      -0.205      -0.120\n",
            "v0             2.0819      0.027     78.483      0.000       2.030       2.134\n",
            "==============================================================================\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "identified_estimand = causal_model.identify_effect()\n",
        "print(identified_estimand)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Eb_K3fyyugXY",
        "outputId": "09b06817-8b5c-440b-f400-bfd5da0b5b6b"
      },
      "execution_count": 7,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Estimand type: EstimandType.NONPARAMETRIC_ATE\n",
            "\n",
            "### Estimand : 1\n",
            "Estimand name: backdoor\n",
            "Estimand expression:\n",
            "  d              \n",
            "─────(E[y|W1,W0])\n",
            "d[v₀]            \n",
            "Estimand assumption 1, Unconfoundedness: If U→{v0} and U→y then P(y|v0,W1,W0,U) = P(y|v0,W1,W0)\n",
            "\n",
            "### Estimand : 2\n",
            "Estimand name: iv\n",
            "Estimand expression:\n",
            " ⎡                      -1⎤\n",
            " ⎢  d      ⎛  d        ⎞  ⎥\n",
            "E⎢─────(y)⋅⎜─────([v₀])⎟  ⎥\n",
            " ⎣d[Z₀]    ⎝d[Z₀]      ⎠  ⎦\n",
            "Estimand assumption 1, As-if-random: If U→→y then ¬(U →→{Z0})\n",
            "Estimand assumption 2, Exclusion: If we remove {Z0}→{v0}, then ¬({Z0}→y)\n",
            "\n",
            "### Estimand : 3\n",
            "Estimand name: frontdoor\n",
            "No such variable(s) found!\n",
            "\n",
            "### Estimand : 4\n",
            "Estimand name: general_adjustment\n",
            "Estimand expression:\n",
            "  d              \n",
            "─────(E[y|W1,W0])\n",
            "d[v₀]            \n",
            "Estimand assumption 1, Unconfoundedness: If U→{v0} and U→y then P(y|v0,W1,W0,U) = P(y|v0,W1,W0)\n",
            "\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "causal_estimate = causal_model.estimate_effect(\n",
        "    identified_estimand,\n",
        "    method_name=\"backdoor.propensity_score_weighting\"\n",
        ")\n",
        "print(causal_estimate)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "7viK0Ju-unJS",
        "outputId": "cd33493b-4127-4b34-846a-7a15160770d7"
      },
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "*** Causal Estimate ***\n",
            "\n",
            "## Identified estimand\n",
            "Estimand type: EstimandType.NONPARAMETRIC_ATE\n",
            "\n",
            "### Estimand : 1\n",
            "Estimand name: backdoor\n",
            "Estimand expression:\n",
            "  d              \n",
            "─────(E[y|W1,W0])\n",
            "d[v₀]            \n",
            "Estimand assumption 1, Unconfoundedness: If U→{v0} and U→y then P(y|v0,W1,W0,U) = P(y|v0,W1,W0)\n",
            "\n",
            "## Realized estimand\n",
            "b: y~v0+W1+W0\n",
            "Target units: ate\n",
            "\n",
            "## Estimate\n",
            "Mean value: 2.0006810477949495\n",
            "\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "refutation_test = causal_model.refute_estimate(\n",
        "    identified_estimand,\n",
        "    causal_estimate,\n",
        "    method_name=\"add_unobserved_common_cause\"\n",
        ")\n",
        "print(refutation_test)\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 730
        },
        "id": "cjPVR_xXunMG",
        "outputId": "508885f6-ad77-47e7-cca9-1d194e784bc4"
      },
      "execution_count": 9,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/usr/local/lib/python3.12/dist-packages/sklearn/utils/validation.py:1408: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n",
            "  y = column_or_1d(y, warn=True)\n",
            "/usr/local/lib/python3.12/dist-packages/numpy/_core/fromnumeric.py:3800: FutureWarning: The behavior of DataFrame.std with axis=None is deprecated, in a future version this will reduce over both axes and return a scalar. To retain the old behavior, pass axis=0 (or do not pass axis)\n",
            "  return std(axis=axis, dtype=dtype, out=out, ddof=ddof, **kwargs)\n",
            "/usr/local/lib/python3.12/dist-packages/dowhy/causal_refuters/add_unobserved_common_cause.py:321: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n",
            "  std_dev_y = np.std(y)[0]\n",
            "/usr/local/lib/python3.12/dist-packages/dowhy/causal_refuters/add_unobserved_common_cause.py:366: FutureWarning: Setting an item of incompatible dtype is deprecated and will raise an error in a future version of pandas. Value '[]' has dtype incompatible with bool, please explicitly cast to a compatible dtype first.\n",
            "  new_data.loc[rel_interval <= w_random, treatment_name] = (\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 600x500 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Refute: Add an Unobserved Common Cause\n",
            "Estimated effect:2.0006810477949495\n",
            "New effect:(np.float64(1.983823755030339), np.float64(2.0445949294510606))\n",
            "\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "iv_estimate = causal_model.estimate_effect(\n",
        "    identified_estimand,\n",
        "    method_name=\"iv.instrumental_variable\"\n",
        ")\n",
        "print(iv_estimate)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "2XlptnikunO-",
        "outputId": "39765215-3635-4b5a-be92-373e5bc5d530"
      },
      "execution_count": 10,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "*** Causal Estimate ***\n",
            "\n",
            "## Identified estimand\n",
            "Estimand type: EstimandType.NONPARAMETRIC_ATE\n",
            "\n",
            "### Estimand : 1\n",
            "Estimand name: iv\n",
            "Estimand expression:\n",
            " ⎡                      -1⎤\n",
            " ⎢  d      ⎛  d        ⎞  ⎥\n",
            "E⎢─────(y)⋅⎜─────([v₀])⎟  ⎥\n",
            " ⎣d[Z₀]    ⎝d[Z₀]      ⎠  ⎦\n",
            "Estimand assumption 1, As-if-random: If U→→y then ¬(U →→{Z0})\n",
            "Estimand assumption 2, Exclusion: If we remove {Z0}→{v0}, then ¬({Z0}→y)\n",
            "\n",
            "## Realized estimand\n",
            "Realized estimand: Wald Estimator\n",
            "Realized estimand type: EstimandType.NONPARAMETRIC_ATE\n",
            "Estimand expression:\n",
            " ⎡ d    ⎤ \n",
            "E⎢───(y)⎥ \n",
            " ⎣dZ₀   ⎦ \n",
            "──────────\n",
            " ⎡ d     ⎤\n",
            "E⎢───(v₀)⎥\n",
            " ⎣dZ₀    ⎦\n",
            "Estimand assumption 1, As-if-random: If U→→y then ¬(U →→{Z0})\n",
            "Estimand assumption 2, Exclusion: If we remove {Z0}→{v0}, then ¬({Z0}→y)\n",
            "Estimand assumption 3, treatment_effect_homogeneity: Each unit's treatment ['v0'] is affected in the same way by common causes of ['v0'] and ['y']\n",
            "Estimand assumption 4, outcome_effect_homogeneity: Each unit's outcome ['y'] is affected in the same way by common causes of ['v0'] and ['y']\n",
            "\n",
            "Target units: ate\n",
            "\n",
            "## Estimate\n",
            "Mean value: 2.0066779670688377\n",
            "\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "D"
      ],
      "metadata": {
        "id": "Sb7mf-XXuykH"
      },
      "execution_count": null,
      "outputs": []
    }
  ]
}