From a38d2ec2f9d705e99f4b37d827af226c21459016 Mon Sep 17 00:00:00 2001 From: Adam Kelleher Date: Mon, 15 Jan 2018 14:55:51 -0500 Subject: [PATCH 01/12] updating main readme --- README.md | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 9eba85c..3553876 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,18 @@ This package contains tools for causal analysis using observational (rather than Assuming you have pip installed, just run ``` -pip install causality +pip install causality ``` +## Causal Analysis + +The simplest interface to this package is probably through the `CausalDataFrame` object in [`causality.analysis.CausalDataFrame`](https://github.com/akelleh/causality/blob/master/causality/analysis/dataframe.py#L8). This is just an extension of the `pandas.DataFrame` object, and so it inherits the same methods. + +The `CausalDataFrame` current supports two kinds of causal analysis. First, it has a `CausalDataFrame.zmean` method. This method lets you control for a set of variables, `z`, when you're trying to estimate the effect of a discrete variable `x` on a continuous variable, `y`. It supports both returning the `y` estimates at each `x` value, as well as providing bootstrap error bars. For more details, check out the readme [here](). + +The second kind of analysis supported is plotting for discrete or continuous `x` to show the effect on continous `y`. + + ## Measuring Causal Effects the [`causality.estimation`](https://github.com/akelleh/causality/tree/master/causality/estimation) module contains tools for estimating causal effects from observational and experimental data. Most tools are parametric, like `PropensityScoreMatching`, and can be found in `causality.estimation.parametric`. Other models are non-parametric, and rely on directly estimating densities and using the g-estimation approach. @@ -51,10 +60,10 @@ graph = ic_algorithm.search(X, variable_types) Now, we have the inferred graph stored in `graph`. In this graph, each variable is a node (named from the DataFrame columns), and each edge represents statistical dependence between the nodes that can't be eliminated by conditioning on the variables specified for the search. If an edge can be oriented with the data available, the arrowhead is indicated in `'arrows'`. If the edge also satisfies the local criterion for genuine causation, then that directed edge will have `marked=True`. If we print the edges from the result of our search, we can see which edges are oriented, and which satisfy the local criterion for genuine causation: ```python >>> graph.edges(data=True) -[('x2', 'x1', {'arrows': [], 'marked': False}), - ('x2', 'x4', {'arrows': ['x4'], 'marked': False}), - ('x3', 'x1', {'arrows': [], 'marked': False}), - ('x3', 'x4', {'arrows': ['x4'], 'marked': False}), +[('x2', 'x1', {'arrows': [], 'marked': False}), + ('x2', 'x4', {'arrows': ['x4'], 'marked': False}), + ('x3', 'x1', {'arrows': [], 'marked': False}), + ('x3', 'x4', {'arrows': ['x4'], 'marked': False}), ('x4', 'x5', {'arrows': ['x5'], 'marked': True})] ``` From b65cc6fbe005b1b235f5f320a14815ff1a125f00 Mon Sep 17 00:00:00 2001 From: Adam Kelleher Date: Mon, 15 Jan 2018 14:57:40 -0500 Subject: [PATCH 02/12] updated main readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3553876..3337e82 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ The simplest interface to this package is probably through the `CausalDataFrame` The `CausalDataFrame` current supports two kinds of causal analysis. First, it has a `CausalDataFrame.zmean` method. This method lets you control for a set of variables, `z`, when you're trying to estimate the effect of a discrete variable `x` on a continuous variable, `y`. It supports both returning the `y` estimates at each `x` value, as well as providing bootstrap error bars. For more details, check out the readme [here](). -The second kind of analysis supported is plotting for discrete or continuous `x` to show the effect on continous `y`. +The second kind of analysis supported is plotting to show the effect of discrete or continuous `x` on continous `y` while controlling for `z`. You can do this with the `CausalDataFrame.zplot` method. For details, check out the readme [here](). ## Measuring Causal Effects From cfcdf14542c1e345b4ce5dc3140bca033b69b96d Mon Sep 17 00:00:00 2001 From: Adam Kelleher Date: Mon, 15 Jan 2018 15:18:56 -0500 Subject: [PATCH 03/12] adding readmes --- causality/analysis/README.md | 39 ++++++++++++++++++ causality/analysis/img/discrete_zplot.png | Bin 0 -> 5905 bytes .../analysis/img/discrete_zplot_naive.png | Bin 0 -> 4222 bytes 3 files changed, 39 insertions(+) create mode 100644 causality/analysis/README.md create mode 100644 causality/analysis/img/discrete_zplot.png create mode 100644 causality/analysis/img/discrete_zplot_naive.png diff --git a/causality/analysis/README.md b/causality/analysis/README.md new file mode 100644 index 0000000..9226c47 --- /dev/null +++ b/causality/analysis/README.md @@ -0,0 +1,39 @@ +# Analysis + +This module contains tools for using the Robin's G-Formula and arbitrary machine learning estimators to estimate and plot causal effects. By "causal effect" we mean the distribution or conditional expectation of Y given X, controlling for an admissable set of covariates, Z, to make the effect identifiable. For a primer on choosing these Z variables, check out the article [here](https://medium.com/@akelleh/a-technical-primer-on-causality-181db2575e41). + +More intuitively, you want to estimate the effect of X on Y, but you know you need to control for some set of confounders, Z, to get the true effect. Otherwise, you expect there to be confounding bias. + +# The `CausalDataFrame` + +The `CausalDataFrame` is an extension of the `pandas.DataFrame`, so you can intialize it as you normally would intialize a `pandas.DataFrame`, e.g. + +```python +import numpy as np +import pandas as pd +import matplotlib.pyplot as pp +from causality.analysis.dataframe import CausalDataFrame + +N = 1000 + +z = np.random.normal(1., size=N) +x = np.random.binomial(1, p=1./(1. + np.exp(-z/.1))) +y = x + z + np.random.normal(size=N) + +# It's easy to create a data frame +df = CausalDataFrame({'x': x, 'y': y, 'z': z}) + +# and the interface to zplot is basically the same as the pandas.DataFrame.plot method! +df.zplot(x='x', y='y', z_types={'z': 'c'}, z=['z'], kind='bar', bootstrap_samples=500); pp.ylabel("$E[Y|do(X=x)]$"); pp.show() + +``` +![The causal estimate](/img/discrete_zplot.png) + + You can also still use all of the usual methods, for example to get a naive plot for comparison. + + ```python +df.groupby('x').mean().reset_index().plot(x='x', y='y', kind='bar'); pp.ylabel("$E[Y|X=x]$"); pp.show() + ``` + ![The naive estimate](/img/discrete_zplot_naive.png) + +The correct answer in this example is that if you intervene to set the value of `x` to `x=0`, you'll find (on average) `y=1`. If you set `x=1`, you'll find (on average) `y=2`. You can see the causal `zplot` method finds the correct answer, within the 95% confidence level. You can see naive observational estimate has much lower `y` at `x=0`! diff --git a/causality/analysis/img/discrete_zplot.png b/causality/analysis/img/discrete_zplot.png new file mode 100644 index 0000000000000000000000000000000000000000..22ea596a8dc5580ba6bc4c41e1350b684859c333 GIT binary patch literal 5905 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 Date: Mon, 15 Jan 2018 15:20:48 -0500 Subject: [PATCH 04/12] updated image links --- causality/analysis/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/causality/analysis/README.md b/causality/analysis/README.md index 9226c47..ea06f33 100644 --- a/causality/analysis/README.md +++ b/causality/analysis/README.md @@ -27,13 +27,13 @@ df = CausalDataFrame({'x': x, 'y': y, 'z': z}) df.zplot(x='x', y='y', z_types={'z': 'c'}, z=['z'], kind='bar', bootstrap_samples=500); pp.ylabel("$E[Y|do(X=x)]$"); pp.show() ``` -![The causal estimate](/img/discrete_zplot.png) +![The causal estimate](https://github.com/akelleh/causality/blob/CAUS-18-update-readmes/causality/analysis/img/discrete_zplot.png) You can also still use all of the usual methods, for example to get a naive plot for comparison. ```python df.groupby('x').mean().reset_index().plot(x='x', y='y', kind='bar'); pp.ylabel("$E[Y|X=x]$"); pp.show() ``` - ![The naive estimate](/img/discrete_zplot_naive.png) + ![The naive estimate](https://github.com/akelleh/causality/blob/CAUS-18-update-readmes/causality/analysis/img/discrete_zplot_naive.png) The correct answer in this example is that if you intervene to set the value of `x` to `x=0`, you'll find (on average) `y=1`. If you set `x=1`, you'll find (on average) `y=2`. You can see the causal `zplot` method finds the correct answer, within the 95% confidence level. You can see naive observational estimate has much lower `y` at `x=0`! From 2a5815227f27e00a65bb8d461cdcb13e43e5e31e Mon Sep 17 00:00:00 2001 From: Adam Kelleher Date: Mon, 15 Jan 2018 16:16:50 -0500 Subject: [PATCH 05/12] added more images --- causality/analysis/README.md | 99 +++++++++++++++++- .../analysis/img/continous_zplot_kernel.png | Bin 0 -> 9762 bytes .../analysis/img/continous_zplot_linear.png | Bin 0 -> 9587 bytes .../analysis/img/continous_zplot_mlp.png | Bin 0 -> 9466 bytes .../img/continous_zplot_random_forest.png | Bin 0 -> 12621 bytes .../analysis/img/continuous_zplot_naive.png | Bin 0 -> 41857 bytes .../analysis/img/discrete_zplot_bootstrap.png | Bin 0 -> 5905 bytes .../img/discrete_zplot_bootstrap_80CL.png | Bin 0 -> 4881 bytes 8 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 causality/analysis/img/continous_zplot_kernel.png create mode 100644 causality/analysis/img/continous_zplot_linear.png create mode 100644 causality/analysis/img/continous_zplot_mlp.png create mode 100644 causality/analysis/img/continous_zplot_random_forest.png create mode 100644 causality/analysis/img/continuous_zplot_naive.png create mode 100644 causality/analysis/img/discrete_zplot_bootstrap.png create mode 100644 causality/analysis/img/discrete_zplot_bootstrap_80CL.png diff --git a/causality/analysis/README.md b/causality/analysis/README.md index ea06f33..a8c1eab 100644 --- a/causality/analysis/README.md +++ b/causality/analysis/README.md @@ -22,14 +22,20 @@ y = x + z + np.random.normal(size=N) # It's easy to create a data frame df = CausalDataFrame({'x': x, 'y': y, 'z': z}) +``` +Here, we've created a dataset where `x` has a direct effect on `y`, but a third variable `z` has a direct effect on both `x` and `y`. The result will be that when `z` is higher, both `x` and `y` will tend to be higher due to the influence of `z`. This correlation is not due to the causal dependence between `x` and `y`, and is instead due to confounding by `z`. We can make a causal plot that controls for `z` so we can see the true dependence between `x` and `y` easily with the `CausalDataFrame`: + +```python # and the interface to zplot is basically the same as the pandas.DataFrame.plot method! df.zplot(x='x', y='y', z_types={'z': 'c'}, z=['z'], kind='bar', bootstrap_samples=500); pp.ylabel("$E[Y|do(X=x)]$"); pp.show() ``` ![The causal estimate](https://github.com/akelleh/causality/blob/CAUS-18-update-readmes/causality/analysis/img/discrete_zplot.png) - You can also still use all of the usual methods, for example to get a naive plot for comparison. +This `zplot` method passes args and kwargs to the `plot` method of the `pandas.DataFrame`, so you can pass it all of its usual formatting options. We'll give a more complete summary of all of its particular methods below. + + You can also still use all of the usual `DataFrame` methods, for example to get a naive plot for comparison. ```python df.groupby('x').mean().reset_index().plot(x='x', y='y', kind='bar'); pp.ylabel("$E[Y|X=x]$"); pp.show() @@ -37,3 +43,94 @@ df.groupby('x').mean().reset_index().plot(x='x', y='y', kind='bar'); pp.ylabel(" ![The naive estimate](https://github.com/akelleh/causality/blob/CAUS-18-update-readmes/causality/analysis/img/discrete_zplot_naive.png) The correct answer in this example is that if you intervene to set the value of `x` to `x=0`, you'll find (on average) `y=1`. If you set `x=1`, you'll find (on average) `y=2`. You can see the causal `zplot` method finds the correct answer, within the 95% confidence level. You can see naive observational estimate has much lower `y` at `x=0`! + +## The `CausalDataFrame.zplot` method + +If you have continous `x`, you can instead use the `kind='line'` argument. Let's generate a similar data set to see how this works. This time, let's have two confounding variables. + +```python +N = 1000 +lower = -1 +upper = 1 +z1 = np.random.uniform(lower, upper, size=N) +z2 = np.random.uniform(lower, upper, size=N) +x = np.random.uniform(lower, upper, size=N) + (z1 + z2)/2. +z = z1 + z2 +y = np.random.normal(size=N) - x + 2.* z +X = CausalDataFrame({'x': x, 'y': y, 'z1': z1, 'z2': z2}) +``` +We can see from this data generating process that the true relationship, holding the confounders `z` constant, is a negative relationship between `x` and `y` that is linear with a slope of `-1`. If we just plot the (confounded) data, we can't see any relationship at all: + +```python +X.plot(x='x', y='y', style='bo', alpha=0.2, kind='scatter') +``` + ![The naive estimate](https://github.com/akelleh/causality/blob/CAUS-18-update-readmes/causality/analysis/img/continuous_zplot_naive.png) + +We can control for the `z` variables, and recover the negative relationship! + +```python +X.zplot(x='x', y='y', z=['z1', 'z2'], z_types={'z1': 'c', 'z2': 'c'}, kind='line') +``` + ![The naive estimate](https://github.com/akelleh/causality/blob/CAUS-18-update-readmes/causality/analysis/img/continuous_zplot_random_forest.png) + + Unfortunately, the relationship is very noisy. The model used by default to do the controlling is a random forest model. It won't be the best model for every problem, and doesn't work here as well as kernel regression. Those are the two typed models that are currently supported for automatic controlling. You can switch to kernel density regression by specifying `model_type='kernel'`. + +```python +X.zplot(x='x', y='y', z=['z1', 'z2'], z_types={'z1': 'c', 'z2': 'c'}, kind='line', model_type='kernel') +``` + ![The naive estimate](https://github.com/akelleh/causality/blob/CAUS-18-update-readmes/causality/analysis/img/continuous_zplot_kernel.png) + + You're free to use other models you define yourself, as well. The models can be fitted or not. If the model is not fitted, you should pass the model object through the `model` kwarg. + + ```python + from sklearn.linear_model import LinearRegression + +treatment = 'x' +outcome = 'y' +confounders = ['z1', 'z2'] +X.zplot(x='x', y='y', z=confounders, z_types={'z1': 'c', 'z2': 'c'}, kind='line', model=LinearRegression) +``` +![linear regression model results](https://github.com/akelleh/causality/blob/CAUS-18-update-readmes/causality/analysis/img/continuous_zplot_linear.png) + + +If you'd like to pass a fit model, for example as you might if you're fitting a complicated model like a neural network, you can pass it through the `fitted_model` kwarg. Here's a simple multi-layer perceptron, just to give an example. + +```python +from sklearn.neural_network import MLPRegressor +model = MLPRegressor(hidden_layer_sizes=(128,128,128), max_iter=100, learning_rate_init=0.01) + +treatment = 'x' +outcome = 'y' +confounders = ['z1', 'z2'] +model.fit(X[[treatment] + confounders], X[outcome]) +# requirement: model.predict(X[[treatment] + confounders]) yields a numpy array of scalar predictions for y, dimension (n_samples,) +X.zplot(x='x', y='y', z=confounders, z_types={'z1': 'c', 'z2': 'c'}, kind='line', fitted_model=model) +``` + +![MLP model results](https://github.com/akelleh/causality/blob/CAUS-18-update-readmes/causality/analysis/img/continuous_zplot_mlp.png) + +With discrete variables, it's a little easier to bootstrap error bars. We have some kwargs available to give a little extra control over the bootstrapping process. Note that we use the normal approximation for the bootstrap confidence intervals. Using the percentile approach tended to give overly narrow intervals. + +Returning to the discrete data example from before, +```python +N = 1000 + +z = np.random.normal(1., size=N) +x = np.random.binomial(1, p=1./(1. + np.exp(-z/.1))) +y = x + z + np.random.normal(size=N) + +# It's easy to create a data frame +df = CausalDataFrame({'x': x, 'y': y, 'z': z}) + +# and the interface to zplot is basically the same as the pandas.DataFrame.plot method! +df.zplot(x='x', y='y', z_types={'z': 'c'}, z=['z'], kind='bar', bootstrap_samples=500); pp.ylabel("$E[Y|do(X=x)]$"); pp.show() +``` +![discrete plot with bootstrap parameter](https://github.com/akelleh/causality/blob/CAUS-18-update-readmes/causality/analysis/img/discrete_zplot_bootstrap.png) + +The default number of samples for the bootstrap is 500 samples. Much less than that tended to give overly narrow intervals. I'd encourage you to test them yourself with a simulation if you're planning to vary this parameter! + +You can also adjust the confidence level for your error bars. The default is the 95% confidence level. As we decrease the confidence level, you'll see the error bars shrink. +``` +df.zplot(x='x', y='y', z=['z'], z_types={'z': 'c'}, kind='bar', bootstrap_samples=500, confidence_level=0.80) +``` +![discrete plot with bootstrap parameter and 80%CL](https://github.com/akelleh/causality/blob/CAUS-18-update-readmes/causality/analysis/img/discrete_zplot_bootstrap_80CL.png) diff --git a/causality/analysis/img/continous_zplot_kernel.png b/causality/analysis/img/continous_zplot_kernel.png new file mode 100644 index 0000000000000000000000000000000000000000..c30b13e9e129dfbca592344cae186bceb80caaeb GIT binary patch literal 9762 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 literal 0 HcmV?d00001 diff --git a/causality/analysis/img/continous_zplot_linear.png b/causality/analysis/img/continous_zplot_linear.png new file mode 100644 index 0000000000000000000000000000000000000000..f7971bce4d2b3ed24da4223aba77607ee0c7053b GIT binary patch literal 9587 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 literal 0 HcmV?d00001 diff --git a/causality/analysis/img/continous_zplot_mlp.png b/causality/analysis/img/continous_zplot_mlp.png new file mode 100644 index 0000000000000000000000000000000000000000..e4ae80802ac43b458144b374f4ea351d79a921d1 GIT binary patch literal 9466 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 literal 0 HcmV?d00001 diff --git a/causality/analysis/img/continous_zplot_random_forest.png b/causality/analysis/img/continous_zplot_random_forest.png new file mode 100644 index 0000000000000000000000000000000000000000..aaab03a2367bdd096209030a56ee7c134b269be9 GIT binary patch literal 12621 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

LcD5t3=eL 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 XE3k1XzeZP7597BX~`ccF{C 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�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 ce$dyHHcTvW^lgbt%sr!Hbx7>Sr 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 literal 0 HcmV?d00001 From 81e3e8eeec201eafaba0873b955b467b8b0f8440 Mon Sep 17 00:00:00 2001 From: Adam Kelleher Date: Mon, 15 Jan 2018 16:19:40 -0500 Subject: [PATCH 06/12] changed img links --- causality/analysis/README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/causality/analysis/README.md b/causality/analysis/README.md index a8c1eab..1260ee4 100644 --- a/causality/analysis/README.md +++ b/causality/analysis/README.md @@ -31,7 +31,7 @@ Here, we've created a dataset where `x` has a direct effect on `y`, but a third df.zplot(x='x', y='y', z_types={'z': 'c'}, z=['z'], kind='bar', bootstrap_samples=500); pp.ylabel("$E[Y|do(X=x)]$"); pp.show() ``` -![The causal estimate](https://github.com/akelleh/causality/blob/CAUS-18-update-readmes/causality/analysis/img/discrete_zplot.png) +![The causal estimate](./img/discrete_zplot.png) This `zplot` method passes args and kwargs to the `plot` method of the `pandas.DataFrame`, so you can pass it all of its usual formatting options. We'll give a more complete summary of all of its particular methods below. @@ -40,7 +40,7 @@ This `zplot` method passes args and kwargs to the `plot` method of the `pandas.D ```python df.groupby('x').mean().reset_index().plot(x='x', y='y', kind='bar'); pp.ylabel("$E[Y|X=x]$"); pp.show() ``` - ![The naive estimate](https://github.com/akelleh/causality/blob/CAUS-18-update-readmes/causality/analysis/img/discrete_zplot_naive.png) + ![The naive estimate](./img/discrete_zplot_naive.png) The correct answer in this example is that if you intervene to set the value of `x` to `x=0`, you'll find (on average) `y=1`. If you set `x=1`, you'll find (on average) `y=2`. You can see the causal `zplot` method finds the correct answer, within the 95% confidence level. You can see naive observational estimate has much lower `y` at `x=0`! @@ -64,21 +64,21 @@ We can see from this data generating process that the true relationship, holding ```python X.plot(x='x', y='y', style='bo', alpha=0.2, kind='scatter') ``` - ![The naive estimate](https://github.com/akelleh/causality/blob/CAUS-18-update-readmes/causality/analysis/img/continuous_zplot_naive.png) + ![The naive estimate](./img/continuous_zplot_naive.png) We can control for the `z` variables, and recover the negative relationship! ```python X.zplot(x='x', y='y', z=['z1', 'z2'], z_types={'z1': 'c', 'z2': 'c'}, kind='line') ``` - ![The naive estimate](https://github.com/akelleh/causality/blob/CAUS-18-update-readmes/causality/analysis/img/continuous_zplot_random_forest.png) + ![The naive estimate](./img/continuous_zplot_random_forest.png) Unfortunately, the relationship is very noisy. The model used by default to do the controlling is a random forest model. It won't be the best model for every problem, and doesn't work here as well as kernel regression. Those are the two typed models that are currently supported for automatic controlling. You can switch to kernel density regression by specifying `model_type='kernel'`. ```python X.zplot(x='x', y='y', z=['z1', 'z2'], z_types={'z1': 'c', 'z2': 'c'}, kind='line', model_type='kernel') ``` - ![The naive estimate](https://github.com/akelleh/causality/blob/CAUS-18-update-readmes/causality/analysis/img/continuous_zplot_kernel.png) + ![The naive estimate](./img/continuous_zplot_kernel.png) You're free to use other models you define yourself, as well. The models can be fitted or not. If the model is not fitted, you should pass the model object through the `model` kwarg. @@ -90,7 +90,7 @@ outcome = 'y' confounders = ['z1', 'z2'] X.zplot(x='x', y='y', z=confounders, z_types={'z1': 'c', 'z2': 'c'}, kind='line', model=LinearRegression) ``` -![linear regression model results](https://github.com/akelleh/causality/blob/CAUS-18-update-readmes/causality/analysis/img/continuous_zplot_linear.png) +![linear regression model results](./img/continuous_zplot_linear.png) If you'd like to pass a fit model, for example as you might if you're fitting a complicated model like a neural network, you can pass it through the `fitted_model` kwarg. Here's a simple multi-layer perceptron, just to give an example. @@ -107,7 +107,7 @@ model.fit(X[[treatment] + confounders], X[outcome]) X.zplot(x='x', y='y', z=confounders, z_types={'z1': 'c', 'z2': 'c'}, kind='line', fitted_model=model) ``` -![MLP model results](https://github.com/akelleh/causality/blob/CAUS-18-update-readmes/causality/analysis/img/continuous_zplot_mlp.png) +![MLP model results](./img/continuous_zplot_mlp.png) With discrete variables, it's a little easier to bootstrap error bars. We have some kwargs available to give a little extra control over the bootstrapping process. Note that we use the normal approximation for the bootstrap confidence intervals. Using the percentile approach tended to give overly narrow intervals. @@ -125,7 +125,7 @@ df = CausalDataFrame({'x': x, 'y': y, 'z': z}) # and the interface to zplot is basically the same as the pandas.DataFrame.plot method! df.zplot(x='x', y='y', z_types={'z': 'c'}, z=['z'], kind='bar', bootstrap_samples=500); pp.ylabel("$E[Y|do(X=x)]$"); pp.show() ``` -![discrete plot with bootstrap parameter](https://github.com/akelleh/causality/blob/CAUS-18-update-readmes/causality/analysis/img/discrete_zplot_bootstrap.png) +![discrete plot with bootstrap parameter](./img/discrete_zplot_bootstrap.png) The default number of samples for the bootstrap is 500 samples. Much less than that tended to give overly narrow intervals. I'd encourage you to test them yourself with a simulation if you're planning to vary this parameter! @@ -133,4 +133,4 @@ You can also adjust the confidence level for your error bars. The default is the ``` df.zplot(x='x', y='y', z=['z'], z_types={'z': 'c'}, kind='bar', bootstrap_samples=500, confidence_level=0.80) ``` -![discrete plot with bootstrap parameter and 80%CL](https://github.com/akelleh/causality/blob/CAUS-18-update-readmes/causality/analysis/img/discrete_zplot_bootstrap_80CL.png) +![discrete plot with bootstrap parameter and 80%CL](./img/discrete_zplot_bootstrap_80CL.png) From c67aa326f73650a0086cc1656107d0636c861795 Mon Sep 17 00:00:00 2001 From: Adam Kelleher Date: Mon, 15 Jan 2018 16:21:42 -0500 Subject: [PATCH 07/12] changed img links --- causality/analysis/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/causality/analysis/README.md b/causality/analysis/README.md index 1260ee4..0458687 100644 --- a/causality/analysis/README.md +++ b/causality/analysis/README.md @@ -64,21 +64,21 @@ We can see from this data generating process that the true relationship, holding ```python X.plot(x='x', y='y', style='bo', alpha=0.2, kind='scatter') ``` - ![The naive estimate](./img/continuous_zplot_naive.png) + ![The naive estimate](img/continuous_zplot_naive.png) We can control for the `z` variables, and recover the negative relationship! ```python X.zplot(x='x', y='y', z=['z1', 'z2'], z_types={'z1': 'c', 'z2': 'c'}, kind='line') ``` - ![The naive estimate](./img/continuous_zplot_random_forest.png) + ![The random forest estimate](img/continuous_zplot_random_forest.png) Unfortunately, the relationship is very noisy. The model used by default to do the controlling is a random forest model. It won't be the best model for every problem, and doesn't work here as well as kernel regression. Those are the two typed models that are currently supported for automatic controlling. You can switch to kernel density regression by specifying `model_type='kernel'`. ```python X.zplot(x='x', y='y', z=['z1', 'z2'], z_types={'z1': 'c', 'z2': 'c'}, kind='line', model_type='kernel') ``` - ![The naive estimate](./img/continuous_zplot_kernel.png) + ![The kernel estimate](img/continuous_zplot_kernel.png) You're free to use other models you define yourself, as well. The models can be fitted or not. If the model is not fitted, you should pass the model object through the `model` kwarg. From bd39c6aeac4ee7ebdd310a06f090c9763fc1d06f Mon Sep 17 00:00:00 2001 From: Adam Kelleher Date: Mon, 15 Jan 2018 16:23:09 -0500 Subject: [PATCH 08/12] changed img links --- .../analysis/img/continous_zplot_kernel.png | Bin 9762 -> 0 bytes .../analysis/img/continous_zplot_linear.png | Bin 9587 -> 0 bytes causality/analysis/img/continous_zplot_mlp.png | Bin 9466 -> 0 bytes .../img/continous_zplot_random_forest.png | Bin 12621 -> 0 bytes 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 causality/analysis/img/continous_zplot_kernel.png delete mode 100644 causality/analysis/img/continous_zplot_linear.png delete mode 100644 causality/analysis/img/continous_zplot_mlp.png delete mode 100644 causality/analysis/img/continous_zplot_random_forest.png diff --git a/causality/analysis/img/continous_zplot_kernel.png b/causality/analysis/img/continous_zplot_kernel.png deleted file mode 100644 index c30b13e9e129dfbca592344cae186bceb80caaeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9762 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 diff --git a/causality/analysis/img/continous_zplot_linear.png b/causality/analysis/img/continous_zplot_linear.png deleted file mode 100644 index f7971bce4d2b3ed24da4223aba77607ee0c7053b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9587 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 diff --git a/causality/analysis/img/continous_zplot_mlp.png b/causality/analysis/img/continous_zplot_mlp.png deleted file mode 100644 index e4ae80802ac43b458144b374f4ea351d79a921d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9466 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 diff --git a/causality/analysis/img/continous_zplot_random_forest.png b/causality/analysis/img/continous_zplot_random_forest.png deleted file mode 100644 index aaab03a2367bdd096209030a56ee7c134b269be9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12621 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

LcD5t3=eL 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 R_}2$K<)<3*rBBS?{5N~ Date: Mon, 15 Jan 2018 16:23:45 -0500 Subject: [PATCH 09/12] changed img links --- .../analysis/img/continuous_zplot_kernel.png | Bin 0 -> 9762 bytes .../analysis/img/continuous_zplot_linear.png | Bin 0 -> 9587 bytes causality/analysis/img/continuous_zplot_mlp.png | Bin 0 -> 9466 bytes .../img/continuous_zplot_random_forest.png | Bin 0 -> 12621 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 causality/analysis/img/continuous_zplot_kernel.png create mode 100644 causality/analysis/img/continuous_zplot_linear.png create mode 100644 causality/analysis/img/continuous_zplot_mlp.png create mode 100644 causality/analysis/img/continuous_zplot_random_forest.png diff --git a/causality/analysis/img/continuous_zplot_kernel.png b/causality/analysis/img/continuous_zplot_kernel.png new file mode 100644 index 0000000000000000000000000000000000000000..c30b13e9e129dfbca592344cae186bceb80caaeb GIT binary patch literal 9762 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 literal 0 HcmV?d00001 diff --git a/causality/analysis/img/continuous_zplot_linear.png b/causality/analysis/img/continuous_zplot_linear.png new file mode 100644 index 0000000000000000000000000000000000000000..f7971bce4d2b3ed24da4223aba77607ee0c7053b GIT binary patch literal 9587 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 literal 0 HcmV?d00001 diff --git a/causality/analysis/img/continuous_zplot_mlp.png b/causality/analysis/img/continuous_zplot_mlp.png new file mode 100644 index 0000000000000000000000000000000000000000..e4ae80802ac43b458144b374f4ea351d79a921d1 GIT binary patch literal 9466 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 literal 0 HcmV?d00001 diff --git a/causality/analysis/img/continuous_zplot_random_forest.png b/causality/analysis/img/continuous_zplot_random_forest.png new file mode 100644 index 0000000000000000000000000000000000000000..aaab03a2367bdd096209030a56ee7c134b269be9 GIT binary patch literal 12621 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

LcD5t3=eL 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 R_}2$K<)<3*rBBS?{5N~ Date: Mon, 15 Jan 2018 16:45:02 -0500 Subject: [PATCH 10/12] changed img links --- causality/analysis/README.md | 11 +++++++++++ causality/analysis/img/zmean_results.png | Bin 0 -> 10966 bytes 2 files changed, 11 insertions(+) create mode 100644 causality/analysis/img/zmean_results.png diff --git a/causality/analysis/README.md b/causality/analysis/README.md index 0458687..4fc9d55 100644 --- a/causality/analysis/README.md +++ b/causality/analysis/README.md @@ -134,3 +134,14 @@ You can also adjust the confidence level for your error bars. The default is the df.zplot(x='x', y='y', z=['z'], z_types={'z': 'c'}, kind='bar', bootstrap_samples=500, confidence_level=0.80) ``` ![discrete plot with bootstrap parameter and 80%CL](./img/discrete_zplot_bootstrap_80CL.png) + +You might also like to just get the values and error bars out from these plots. You can do that for the discrete plot with the `zmean` method. + +## The `CausalDataFrame.zmean` method + +The interface for the `zmean` method is exactly like the `zplot` method. You can pass models and bootstrap parameters in the same way. The return value is a new dataframe. + +```python +df.zmean(x='x', y='y', z=['z'], z_types={'z': 'c'}, bootstrap_samples=500, confidence_level=0.95) +``` +![zmean results](img/zmean_results.png) diff --git a/causality/analysis/img/zmean_results.png b/causality/analysis/img/zmean_results.png new file mode 100644 index 0000000000000000000000000000000000000000..2d2b4aa2cbd6df4f13acdb65b0593d19b7114867 GIT binary patch literal 10966 zcmch7bx<8o@aN)gL4#We5*!``efT569Ukt%{h@*265K*?hv4pR0fM`SV8Mes-1}DD zpTB>u>h89-cDHwCc6w%~d%FA65h_Y@IGE&^007{~L!{LJ03i|noQRGHzxHF81;TGg zu9ET^=;-Jxo65i89XEAHOE;K_iv?ii;An5b?rP>@Vd3Cv?dW!j)FlQ0w1B*{ zgobCvafT5Dy0m`d@8xB3d~s=dx_|&%$2Bi@H90~^yhP!5jb}n4b_L5*S2N-fCj?pi z36k1U&-GUN#FCOFh$08on+=k|!Y$I^3X?feXo3CfNQC;rfBZ9HXk292yNkvV=)w4SIYd{|6R^ii`9&RYl*#!|Qo9r79YjuaUG! z)5k-YpFD3xe6)$BW%+~uqYuzPE|sx|QHE8F6i8REBBbf*F7xA84-fJdVzJsb$*cd) zxkSc6&?Q;5DeR<9xKdZby_u;P_qjiAcYK+Z8Mn`cGZI|eJRsas?enupdz2+G4nIlX z>>zX9n70D8b;opo!p`ZZiZVg4Wl8N9GS{@==G5hO{p)~_`kc{Ci>M|F^+>rivFM~l zIK3!+Zj67ZYX2S<5=p42HRLW3D+%*caN5~^)O_nSnE2VsXTBQi65e^|aSAb&Rij*QiMbXmAE-a^# zW0HB;&WXr5(pD*EA{<_?$iq3@?j*y>ncOFn<{4|XL}AxUa>!hk*Jk2V7C0mdH`fr# zWYvtc^QbHq_QnN0UM8`nt)}zyemY*h32z-p%^vj@3P+d1bZARU@hGf0qXeCJS9I{A_I`*+I8!twsn+llxm1|EX(Kn!9Y6krKDI=z4x- ztoxs+`?;Uj3?~`n1Le6k)2{V?J}~Mv<6O z{r984HMouY)71@s)_8lPJIf)M3CO-j7H4aMXRI}bzkrJLC?3= z2p==lVF48YNS)AL0bmNdBHl&@lfRA3KmcBAI{^@&(@nLF5K!ZG7?C(nzOon&00A2L zr4u#^`PvKsAV#?g#2w(+AOoA=I23fWAOb+oZ1V8R200=}03D$C5{(Q@dP|7{(x6@p z05I-A3MERJiq^=lIZ~o+7|_78lIDe1gpPIB~DTC z3I=oNf=8!}osj4QkrTXwLIEI!xGA3y`f|%Xw!(}DbPu`gaY72!1f>d!9FTAT=PI_J z2*_*e%s?Dd`u?x)GM|v(>RuweYubaLYEMU0GjdM{cYHK7yTrwrBEK;=+iMf;#p5Ta zRdszBQ&!sM05kd4BS3Q<(;A2o;2k833j`15NOU`T z%B}Sv1MqS5CK^?$!uLyGbB080Kz}`9D_`PoTbm|2?Lj6r%&X5S5Oy?6|G_sIuI0iP z3|JB9hO#z|xo`ns+S_Y zBRp1mp%{!0R*LD7IMB!D7Y??;0}TbYQ>wi^c~d+w5KOgSCv(*Gn@@#G*p=4(0|K}y z=2qawW8R8t?5hg2rcNfueLVTeoTsHrjDD8^AyJ6oU-1OVuw|IlDQ%j_qC(~)(kGG* zZw}Dob`qOw@AvWb<=3`vF185OafQ=#705@G3V&ed*&$M1sHhe|#1_VrbmPbO=y~t- z&0YPkdt6z)u&2X}B>mOGpg=wU!|Ud~n&KZajEcnvZ{QsVtwO~kUEbWN%fW_3G!!@b;&hM+n56qghkp~l{S{;r&{b6$#f4})p_L|&`lIZdEl2&eC zF@_Cv%LV(>(p~>#E9EfPBCZ-`AH!8UUj%?ZT%uROkd>)WL8IN0fJUv_8WZ1~4(-`3 z&)1YmM34XaV~)GcD^6)z(L$gg`QwiM#zm}-J0>|De5ZKwY4&Hu3LMVugMf5!>_QE#vJ* zz+E=lP)&CY#Y{&>)gK_h4GD>6M}+_^k`;+E*oO9*i03D&UGaO3$AvFjI=`E%eY!!N zC;-HQLhx|4%?6ci;RS5Uk@z?vUKG-WMNUU}8IuDmnQYy9tnJiLh>_WOtU`_$Lj2G?ehFq9+ zy#S|UQ|AitU$Np!zeosteS6&?1oarl482W@i0m=u3JXle3hL3I(P`l#Q@Hx_e?;7E zuzz4oaNS2k4eBv>y$y@F8@bx-3#&WAhQH7N9vj1ZjDO&j>yu#@-FJ_K{9hylb6sl6 zcwxWpM^kO!2ZzCY`suIo+T`DyYp@Q z=Bf~DpgCz~l!qKK;C8wWDm%6l#V?r#O(b@omiJBChbfK?j1HVea4Hu0`0YpbcsrUz zv6bwoP)H8y?$b9hrSgm~lg|_JpNC+Pa?E}+ssr$|`DT;e<@u9{rj129e-+ekb#F26 za&_Fx>)e#WF$l#$0GcZnnl4E>^-HG2S6HX%9BfT)ZKbrrMWKGvy&-Hj zl5)|P*5@yNl`h79O`SYli@O8arydI=*;RKbk|*6;W&QhY$VbyuLHl={(gsjD?YBr% znj5RGZJjPxNKVkI(?u#yNpOmfoZFyXHRnkJjy;uVCU$?*JjrgBFbQdj!I#uyKDe7g z+6mI>+F&}UY;bR6vHom3+;r>LHN2OO{x~^oPKuD$*paU&d)_u$MVhtZ*BQ6+a?6SW zbk{^6gV!3eKyOC&fjN!T`wbrQSKj4KoJ{7+G2?BRL;Qx{yoqDyM0n^A7aB5;|0~`=GV!|_sviLS%r~oEH@e62zppblQ&~!|XS}B{mbCkp4cfA|9v1L>w1i&D;U9+a6!dL^kFik7o zuSMEZiJ=Hn@R_i$1(V+zY;3QB6leBrq$U(XpDlVOvAcGl-+Ua5aBDuF3Sa`vqoDx4 z5qam1XFb{550^2}4l6FdrorL*<4jmGbLWB2Q{IbmXTz_gpKpX*569D`y%^Yo%sFUc z1~(Xf(akz-MXa2{lvl06y{9W|7OS5b*_tTuMFfj4*=S^(wi)f*V`TseGkb!vdFZD=j|{5;F5Q9 zLcs&nIy=2l-xkmg!v;QOhx5OHa%BRRi+JChv*gp6d}YiDU3uQ%wQvxKGdDA2rTJ)~HZXz>ln)ZP8YzXlZf^K!!OM;zA9offHyDs;s}vto=I*PM z>(RmUTb!arM%nrdxs7J`P17=;UEO~MC zE%4I%+|@!)xdT$Joo$sA{>Hize8uZZmd<&s9}nB4I-JhVBX%{gc7CpQ#ton?ofc)w zrwf?e-gc3kzq@rHOlG;@x}ET^6t~aC{2>B*d!}mbY(n}orL*%_LafU5V}lgxN|lus z3dOzQuVYCAE2EUmh@!6RhPcP`U#lcwU66TG)1LryZHl_=2L*KoB>atKjw?xu%og_- z92=jR-3J!?)+9Mo~ zUETlo8zTDLMqzv7`gzX(&IF2a!SP!|CJ4}p6A?WIVf~=j zcj)Z*9=Vmp27L5GE?|Q9F|2QK5h|}mMeFx(9Wu})i+*OFjFf#iZ!?k{rEAV2F359G z6hAi4!lAM94Rbo;*A^k)Ljd}Z;W3=^)IGGDGUj`AKpuAd7JKrb7 zUj9T)h>?!38AQEyE?T#41oe0 zx?$60>^~lk;5>LAR-aCmraAWI=i*~@zgZ0ImIlr|MGk9Apt0F0pWkH!n6YWo)3wLp zFA2r;E4CvKk+$tEUJ;u2_2x+?-5e}qFzII2Pw6u-&{LC z+&NN-R|t{Rykb<61(|3z}er>24i!R*1%|<+w5XzIuJs0y-bN7LbzSC z(mKT6SQOZFX=6ea{`Pm(FLCoQ5GELJ3KB_ZEgRAMooYo=r;M$$akv8m;vfYfzwO)( z&8?#LetHezsKTBsV*}0dS8U5hC#dEhSS#_YlG_Dq$u%# zHs=twZ$dktK6R~E^7-!T`0};So?R;J8AY^~UU!b8Zd{ypHLBpfEEihPQlE=ZLu z)!p0ODoW1JEvPOH!&v{g_VKPj9tw(omwZE8+)Wo@V-aYoht*GdKfzpY3@;llcSL1B zF8zaqr*w)Po4%wA4_37dZPary*K~;7{hi{OMP!^-rcrHTVy%F_RpCfrL|8{~T2j`^ zA~cOHQ1a7LNa&^Kdl5?i4M3zbsyql3Gh+uxaXI)tfrReID5-ptw@3!A!eT@0kvZ;{ z9jg7T8hF^&j|>bP4zJkDo*wLr%z85glD`#Q2MUnfdv9DlL``V>jUEXstw_J2kYvOF zw&%tvd(4G|C{EvX=^CtrmKFQ#yibb_FB+;c41Aj3c74dsf_uR3_J02UlwD?CN|THT zKsfOGy_nIEV2m=r)neN|4f?9IUhCh*-bVFLOku1)3Rc zuCXe=US4ox`xj_-t@93py_xpjdpeaC+A4J38v;f~%z+Bk34df37EYdckb)a8+4O{j zVf`lWnLEAq|8zBq->;t)pCSNp3O*P6>fVdK{^|7c0q@oh%GqNf_z zUXziw2zBgB@y2JU|J=g2#Yn^->a0M3F&U~cjIAqZ>X;cwVBxuF-%^1f;2Y~ZyKBELJ480WOpC~qfBWkKtiWKz!9)`6oxaXBV1(e%4XIQ^mF z=499wPrkT3CCRLJ!)e&q#%F^wACc$m&kuV=H_ljg_7{+%at7%&M0+D6tbUoiGi3Ng zP%C~KjCkMZ!ty=1PfDzw@>Tk-mLDB8kW+bwk5*OlPm zZK7J<{SwD*o`y5`DIEeSXSd%Yif|Zs5B_>|shp~Q7jBxQU1eymHi-=ObvB8XQ)Jg8 z2f$0yI#>}FM$EHx!_apyioG*Joz~03k$`I+4pT{S7ZFlx%sbE`olYOe6 z_3YURPBN+RG4MB%?vmjv>b(iHw&sV4yTWW!(I8f3)E0ePVD6EkB=MG=g-&EHc6LmF zqrN&Lpx@<1+o<3!e}4efeT_9k({(H9|Dy3;W9a3+xU{Yg0ipZkS0+9uT`59DB9{U3d;b^if%tCEWqu%~$?Pup<#UT_%03h8f zaP+s!{m^k~RM6vU3jTGQl}dqE79i;cH}{{$KD+DYyIk=G|tluXAYNaCmjBssy3a~Wn(d*xV6bx|L!#s_XM(9a$ zR@(Gz?soQW>H_(ny*(`{AQdHUa?924@)8F>@{{5u>UQe2`a7Obl^(a0A_IB*Cu}gW z4UeCIIhFFN!;Q4I!Tw0BY=Qz)o&U=X{EWW|*L`VOAt(SHVnxsNgoNURKG>?jD)Nt6 zk){d9YVPwptx6pi|BP~W8f}paIW+#n2Y{Jr*ah4@gZ6#rJbh6UxK&qKoFWqU z*tDfsUWR@ri;S+kCn53o3M2Pc+o%lB)@S_LYHQE_0R?AjvewbWp442x5cPRo38{R& z?R*Zl!eg&3XV&9E>vxszsQ335DNpU-wMRulsHe4;3B2|}tD)BbmvAc`5YT*@((`DV zZf$+ozAjw{?QCh;F~~b>T!F?{`H%cl?ZlxIGMio5V1&DeF(fF&c5`7mfI-m*&RX|<8b9^&$X$DauZzum;2&^N-NGQSL*wx zno8Xd*+q^pzWKsKnsVc(=PWe}?h+G~$9{?1TDm9ozX`VgLK`Jy>49K~ZcyXa^`-Lr z?Dy?2a~Jjt{JH4pRHtbWfB%cmt?d4LEK+O7moS#DDus=c$@#ei^knP3@K7FN#mjpB zk)OOS)2d>uHhrIRl_uCx=tQ~z1hwn*B6ev1hhWS0W^n$)hmn78%bAaf< z%WuPc|6M%v^C#U6mL+6x;m$Ns-$ySxX1$dRKp$`6{`<_Y+5C>;8RT4{K{vbkq2c^l z`^Gq|v66%iTu{ELx6qU&rEmuyI38QmA?xMUg#0`_5`^kHPuaQK`yxh)8dNG)?P9|9 z?Es1G|0cokV$=c;Y<*LvY2W>ShCycNw7`RZV9vL2WKWvD0flw3kf^3Rt~4tS!km7C zeL#K6|7lw-kQV)eVO0}$bMGp_jT6CXoMKgqIK`)Kly)p zD-oiK3_qavak>pmjSKluWT{fRn7}*;q;9OW0OIae_H)y^W(BLlO%J%imaX6!>8c z(57b|qRFiVf3vLX+jkQx7eYmt94yULi0|+!LqwQlt;^roKWb`Z#Rp0$sdWL!sAmysPh*~MelVx<4CC8O|$G-TtW=b#K5 zNXXRssoV8RH0vt>jxOkDA?NadXbDY@D@pdK`T}ZPq;Dz z$+rIU5X8xfrSElcEEX|taOsbO{93tAMcRq)1prKg|8fD` z8PfOPJ5|4jPbQV#D7Ro|Ebb#NDo}c_&EuyBJAeQo46dKnN+rYRuY5pz73Qit%h>{n z;2*!t*w`4xN=jVda3LlzDA<>2 z(Hl6rJMx-&;r?5T=EA|ROoE3xS>zmM;shV{3Un3M^%--kg4YPs(Z~N)?19gx$|dRS zN5qnh^kFzm@_yyC`etHR%Z1BP7Wlfx$+x{P(0FiE*AhFF{22w{8Bg&hI#p;$08{Y7 z?x?T<`>X9$r{6WxX(>v>XMXj6j4|I9meB4On!5P?;;yaDhNIV62_rjhzZ|I<)vq}< zDxY*2(yq9eC0~yVx&9{^4w&NSk>xjKkt}&R&{l#82=7SRz|MO%cfYlzuK_hamKAPa zTr!vR#X4Q6j_gjt4a6CCMx01SG?O~G4dUY<&cC^_l+)V}51%lBX%YW8BEL+UziCUF zzJ*yFDnBd`=u9yWl&<{dAxLRYN9%4N25^Y8kgarp8gHFi(msPkE|#56t8!ryn-s>5 z&^LiZT@q2jMb2vI>+$;%kb>*I;HB_4(-Zviw6bQFwPlgTVfD%_LADC$16r2k&WOr> zi|-?qx1=HGTczsUYm7d7g;+E%H8bAfsAo}<2I_Oyn0$^I{3?m{-R5bc^R1P!#ji$vPXCU?N)use%vRaD_ zOR0ul9;X$agenm*S}Oy}VOuGN2>wE#OLbkRi<15DxQX|&hxh73Ws`+R>8SI(*J3rI zGdht3g3~)_b*d83Z(8$f=UZFb4RM(d*E-Y)UwcP5YK83h^FJ*cDjFUY8f{`HEo5nZ z&`eNv>3r^)gV)(BcxVXF{7oK73wUx2B34tP1)$S+p-bQsfeq1v!}x-w&%<7P?#kA4 ze2v8@Dd+YS zZyb!X0Jb>MVp9k00JPuDnAa>MW?li&XhjYJCgk6TP4WtBnjo;sb z$|01J9fpcXG~Ya|XqajZwP|seoXK2oirmU{K3WLDe@lL-8iKFoV-y=H1=+Oi^A_=6 zx%QKjJTVdMsV_qwDptLWhOVBRlPrM7h57DN zw6Ac##Y}~{>T#(TA*5r<7%eMw%zSZTe1+R8$A13>C$iG*BPGB{A3R3&jk;P_0X5OS zo7idP_4D4;mwl;Pq!@`pdz}_RMridgRO(=n*@hT&`7~)N{aEu!$O6W#NMzs{p&A}@L zDF<_boCZyj_rT-58@})PUKNK?tJ~ej6+x?XYJOEf?GuU-KXW7iwuxd{DNI_oR0C+R zkz39)uFmXqrUa1#?hR8{mOg|SJ@092a~QPx4)77pe~pEW#^1hT{;PF_zZU3{;ojML zRaK_X?O0`ak!{$^M~oelx~K(_8s3qv8HWZ2ERW{MkBoAmSQppbl40Jo!9O;e6%-Ef3A1?jL8mg28A7s3lKEPbe=1B;7`vI=N zKhRJ`?d^CiaV%NMq?^emOPY+2dP1l@%Nc=8>g}Fg9X1?@N!A)mG76oCO`}e6!f=7L zfS#b;ND`?!0&C)A^2)rtU%i0EI|#z7_h(C{E;G7}DBypw*1P$cSE_cNB+fcSChd|< z>WPiW1uX?{>oVVLGo>K&lLqhHS;;WsUEkaw?^fiwq*;YvJ%pf57XML5vbFk=j9TDQ zPWg%h?Lj#GFkRTEbn|Ee`UzlydIVFdG5OVhrgdv{f45Z&-`Ekr@F>ptd@y9Rg>T2+`?n5r4K4kBuUcz09h0HO=k#V7qCu7jpKb3OE zcDF~~6o}J@h>lLCn^l-=@$ANrf5_^w+!|- zLxWdCWn9_eFutoy!*^WI=j_EiFp6L#yB3q2wry^GFDFCjQ?{WjaRsjWW=h~H-(*ED zKr2$9^|G_)y|+6Ua7#_-3gt`D=Kir{&RtqqgVQwnl#&cx`|?T3CVm{%`zrLUI3a8P zKu)}?N!7|#Y{{%3u~XD*Ebb;nN3RwXx4Pj1?a@*l!QbvL&B?Ux41aLt%r(?sj2t5@ zZJRocZKI|aQ5Djfek|5YJnw-!Tp88|GE5w>_pkiDup+gh9Fl3@s`@-$E8Vg4MNtu;Afq{#MfO26 zAbk0GUZAnDW*dhDIBhy7K8y1zq8QAGKV}&JszXSX;iz{js2g7lwIU7UZj!k;t;%z& zTQXJqxKzEcb1#>~qlB{BsCK#?ud4XuFZ1qsv0lt?-`a}!cZ2-P_755iH1C~Ky>TZF z8t5S?^T%|<6!A|ELualxHdWH7zsKoDR~0aG{$a=%y81kG`; Date: Mon, 15 Jan 2018 16:48:53 -0500 Subject: [PATCH 11/12] changed img links --- causality/analysis/README.md | 6 ++++++ causality/analysis/img/zmean_results_no_CI.png | Bin 0 -> 4766 bytes 2 files changed, 6 insertions(+) create mode 100644 causality/analysis/img/zmean_results_no_CI.png diff --git a/causality/analysis/README.md b/causality/analysis/README.md index 4fc9d55..36eecc8 100644 --- a/causality/analysis/README.md +++ b/causality/analysis/README.md @@ -145,3 +145,9 @@ The interface for the `zmean` method is exactly like the `zplot` method. You can df.zmean(x='x', y='y', z=['z'], z_types={'z': 'c'}, bootstrap_samples=500, confidence_level=0.95) ``` ![zmean results](img/zmean_results.png) + +Leaving off the `bootstrap_samples` kwarg while specifying the `confidence_level` will cause `zmean` to default to `bootstrap_samples=500`. Leaving off both keyword arguments will result in no confidence intervals being given: +```python +df.zmean(x='x', y='y', z=['z'], z_types={'z': 'c'}) +``` +![zmean results](img/zmean_results_no_CI.png) diff --git a/causality/analysis/img/zmean_results_no_CI.png b/causality/analysis/img/zmean_results_no_CI.png new file mode 100644 index 0000000000000000000000000000000000000000..df30613d8447a38f6e0298d9c76f6164e7fcb3c3 GIT binary patch literal 4766 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 literal 0 HcmV?d00001 From 4868261f8fc5cb56bc8eecac8ba166dbeb646f20 Mon Sep 17 00:00:00 2001 From: Adam Kelleher Date: Mon, 15 Jan 2018 16:51:53 -0500 Subject: [PATCH 12/12] few last changes --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3337e82..9b7bc09 100644 --- a/README.md +++ b/README.md @@ -9,13 +9,13 @@ Assuming you have pip installed, just run pip install causality ``` -## Causal Analysis +## [Causal Analysis](https://github.com/akelleh/causality/tree/master/causality/analysis) The simplest interface to this package is probably through the `CausalDataFrame` object in [`causality.analysis.CausalDataFrame`](https://github.com/akelleh/causality/blob/master/causality/analysis/dataframe.py#L8). This is just an extension of the `pandas.DataFrame` object, and so it inherits the same methods. -The `CausalDataFrame` current supports two kinds of causal analysis. First, it has a `CausalDataFrame.zmean` method. This method lets you control for a set of variables, `z`, when you're trying to estimate the effect of a discrete variable `x` on a continuous variable, `y`. It supports both returning the `y` estimates at each `x` value, as well as providing bootstrap error bars. For more details, check out the readme [here](). +The `CausalDataFrame` current supports two kinds of causal analysis. First, it has a `CausalDataFrame.zmean` method. This method lets you control for a set of variables, `z`, when you're trying to estimate the effect of a discrete variable `x` on a continuous variable, `y`. It supports both returning the `y` estimates at each `x` value, as well as providing bootstrap error bars. For more details, check out the readme [here](https://github.com/akelleh/causality/tree/master/causality/analysis). -The second kind of analysis supported is plotting to show the effect of discrete or continuous `x` on continous `y` while controlling for `z`. You can do this with the `CausalDataFrame.zplot` method. For details, check out the readme [here](). +The second kind of analysis supported is plotting to show the effect of discrete or continuous `x` on continous `y` while controlling for `z`. You can do this with the `CausalDataFrame.zplot` method. For details, check out the readme [here](https://github.com/akelleh/causality/tree/master/causality/analysis). ## Measuring Causal Effects