Created
April 5, 2018 04:21
-
-
Save akelleh/ee70676b1ad078d397a03a1232ca7086 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 13, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "%matplotlib inline" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import pandas as pd\n", | |
| "import numpy as np" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 57, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "N = 5000\n", | |
| "\n", | |
| "d = np.random.normal(size=N)\n", | |
| "\n", | |
| "epsilon = np.random.normal(size=N)\n", | |
| "y = d + epsilon\n", | |
| "\n", | |
| "p_s = 1. / (1. + np.exp(-5.*y))\n", | |
| "s = np.random.binomial(1., p=p_s)\n", | |
| "\n", | |
| "X = pd.DataFrame({'D': d, 'Y': y, 'S': s})\n", | |
| "X_sampled = X[X['S'] == 1]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 58, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>D</th>\n", | |
| " <th>S</th>\n", | |
| " <th>Y</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>-1.153989</td>\n", | |
| " <td>0</td>\n", | |
| " <td>-0.701370</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>0.073366</td>\n", | |
| " <td>0</td>\n", | |
| " <td>-0.551148</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>-0.552886</td>\n", | |
| " <td>1</td>\n", | |
| " <td>0.543580</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>0.041570</td>\n", | |
| " <td>0</td>\n", | |
| " <td>-0.696925</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>0.568853</td>\n", | |
| " <td>0</td>\n", | |
| " <td>-0.511785</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " D S Y\n", | |
| "0 -1.153989 0 -0.701370\n", | |
| "1 0.073366 0 -0.551148\n", | |
| "2 -0.552886 1 0.543580\n", | |
| "3 0.041570 0 -0.696925\n", | |
| "4 0.568853 0 -0.511785" | |
| ] | |
| }, | |
| "execution_count": 58, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "X.head()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 59, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>D</th>\n", | |
| " <th>S</th>\n", | |
| " <th>Y</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>-0.552886</td>\n", | |
| " <td>1</td>\n", | |
| " <td>0.543580</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>5</th>\n", | |
| " <td>0.735751</td>\n", | |
| " <td>1</td>\n", | |
| " <td>1.265191</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>6</th>\n", | |
| " <td>1.648369</td>\n", | |
| " <td>1</td>\n", | |
| " <td>1.630948</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>10</th>\n", | |
| " <td>0.348982</td>\n", | |
| " <td>1</td>\n", | |
| " <td>2.127916</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>11</th>\n", | |
| " <td>1.188942</td>\n", | |
| " <td>1</td>\n", | |
| " <td>0.481489</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " D S Y\n", | |
| "2 -0.552886 1 0.543580\n", | |
| "5 0.735751 1 1.265191\n", | |
| "6 1.648369 1 1.630948\n", | |
| "10 0.348982 1 2.127916\n", | |
| "11 1.188942 1 0.481489" | |
| ] | |
| }, | |
| "execution_count": 59, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "X_sampled.head()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 60, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.axes._subplots.AxesSubplot at 0x7fa2b3843e10>" | |
| ] | |
| }, | |
| "execution_count": 60, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "X.plot(x='D', y='Y', style='bo', alpha=0.3, xlim=(-5,5), ylim=(-5, 5))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 63, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.axes._subplots.AxesSubplot at 0x7fa2abfa1898>" | |
| ] | |
| }, | |
| "execution_count": 63, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "X_sampled.plot(x='D', y='Y', style='bo', alpha=0.3, xlim=(-5,5), ylim=(-5, 5))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from statsmodels.nonparametric.kernel_regression import KernelReg\n", | |
| "import matplotlib.pyplot as pp" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 76, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "Text(0,0.5,'Y')" | |
| ] | |
| }, | |
| "execution_count": 76, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "model = KernelReg(X['Y'], X['D'], 'c')\n", | |
| "result = model.fit(X['D'])[0]\n", | |
| "\n", | |
| "pp.plot(X['D'], result, 'b.'); pp.xlim(-5,5); pp.ylim(-5,5); pp.title(\"Conditional mean of population data\"); pp.xlabel('D'); pp.ylabel(\"Y\")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 77, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "Text(0,0.5,'Y')" | |
| ] | |
| }, | |
| "execution_count": 77, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "model = KernelReg(X_sampled['Y'], X_sampled['D'], 'c')\n", | |
| "result = model.fit(X_sampled['D'])[0]\n", | |
| "\n", | |
| "pp.plot(X_sampled['D'], result, 'b.'); pp.xlim(-5,5); pp.ylim(-5,5); pp.title(\"Conditional mean of sampled data\"); pp.xlabel('D'); pp.ylabel(\"Y\")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## The sampled conditional mean is biased due to conditioning on a descendant of a collider involving an error term!! " | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Now, let's do the estimation for the article translation problem." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 95, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "d = np.random.choice(range(5), size=N)\n", | |
| "\n", | |
| "q = np.random.normal(d)\n", | |
| "\n", | |
| "y = 100* np.random.normal(q)\n", | |
| "\n", | |
| "p_s = 1. / (1. + np.exp(-(y - 200)/200))\n", | |
| "s = np.random.binomial(1, p=p_s)\n", | |
| "\n", | |
| "yt = 100*np.random.normal(q)\n", | |
| "\n", | |
| "X = pd.DataFrame({'D': d, 'Y': y, 'Yt': yt, 'S': s})" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 96, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>D</th>\n", | |
| " <th>S</th>\n", | |
| " <th>Y</th>\n", | |
| " <th>Yt</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>3</td>\n", | |
| " <td>1</td>\n", | |
| " <td>259.256570</td>\n", | |
| " <td>93.277309</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>1</td>\n", | |
| " <td>0</td>\n", | |
| " <td>-33.135337</td>\n", | |
| " <td>298.229415</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>0</td>\n", | |
| " <td>0</td>\n", | |
| " <td>-57.907072</td>\n", | |
| " <td>-76.446788</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>4</td>\n", | |
| " <td>1</td>\n", | |
| " <td>275.986449</td>\n", | |
| " <td>387.190582</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>0</td>\n", | |
| " <td>0</td>\n", | |
| " <td>6.603954</td>\n", | |
| " <td>59.294716</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " D S Y Yt\n", | |
| "0 3 1 259.256570 93.277309\n", | |
| "1 1 0 -33.135337 298.229415\n", | |
| "2 0 0 -57.907072 -76.446788\n", | |
| "3 4 1 275.986449 387.190582\n", | |
| "4 0 0 6.603954 59.294716" | |
| ] | |
| }, | |
| "execution_count": 96, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "X.head()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 97, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "X_sampled = X[X['S'] == 1]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Now that we have our data, let's compare the sample E[Yt|D] with the population E[Yt|D]. We wouldn't normally be able to make this comparison, but since we generated the data we have the population E[Yt|D]." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 103, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.axes._subplots.AxesSubplot at 0x7fa2ab8bf5f8>" | |
| ] | |
| }, | |
| "execution_count": 103, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "# first the sample means\n", | |
| "\n", | |
| "X_sampled.groupby('D').mean().reset_index().plot(x='D', y='Yt', kind='bar')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 168, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>Yt</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>D</th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>40.990550</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>134.658688</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>220.891312</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>316.190018</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>414.573617</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " Yt\n", | |
| "D \n", | |
| "0 40.990550\n", | |
| "1 134.658688\n", | |
| "2 220.891312\n", | |
| "3 316.190018\n", | |
| "4 414.573617" | |
| ] | |
| }, | |
| "execution_count": 168, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "X_sampled.groupby('D').mean()[['Yt']]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 101, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.axes._subplots.AxesSubplot at 0x7fa2ab931198>" | |
| ] | |
| }, | |
| "execution_count": 101, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "# and now the (usually unmeasured) population means.\n", | |
| "\n", | |
| "X.groupby('D').mean().reset_index().plot(x='D', y='Yt', kind='bar')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 170, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>Yt</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>D</th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>3.854319</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>97.179741</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>195.800158</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>298.337302</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>402.939388</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " Yt\n", | |
| "D \n", | |
| "0 3.854319\n", | |
| "1 97.179741\n", | |
| "2 195.800158\n", | |
| "3 298.337302\n", | |
| "4 402.939388" | |
| ] | |
| }, | |
| "execution_count": 170, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "X.groupby('D').mean()[['Yt']]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## We can see there's a good bit of bias in the expected values!" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Now, let's use the estimator to get corrected expectations. \n", | |
| "We want to estimate\n", | |
| "\n", | |
| "$E_{population}[Yt|D] = \\sum_{Y}E[Yt|Y, D, S=1]P(Y|D)$, \n", | |
| "\n", | |
| "or, changing notation slightly, \n", | |
| "\n", | |
| "$E_{population}[Yt|D] = \\sum_{Y}E_{sample}[Yt|Y, D]P_{population}(Y|D)$\n", | |
| "\n", | |
| "But $Y$ is continuous! We actually need to take the integral over $Y$,\n", | |
| "\n", | |
| "$E_{population}[Yt|D] = \\int E_{sample}[Yt|Y, D]P_{population}(Y|D) dY$\n", | |
| "\n", | |
| "The problem is actually pretty tricky, since we really need to estimate $P_{population}(Y|D)$ as well. We've only done the binary case until now. Let's tackle the whole problem.\n", | |
| "\n", | |
| "We'll estimate $P_{population}(Y|D)$ with a kernel density estimator, and then actually perform the integral numerically using scipy." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 183, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stderr", | |
| "output_type": "stream", | |
| "text": [ | |
| "/home/akelleh/.virtualenvs/data/lib/python3.5/site-packages/statsmodels/nonparametric/kernel_density.py:477: RuntimeWarning: invalid value encountered in log\n", | |
| " L += func(f_i)\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "array([0.00279812, 0.00184942, 0.00245432, ..., 0.00260634, 0.00248156,\n", | |
| " 0.00238504])" | |
| ] | |
| }, | |
| "execution_count": 183, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# estimate the density, $P_{population}(Y|D)$\n", | |
| "\n", | |
| "from statsmodels.nonparametric.kernel_density import KDEMultivariateConditional\n", | |
| "\n", | |
| "conditional_model = KDEMultivariateConditional(X['Y'], X['D'], 'c', 'o', 'cv_ml')\n", | |
| "conditional_model.pdf(X['Y'], X['D'])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 184, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "p_y_given_d = conditional_model.pdf(X['Y'], [0.]*len(X))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 185, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "Text(0.5,1,'Conditional Density Plot for P(Y|D=0)')" | |
| ] | |
| }, | |
| "execution_count": 185, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZwAAAEWCAYAAABSaiGHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3X+0XFV99/H3h4QbCCCEJCIJmIQSbRNt0d5Su2orNbEgtUbXQ5/GBgTBhRJxYbVPhWLV0tKKVZG2BKWGguRqoGg1tipCoI+6Hg1cEJEEU6+AkhAh/Ai/JST5Pn+cfcNkMnfOuXNnzvz6vNaadWfO3ufMd+beO9/Z++yztyICMzOzVtun3QGYmVl/cMIxM7NSOOGYmVkpnHDMzKwUTjhmZlYKJxwzMyuFE461jKTTJH234vFTko6qU3+9pONaHNNcSSFpciufZ7wk/Z6kjSU9V0g6uknHOkzStyU9KemTzThmzvNNkbRB0uEF698naW5ro6r5vO+VdFHZz9vpnHD6kKQ/kzScEsAWSd+Q9NpWP29EHBgR96QYrpT0d1XlCyPiv1sdRz3pA+rZ9AG6TdL/k/RuSS39X4mI70TEy6viWNzIsSqS6lPpdp+kcxs4zh5fGMZwJvAw8KKI+EAj8dZ4zp0p7ick3SHpTVXP9+2I2CLpnZLuljSlYv/pkh6SdEKNYx8naVfF+7JJ0rWSfqvBWOdKulnSM5J+XPX7+ldgmaQXN3LsXuWE02ckvR/4NPD3wGHAS4EVwJJ2xtVh/jgiDgLmAB8DPgisbG9IDTkkIg4E3gZ8uNaHcBPMATZEA1eQ12llfi/FfQjZ+36tpGmp7N3A1QAR8TlgM/Dhin0/DXw9Ir45xrEfSMc+CHgN8GPgO5IWjTd+4IvAD4DpwPnAdZJmpth+CXwDeHsDx+1dEeFbn9yAg4GngD+pU2cK2T/tA+n2aWBKKjsO2AR8AHgI2AK8o2Lf6cAa4AngFuBvge9WlAdwNNm31OeB7Smer6Xy+4DFTYjjj8g+CJ4A7gc+WlE2N8UxeYzXvzuGim3HAruAV1TE9gng58CDwGeA/QvGdiKwAXiS7MPyLyr3S/evTs/3bHp//hL4L+C9VXHdCby1xmvY6zUCt1Y8VwBHV/xNfB7YCvwM+BDZF9FfA34J7EwxbKvxPFdW/R4XF/y9fRD4BXB1jWOexp5/MwekeAfJvhw9W/W65gKPAccAx6fnnFb1+5xb/R5XPee/AMPj/F96GfAccFDFtu8A7654vAy4ud3/9510cwunv/wOsB/wH3XqnE/2ze8Y4DfIPmw/VFH+ErIPqdnAGcClFd8+LyX7kDocOD3d9hIRlwNDwMcj62b74ybH8TTZN8tDyJLPWZLeUuc11xURt5B9UP5e2vQxsg+cY8gS6Gz2/JZdL7aVwLsia0G9AripxvOdQpbM/ji9Px8HrgJOHq0j6TfS8f+rXuzK/C6wkCwJV/vnFOtRwOvI3rd3RMTdZK2J76UYDqkR52ns+Xu8kWK/t0PJWkZn5sQ+GXgnWTL7CfBK4J6I2FERw31k7/0VZIl/eUQ8Vu+4NXwZeLWkA9Lz3pm6U2vdVqR9FqZYnqw4zg/T9lF3k70Hljjh9JfpwMOV/7A1LAMuiIiHImIr8DfAKRXlz6fy5yPi62QfBi+XNAn4X8CHI+LpiLiL7EOyUQ3FARAR/x0RP4qIXRFxJ1nXx+smEAtk35wPlSSyD8o/j4hH0wfO3wNLi8SWyhZIelFEPBYRtxd8/jXAyyTNT49PAa6JiO119nkYeBT4HHBuRKytLEy/s6XAeRHxZPrw/iR7vs/jlfd72wV8JCKei4hnxzjGayRtI2sFvY2sFfc42ReIJ2vU/xey9/WOiPhKAzE/ACgdn4j49Yg4ZIzb8rTPgcDjVcd5nKyrbtSTZMncko4aqWMt9wgwQ9LkOklnFlnXyqifpW27j1G17zNk/3wzyf6e7q/at1GNxoGk3yZrhbwCGCDr5vn3CcQCWWviUbLXORW4Lcs9QPZhNalIbGRJ+UPAxyTdSZYIvpf35BHxS0nXACdL+huyD+KTcnabkfPlYgawL3u/z7Pz4qkj7/e2NbLzG/V8PyJqDWJ5jD0/0AGIiJB0N1krtBGzybrtto1jn6eAF1VtexF7JsSD2Dsp9TW3cPrL98j6net1Lz1A1t0x6qVpW56twA7gyKp9x5J3krnROAC+QNYiODIiDibralH9XcaWRjHNBr5L1mp4FlhY8a334MhOROeKiFsjYgnwYuArwLVjVa2x7SqyFsQi4JkiiSrHw2Qtg+r3eXOdGPLk/d4mMj39ncC8Fgxpfytwe0Q8DbuH5z81xu0zaZ/1wFGSKhPgb6Tto36NrJvNEiecPpK6JT5Mdk7hLZKmStpX0hslfTxV+yLwIUkzJc1I9VcVOPZOsr7wj6bjLgBOrbPLg2TnDcbSUBzJQcCjqVVwLPBnBffbg6QXpSG5q4FVo910ZENeLx4d8ipptqTjCxxvQNIySQdHxPNkgxp2jVF9r/cnJZhdZN1eVzfymqqOt5Ms4V0o6SBJc4D388L7/CBwhKSBcRx2Ir+3vHg3ASNk54UmJJ3bmi3pI2Tnif6q4nkWpnNStW7vTnX+B7gD+Iik/SS9Ffh14EsVT/M6spFqljjh9JmI+CTZh8qHyFol9wNnk33bBvg7YJjs2+SPgNvTtiLOJus6+gXZCKZ/q1N3Jdm5jG2SavW7TySO5cAFkp4k+8AbqxUxlq+lfe8nOwn+KeAdFeUfJPvg+76kJ4AbeeEcTZ5TgPvSfu8ma7HU8g9kH9zbJP1FxfbPk508b8qHOPBeskEW95C14L5AdgIesgEN64FfSHq44PEm8nsr4rNM7BzTLElPkXWJ3Ur2Xh4XEd9q4FhLyUbPPUbWhXtSOm+FpP3IRiRO5Dxmz1GEF2Az6xaS3g6cOcY5jp6XLvL8AbAoIrYUqH8fWUK5r8WhVT/ve8m6dP+yzOftdB40YNYlJE0la72tyKvbqyLiOWBBu+PIExH/3O4YOpG71My6QDpHtJXsvMoX2hxON/k04xt9Zi3kLjUzMyuFWzhmZlYKn8OpMGPGjJg7d267wzAz6yq33XbbwxExM6+eE06FuXPnMjw83O4wzMy6iqRCs4q4S83MzErhhGNmZqVwwjEzs1I44ZiZWSmccMzMrBQepWZ9ZWAAnn9+7HJfB23WOk441jdUYEUcyUnHrFXcpWY9b9q0Yslm1HjqmllxbuFYT2s0ebilY9Z8buFYz5poS8UtHbPmcsKxntSsZDFpUnOOY2ZOONaDmtky2bWreccy63dOONZTWtEN5laOWXM44VjPGG+yOess2KfAf4BbOWbN4YRjPWG8ySYCVqyAnTuL1V++fPwxmdmenHCs6zWSbOo9ruWyy8b3HGa2Nycc62oTTTajDjlk4rGYWX1OONaVZs9uXrIBeOyx/P2nTRvf85nZnkpNOJJOkLRR0oikc2uUT5F0TSpfJ2luRdl5aftGScenbUdKulnSBknrJZ1TUf+jkjZLuiPdTizjNVrrSfDAA+PbpxmzBmzbNvFjmPWz0qa2kTQJuBR4A7AJuFXSmojYUFHtDOCxiDha0lLgIuBPJS0AlgILgVnAjZJeBuwAPhARt0s6CLhN0g0Vx7w4Ij5Rziu0MjQy7Llosonw7AJmrVRmC+dYYCQi7omI7cBqYElVnSXAVen+dcAiSUrbV0fEcxFxLzACHBsRWyLidoCIeBK4G5hdwmuxki1f3tpkU5SvyTFrXJkJZzZwf8XjTeydHHbXiYgdwOPA9CL7pu63VwHrKjafLelOSVdIqtkDL+lMScOShrdu3Tre12QlGBhobJRYI8lm333rl/uaHLPG9cSgAUkHAl8C3hcRT6TNlwG/AhwDbAE+WWvfiLg8IgYjYnDmzJmlxGvFSfUXTBtLoy2b7dsb28/M8pWZcDYDR1Y8PiJtq1lH0mTgYOCRevtK2pcs2QxFxJdHK0TEgxGxMyJ2Af9K1qVnXWThwvHvs2BB65cV8EWgZo0pM+HcCsyXNE/SANkggDVVddYAp6b7JwE3RUSk7UvTKLZ5wHzglnR+ZyVwd0R8qvJAkg6vePhW4K6mvyJrqQ0b8utUioD16yf+vGedVb/cF4GaNaa0hJPOyZwNXE92cv/aiFgv6QJJb07VVgLTJY0A7wfOTfuuB64FNgDfBN4TETuB3wVOAV5fY/jzxyX9SNKdwB8Af17OK7VmaOY1NuO1YkXzjmVmL1B4WcPdBgcHY3h4uN1h9L2pU+HZZ4vVXbUKli1rfgx5Cc//NmYvkHRbRAzm1fMS09ZRhoaKJ5tWfugfckj9Cz0XLmxO951ZP+mJUWrWO04+uVi9Vrcw8qa6Ge/5JTNzwrEOMnVqsXqrVrU2DjNrDScc6xhFutIWLWrNORszaz0nHOsIRa9tufHG1sZRadas+uUDA+XEYdYrnHCsIxS5tqXskWGbqy9LrtLIDAhm/cwJx8zMSuGEY21XpGvK172YdT8nHGu7vK6pfdr4V5o3Is7nccyKc8Kxtlq8OL/Ozp2tj2MseSPifB7HrDgnHGurtWvrl+etT2Nm3cMJxzqa16cx6x1OONY2eTML5C0TUJa88ziNLH1t1o+ccKxt8mYW6JRlAjyzgVlzOOFYW3jVTLP+44RjbZE3s0CndKeZWfM44VhH6pTutFGLFtUvnzatnDjMupkTjpWuyLU3nSZv0tB6i7WZWcYJx0qXd+3NggXlxGFm5XLCsY7jpZvNepMTjllBedfj+DyOWX1OOFaq2bPrl+ednG+nvOtxfB7HrD4nHCvVAw/ULy9zRU8zK5cTjpmZlcIJx0qTNxz6kEPKiWMi8rr8PIOC2dgUXkpxt8HBwRgeHm53GD0rb5LLbvlT7JXXYdYskm6LiMG8em7hmJlZKZxwrBRDQ+2OwMzardSEI+kESRsljUg6t0b5FEnXpPJ1kuZWlJ2Xtm+UdHzadqSkmyVtkLRe0jkV9Q+VdIOkn6SfvkqijU49tX553jUunWQff00za0hp/zqSJgGXAm8EFgBvk1Q9ickZwGMRcTRwMXBR2ncBsBRYCJwArEjH2wF8ICIWAK8B3lNxzHOBtRExH1ibHlub7NxZv7yb1pzJey1ekM2stjK/qx0LjETEPRGxHVgNLKmqswS4Kt2/DlgkSWn76oh4LiLuBUaAYyNiS0TcDhARTwJ3A7NrHOsq4C0tel02QZ47zaw/lJlwZgP3VzzexAvJYa86EbEDeByYXmTf1P32KmBd2nRYRGxJ938BHFYrKElnShqWNLx169bxvSIrJG+osOdOM+sPPdEbLelA4EvA+yLiieryyMZ+1xysGhGXR8RgRAzOnDmzxZH2p7zF1sysP5SZcDYDR1Y8PiJtq1lH0mTgYOCRevtK2pcs2QxFxJcr6jwo6fBU53Dgoaa9Eut7edfa+DyO2d7KTDi3AvMlzZM0QDYIYE1VnTXA6Himk4CbUutkDbA0jWKbB8wHbknnd1YCd0fEp+oc61Tgq01/RZYrbzi0z9+Y9Y/JZT1RROyQdDZwPTAJuCIi1ku6ABiOiDVkyeNqSSPAo2RJiVTvWmAD2ci090TETkmvBU4BfiTpjvRUfxURXwc+Blwr6QzgZ8D/Luu12gve9a765T5/Y9Y/PLVNBU9t03y9PA1ML782s/Hw1DZmLZaXULwgm9menHCsbWbNancEreUF2cz25IRjLZO3HMHm6jGKZtbTnHCsZdaubXcEZtZJnHDMJiDvPM6kSeXEYdYNnHCsJfKms8lbObNX7NrV7gjMOocTjrXEZz9bv/zGG8uJw8w6hxOOtUQ/fbPff//65V58zizjhGOl67XutGeeqV9+8snlxGHW6ZxwrOnyhkO7O82sPznhWNN5OLSZ1eKEY6Xqte60Ufvk/Cd5mhszJxwrWa92p+3cWb/c09yYOeFYky1c2O4IzKxTOeFYU23Y0O4IzKxTOeGYNUne7Ndedtr6nROOlWbKlHZH0Fqe/dqsPicca5q8+dNWriwnDjPrTE441jSXXVa/fNmycuJop333rV/u4dHWz5xwzJpo+/b65R4ebf1s3AlH0gGSvMqHjUuvXvBpZsXlJhxJ+0j6M0n/Jekh4MfAFkkbJP2jpKNbH6Z1urwZkXv1gs9G5J3rMutVRVo4NwO/ApwHvCQijoyIFwOvBb4PXCTJ8+H2uXPOaXcEnSNveHTeuS6zXjW5QJ3FEfF89caIeBT4EvAlSTmnSq3XPfJIuyPoHJs3+5obs1pyE05EPC/pV4ElwOy0eTOwJiLuHq3TuhCt2/n8zd4WL3Y3o/WfIudwPgisBgTckm4Cvijp3NaGZ90g75yEP1j35iUcrB8pIupXkP4HWFjdipE0AKyPiPktjK9Ug4ODMTw83O4wus6kSfWXlM75E+tZed1q/fq+WO+RdFtEDObVKzJoYBdQ6zTo4anM+ly9ZGNmNqpIwnkfsFbSNyRdnm7fBNYC4xqbJOkESRsljdTqjpM0RdI1qXydpLkVZeel7RslHV+x/QpJD0m6q+pYH5W0WdId6XbieGK15sgbsdXLFiyoX+6BBdZvigwa+KaklwHHsueggVsjImfZqReki0UvBd4AbAJulbQmIiontD8DeCwijpa0FLgI+FNJC4ClwEKy1taNkl6Wnv9K4F+Az9d42osj4hNFY7TxW7y4fnk/T2i5fr2TilmlQjMNRMSuiPh+RHwp3b4/nmSTHAuMRMQ9EbGdbCDCkqo6S4Cr0v3rgEWSlLavjojnIuJeYCQdj4j4NvDoOGOxJvHJ74nJu2DWrJeUOZfabOD+isebeKHFtFediNgBPA5ML7hvLWdLujN1u9WcNlHSmZKGJQ1v3bq12CuxQjwcOr9b7WRfMm19ZFwJR9LrK392uMvIZkg4BtgCfLJWpYi4PCIGI2Jw5syZZcbX8zwcOutWM7PMeFs4n6j6OR6bgSMrHh+RttWsI2kycDDwSMF99xARD0bEzojYBfwrqQvOmsdzgjWH30frF412qTVyKvRWYL6keekanqXAmqo6a4BT0/2TgJsiu1BoDbA0jWKbB8wnuwB17AClwysevhW4a6y61hjPCdYcfh+tXxSZS60pImKHpLOB64FJwBURsV7SBcBwRKwBVgJXSxohGwiwNO27XtK1wAZgB/Ce0UELkr4IHAfMkLQJ+EhErAQ+LukYIID7gHeV9VoNpk9vdwSdI8Kj1cygxIQDEBFfB75ete3DFfd/CfzJGPteCFxYY/vbxqh/yoSCtboWLqxffskl5cTRK5YvhxUr2h2FWWt5xU9ryIYN9cv7YTnpZnK3mvWD8Sacp9LPJ5sdiFkv87xpZuNMOBHx+5U/zWrx+ZvGzC5yZZlZF3OXmjWdz9805oEH2h2BWWs54di45V034vM3tblbzfpd4YQj6QhJr5R0QCsDss7nE9ytM3VquyMwa50iK37OlXQ7sA74CvCQpK+lGaStz+RNNpk3d1i/23ff+uXPPltOHGbtUKSFcxHw2YiYHRG/QjbdzNeAb0jqmdU+rZjTTqtf7rnD6tu+vd0RmLVPkYTzsoj47OiDiNgREZcDZwEfHns360U7drQ7gt7nWQmsVxVJODVPdUbEt4Bfa2441s3cnVZMP6+Cav2tSMJ5iaQzJP22pAOryjzupo/knb9xd1ox/bwKqvW3InOpfZRsTZm3A6+Q9CTZzMt3AS9pXWjWaU7x7HSlkTyM2npPbsJJ52t2k3QE8Erg14H/26K4rAP5A7B5FizIn4/OrNfkJhxJL62xeX26fbGifFtEPNHM4Kxz5F3sedZZ5cTRK9av9+AA6z+KnK+tkm4eo2h0R6X7V0bE55sYW+kGBwdjeHi43WF0pLwPR7d+xi/vPd1/f3jmmXJiMZsISbdFxGBevSJdan/QnJDMrNKsWfXnT/NFoNZrisw0cHIZgVjnyhudtmhROXH0miKj1fK6Ms26SZEuteuBHwPvH13WuVe5S622gw6Cp54au9zdaY0rch7H7691uqJdakWuw3kj8Cxwk6SZE47Muk69ZDNlSnlx9CInE+snuQknInZFxLnAJcB3JJ0p6VhJnte2D+R16axcWU4c/WxgoN0RmDVHoeUJJL0JeCewHXg18AngfkkjLYzNOkDeUgRe+6b1nn++3RGYNUeR63DuBTYAF0fEDVVlR7QqMLN+EeFrcqw/FJna5o8iouY10RGxCUCSIm/0gXWdvNFpB3gpvtJMneprcqz7FelSWyHpvdUzDkgakPR6SVcBp7YmPGunM86oX/7Zz9Yvt+LyZpD2NTnWC4q0cE4ATiebxuYo4DFgP2AS8C3g0xHxg9aFaO3y3HP1y33+pnk2b3a3mvW+IjMN/BJYQdbS2ReYATwbEdtaHZy1T153mpXPM0hbtysy08Cpkh6W9CjwOeApJ5ved/759cs9WWfzeQE763VFzuH8NfAG4FeBnwN/39KIrCP87Gf1y1esKCeOflJkAbuFC1sfh1mrFEk4T0TEDyLioYj4a+DYRp9M0gmSNkoakXRujfIpkq5J5eskza0oOy9t3yjp+IrtV0h6SNJdVcc6VNINkn6Sfk5rNG7b0/Tp7Y6gf3kNHetmRRLO4Wl2gd9PU9vs28gTSZoEXEo2Vc4C4G2SqjsRzgAei4ijgYuBi9K+C4ClwEKyQQwr0vEArkzbqp0LrI2I+cDa9NgKyPsWfckl5cTRj9xVab2sSML5CNkKn38LbCRbZvrrkv5B0tvG8VzHAiMRcU9EbAdWA0uq6iwBrkr3rwMWSVLavjoinouIe4GRdDwi4tvAozWer/JYVwFvGUesfS3vW7RHp7VOka5Kj2azblVkLrXLI+K9EfG6iDgUOAr4Z2AbcOI4nms2cH/F401pW806EbEDeByYXnDfaodFxJZ0/xfAYbUqpdbbsKThrVu3FnkdfW2//dodQe/z4AHrVUWuw9lDml1gE/CN5ofTGhERkmoOKI2Iy4HLIVueoNTAOlBed9rnPldOHP3My09bryo0eWeTbAaOrHh8RNpWs46kycDBwCMF9632oKTD07EOBx5qOPI+Uq87bdYsd6d1Cick60ZlJpxbgfmS5kkaIBsEsKaqzhpemCbnJOCmNEfbGmBpGsU2D5gP3JLzfJXHOhX4ahNeQ0/Lu9izyAqV1hzuVrNeVFrCSedkzgauB+4Gro2I9ZIukPTmVG0lMD0te/B+0siyiFgPXEs2a/U3gfeMrj4q6YvA94CXS9okaXQGsI8Bb5D0E2Bxemx1vOtd7Y7ARhW5JmeqV6SyLpO7xHQ/6eclpoeG4OST69fxn0q5vPy0dYtmLjFtfeCcc+qX+/qQ8hVJJp7zzrqJWzgV+rmFk/dt2n8m7eFWjnUDt3CsMH9L7lwePGC9xAnHOP30+uX+0GufIoMHPETauoUTjrF9e/3yIh96ZmZ5nHD6XF53mgcLtF+RczRetsC6gQcNVOjHQQMHHghPPz12uf88OoMHD1gn86ABK6Respkypbw4rL5Zs9odgdnEOeH0scWL65evXFlOHJavyLRCHjxgnc4Jp4+tXVu/3BN1mlkzOeH0qeXL2x2BjVeRczRu5Vgnc8LpU5ddVr/c196YWbM54VhNvvamMxVp5QwMtD4Os0Y44fShvMECq1aVE4e1xvPPtzsCs9qccPqQBwt0t/33z6/jcznWiZxw+kzezAKLFpUThzXumWfaHYFZY5xw+kzeqp433lhOHDYxRQZ1+FyOdRonnD5Tb2YB6x5FBnX4XI51GiecPpJ37Y2703pP3gARszI54fSJ5cvzr71xd1p3KTJEOm+AiFmZnHD6RF6y8TIEvWvq1HZHYJZxwjEAVqxodwTWiCKtnGefbX0cZkU44fSBvKHQc+aUE4e1j6/LsU7ghNMHzjmnfvmFF5YTh7WGF16zbuGE0wceeaR+uWcW6A+TJrU7Aut3Tjg9Lm+tew8W6A1FWjm7drU+DrN6nHB62NAQbNgwdvnAgAcL9BuPWLN2csLpYaefXr/8iivKicPK4RFr1ulKTTiSTpC0UdKIpHNrlE+RdE0qXydpbkXZeWn7RknH5x1T0pWS7pV0R7od0+rX12m2b69f7nM3/ckj1qxdSks4kiYBlwJvBBYAb5NUPQXhGcBjEXE0cDFwUdp3AbAUWAicAKyQNKnAMf9PRByTbne08OV1HE9j0588Ys06WZktnGOBkYi4JyK2A6uBJVV1lgBXpfvXAYskKW1fHRHPRcS9wEg6XpFj9p2hIU9jY/W5lWPtUGbCmQ3cX/F4U9pWs05E7AAeB6bX2TfvmBdKulPSxZKm1ApK0pmShiUNb926dfyvqgPlXXfj1k1vcyvHOlUvDxo4D/hV4LeAQ4EP1qoUEZdHxGBEDM6cObPM+FpiaCj/uhu3bgzcyrHylZlwNgNHVjw+Im2rWUfSZOBg4JE6+455zIjYEpnngH8j637reXmtm+nTy4nD2sutHOtEZSacW4H5kuZJGiAbBLCmqs4a4NR0/yTgpoiItH1pGsU2D5gP3FLvmJIOTz8FvAW4q6WvrgMUad1cckk5sVj77btvfh23cqxMk8t6oojYIels4HpgEnBFRKyXdAEwHBFrgJXA1ZJGgEfJEgip3rXABmAH8J6I2AlQ65jpKYckzQQE3AG8u6zX2i55y0dPn+6h0P1k+/ZiCWXxYnezWjkUbnvvNjg4GMPDw+0OoyFDQ3DyyWOXDwxkF3o64fSXxYuLLcLmjwGbCEm3RcRgXr1eHjTQV/JaN042/aloy8Vda1YGJ5weMDQETz9dv46TTf9atardEZhlnHC63NAQnHJK/Toemdbfin7ZcCvHWs0Jp8udf35+/7tHplnRczSeTdpayQmniw0Nwc9+Vr/OokXuTrNMkWHSnk3aWskJp0sNDcHb355fz8NdbVTe7OGj3LVmreKE06XOOSd/BUfPmWbViv5NTJvW2jisPznhdKm8GQUWLXLrxvZW9G9i27bWxmH9yQmnywwNwYwZ9etMmuRkY2MrOoDAXWvWbKVNbWMTNzQEp50GO3bUr3fmmaWEY11s//2LDRCQPAuBNY9bOF3knHPyk82iRbBiRTnxWPd65pnidd3SsWZxwukSRWaCXrXKXWlW3HhaLk6ZBqKsAAAKqklEQVQ61gxOOF1gaCi/m2zOHF9vY+M3nmlvnHRsopxwOtzy5dks0HldIBdeWE481luWLYNZs4rX90wENhFOOB1s+XK47LL8emed5daNNW5z9bq7dTz7rFs61jgnnA40NARz5+Ynm0mTsi4RDxKwiRrvSDQnHWuEh0V3mKKtmqlT4fLL3bKx5okYXyLxkGkbL7dwOsjQULFkA0421hpu6VgrOeF0gNHZA+otEV3J52yslZx0rFXcpdZmRbvQIDtnc+aZPmdjrddI99o++8DOna2LybqfE04bDA1lC6flrWVTafp0ePjh1sVkVm28SWfXLp/XsfqccEo2ehHneKYWmTzZq3Zae4w36YBbOzY2n8Mp2fnnjy/ZTJ8OV17pczbWPo20WEZbO4sXNz8e615OOC02ek3NPvtkP4t2ow0MZNfYPPywk421X6PdZGvXOvHYC5xwWmA0yUhwyilZkonIfhbpnjjgALjiCica6ywTOTczmnhGb9afnHCabPQczWhLpvqftFaf+OjjOXOyVs1TTznZWGeKyIblT1Rl8il6W7hw4s9r7eWEM0HVXWbnnJN/jiYiSy5S9vPqq7Nt993nRGOdb8WK9oxE27ChWGKaNq382KwYj1KbgOoRZ0XPz8yZkyUXs24WkbU6NmxodyR72ratWLfdggWwfn3r47EXlNrCkXSCpI2SRiSdW6N8iqRrUvk6SXMrys5L2zdKOj7vmJLmpWOMpGMONPv1jHfEGWRzoHkpAesV69d373U3RVtM7bgdeGA2+8g++2Q/Z8zItk+eXPvn3LnZReSVvS1DQ2O/9sqemdHjF9lvwiKilBswCfgpcBQwAPwQWFBVZznwmXR/KXBNur8g1Z8CzEvHmVTvmMC1wNJ0/zPAWXkx/uZv/maMhxSR/bvVv43WmzMnYtWqcT2FWVcp8v/gWzm3qVNrf96sWpWVjXe/+r93hiPn8zUiSm3hHAuMRMQ9EbEdWA0sqaqzBLgq3b8OWCRJafvqiHguIu4FRtLxah4z7fP6dAzSMd/S7Bf00pfW3j59us/RWH8a/diy9nvmmawXplpez8xY+zVDmQlnNnB/xeNNaVvNOhGxA3gcmF5n37G2Twe2pWOM9VwASDpT0rCk4a1bt47rBV144d4rIE6dms0KcN992cVvTjLWjyq/M1v7/PznxbY1UqcRfT9KLSIuj4jBiBicOXPmuPZdtixbJqCyNeNlA8z21GinkE1crV6YsXpmxlunEWUmnM3AkRWPj0jbataRNBk4GHikzr5jbX8EOCQdY6znaoply9yaMWuFoompGdcF9aKxBijV6pkpsl8zlJlwbgXmp9FjA2SDAtZU1VkDnJrunwTclE5IrQGWplFs84D5wC1jHTPtc3M6BumYX23hazOzNhm9LijvtmBBuyMt7oADsnPBUvZz+vRs+6RJtX/OmZMl3iK9LdU9M6PHL6OXprTrcCJih6SzgevJRpddERHrJV1ANsJhDbASuFrSCPAoWQIh1bsW2ADsAN4TETsBah0zPeUHgdWS/g74QTq2mfUpX3PzgmXL2tMbo3Bn6W6Dg4MxPDzc7jDMzLqKpNsiYjCvXt8PGjAzs3I44ZiZWSmccMzMrBROOGZmVgoPGqggaStQcM7nhs0AHm7xc7RKt8berXFD98buuMvXztjnRETulfNOOCWTNFxkNEcn6tbYuzVu6N7YHXf5uiF2d6mZmVkpnHDMzKwUTjjlu7zdAUxAt8berXFD98buuMvX8bH7HI6ZmZXCLRwzMyuFE46ZmZXCCacEkj4gKSTNSI8l6Z8kjUi6U9KrK+qeKukn6Xbq2Edtabz/KOnHKbb/kHRIRdl5Ke6Nko6v2H5C2jYi6dx2xF1Lp8YFIOlISTdL2iBpvaRz0vZDJd2Q/gZukDQtbR/z76ZN8U+S9ANJ/5kez5O0LsV3TVoyhLSsyDVp+zpJc9sc9yGSrkt/43dL+p1ueM8l/Xn6O7lL0hcl7dct7/luEeFbC29kC8RdT3ZB6Yy07UTgG4CA1wDr0vZDgXvSz2np/rQ2xPyHwOR0/yLgonR/AfBDYAowD/gp2bIQk9L9o4CBVGdBB7z3HRlXRXyHA69O9w8C/ie9xx8Hzk3bz614/2v+3bQx/vcDXwD+Mz2+Flia7n8GOCvdXw58Jt1fClzT5rivAt6Z7g8Ah3T6ew7MBu4F9q94r0/rlvd89OYWTutdDPwlUDk6Ywnw+ch8n2x10sOB44EbIuLRiHgMuAE4oeyAI+JbEbEjPfw+2Yqpo3GvjojnIuJeYAQ4Nt1GIuKeiNgOrE51261T4wIgIrZExO3p/pPA3WQfLEvIPhRJP9+S7o/1d1M6SUcAfwR8Lj0W8HrgulSlOu7R13MdsCjVL52kg4HfJ62PFRHbI2IbXfCek61ftr+ylYynAlvogve8khNOC0laAmyOiB9WFc0G7q94vCltG2t7O51O9g0Puitu6Ny49pK6PF4FrAMOi4gtqegXwGHpfie9nk+TfZHalR5PB7ZVfFGpjG133Kn88VS/HeYBW4F/S92Bn5N0AB3+nkfEZuATwM/JEs3jwG10x3u+W2krfvYqSTcCL6lRdD7wV2TdUx2nXtwR8dVU53yyFVaHyoyt30g6EPgS8L6IeKLyi2hEhKSOunZB0puAhyLiNknHtTuecZoMvBp4b0Ssk3QJWRfabh36nk8ja7XMA7YB/04bej8myglngiJica3tkl5J9sfxw/QBcgRwu6Rjgc1k53ZGHZG2bQaOq9r+300PmrHjHiXpNOBNwKJIHcGMHTd1trdTvXg7gqR9yZLNUER8OW1+UNLhEbEldd88lLZ3yuv5XeDNkk4E9gNeBFxC1t00OX2jroxtNO5NqTvoYOCR8sMGslbApohYlx5fR5ZwOv09XwzcGxFbASR9mez30A3v+W7uUmuRiPhRRLw4IuZGxFyyP/RXR8QvgDXA29MImNcAj6fm/PXAH0qalr7R/GHaVipJJ5B1l7w5Ip6pKFoDLE0jYOYB84FbgFuB+WnEzADZSco1ZcddQ6fGBew+77ESuDsiPlVRtAYYHaF4KvDViu21/m5KFRHnRcQR6e96KXBTRCwDbgZOGiPu0ddzUqrflhZE+v+7X9LL06ZFwAY6/D0n60p7jaSp6e9mNO6Of8/30O5RC/1yA+7jhVFqAi4lG0H1I2Cwot7pZCfjR4B3tCnWEbL+3zvS7TMVZeenuDcCb6zYfiLZKKufknXLtf097+S4UmyvJRtMcmfFe30iWV/7WuAnwI3AoXl/N218Dcfxwii1o8i+gIyQdflMSdv3S49HUvlRbY75GGA4ve9fIRsR2vHvOfA3wI+Bu4CryUaLdsV7Pnrz1DZmZlYKd6mZmVkpnHDMzKwUTjhmZlYKJxwzMyuFE46ZmZXCCcesQ6VrP74r6Y0V2/5E0jfbGZdZozws2qyDSXoF2fUUryKbGeQHwAkR8dO2BmbWACccsw4n6ePA08ABwJMR8bdtDsmsIU44Zh0uzWZ8O7Cd7Er359ockllDPHmnWYeLiKclXQM85WRj3cyDBsy6wy5eWHvGrCs54ZiZWSmccMzMrBQeNGBmZqVwC8fMzErhhGNmZqVwwjEzs1I44ZiZWSmccMzMrBROOGZmVgonHDMzK8X/B7rERBDPQQnkAAAAAElFTkSuQmCC\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "pp.plot(X['Y'], p_y_given_d, 'bo'); pp.xlabel('Y'); pp.ylabel('$P(Y|D=0)$'); pp.title(\"Conditional Density Plot for P(Y|D=0)\")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 186, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "Text(0.5,1,'Conditional Density Plot for P(Y|D=4)')" | |
| ] | |
| }, | |
| "execution_count": 186, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "p_y_given_d = conditional_model.pdf(X['Y'], [4.]*len(X))\n", | |
| "pp.plot(X['Y'], p_y_given_d, 'bo'); pp.xlabel('Y'); pp.ylabel('$P(Y|D=4)$'); pp.title(\"Conditional Density Plot for P(Y|D=4)\")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## The conditional plots look pretty good!\n", | |
| "\n", | |
| "Now that we have $P_{population}(Y|D)$, we need the expected value, $E_{sample}[Yt|Y, D]$. It's linear, so let's just use a linear model." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 187, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from sklearn.linear_model import LinearRegression\n", | |
| "\n", | |
| "expectation_model = LinearRegression()\n", | |
| "expectation_model = expectation_model.fit(X_sampled[['Y', 'D']], X_sampled['Yt'])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 188, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[<matplotlib.lines.Line2D at 0x7fa2a6ae2c88>]" | |
| ] | |
| }, | |
| "execution_count": 188, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "df = X_sampled.copy()\n", | |
| "df['D'] = 4\n", | |
| "E_yt_given_d_x = expectation_model.predict(df[['Y', 'D']])\n", | |
| "pp.plot(df['Y'], E_yt_given_d_x, 'bo')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Time to integrate!\n", | |
| "\n", | |
| "Again, we're estimating \n", | |
| "$E_{population}[Yt|D] = \\int E_{sample}[Yt|Y, D]P_{population}(Y|D) dY$\n", | |
| "\n", | |
| "For more reference on the integrator, check out https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.quad.html#scipy.integrate.quad\n", | |
| "\n", | |
| "The arguments are the integrand (a function), and the upper and lower bounds for the integration. We'll integrate from the min to the max of the observed Y values.\n", | |
| "\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 189, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from scipy.integrate import quad\n", | |
| "\n", | |
| "y_min = X['Y'].min()\n", | |
| "y_max = X['Y'].max()\n", | |
| "\n", | |
| "def integrand(Y, D):\n", | |
| " return (expectation_model.predict([[Y, D]]) * conditional_model.pdf([Y], [D]))[0]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 190, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "0.12613300982650508" | |
| ] | |
| }, | |
| "execution_count": 190, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "integrand(100, 0)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 193, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "(398.51751760868905, 2.897577824563231e-06)" | |
| ] | |
| }, | |
| "execution_count": 193, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "D = 4\n", | |
| "quad(integrand, y_min, y_max, args=(D,))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.5.2" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 2 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment