In this final post we outline the typical flow of a causal study in relations to the main tools provided by *Causalinference*. At a high level, assuming that unconfoundedness holds true in the given problem, we can break down a typical study into two phases.

# Causal Inference in Python

*Causal Inference in Python*, or *Causalinference* in short, is a software package that implements various statistical and econometric methods used in the field variously known as Causal Inference, Program Evaluation, or Treatment Effect Analysis.

Through a series of blog posts on this page, I will illustrate the use of *Causalinference*, as well as provide high-level summaries of the underlying econometric theory with the non-specialist audience in mind. Source code for the package can be found at its GitHub page, and detailed documentation is available at causalinferenceinpython.org.

# Weighting

In this final post we will look at one additional treatment effect estimator — the so-called doubly-robust weighting estimator...

Read More# Blocking

With the sample divided into strata of units that have similar propensity scores, we should be able to get clean estimates of treatment effects within each block. Aggregating these estimates appropriately gives the blocking estimator, which we illustrate in this post...

Read More# Matching

One way to overcome the problem of excessive extrapolation of least squares involves directly executing on the unconfoundedness assumption and nonparametrically matching subjects with similar covariate values together. As we shall see, least squares still plays an important role under this approach, but its scope is restricted to being a local one...

Read More# Least Squares

One of the simplest treatment effect estimators is the ordinary least squares (OLS) estimator. Below we illustrate several common specifications that can be computed by *Causalinference*, and describe why least squares can behave poorly when there is not enough covariate overlap...