Specification Curve is a Python package that performs specification curve analysis; it helps with the problem of the "garden of forking paths" (many defensible choices) when doing analysis by running many regressions and summarising the effects in an easy to digest chart.
Go to the full documentation for Specification Curve.
You can try out specification curve right now in Google Colab.
Here's an example of using Specification Curve.
# import specification curve
import specification_curve as specy
# Generate some fake data
# ------------------------
import numpy as np
import pandas as pd
# Set seed for random numbers
seed_for_prng = 78557
# prng=probabilistic random number generator
prng = np.random.default_rng(seed_for_prng)
n_samples = 400
# Number of dimensions
n_dim = 4
c_rnd_vars = prng.random(size=(n_dim, n_samples))
y_1 = (0.4*c_rnd_vars[0, :] - # THIS IS THE TRUE VALUE OF THE COEFFICIENT
0.2*c_rnd_vars[1, :] +
0.3*prng.standard_normal(n_samples))
# Next line causes y_2 ests to be much more noisy
y_2 = y_1 - 0.5*np.abs(prng.standard_normal(n_samples))
# Put data into dataframe
df = pd.DataFrame([y_1, y_2], ['y1', 'y2']).T
df["x_1"] = c_rnd_vars[0, :]
df["c_1"] = c_rnd_vars[1, :]
df["c_2"] = c_rnd_vars[2, :]
df["c_3"] = c_rnd_vars[3, :]
# Specification Curve Analysis
#-----------------------------
sc = specy.SpecificationCurve(
df,
y_endog=['y1', 'y2'],
x_exog="x_1",
controls=["c_1", "c_2", "c_3"])
sc.fit()
sc.plot()
Grey squares (black lines when there are many specifications) show whether a variable is included in a specification or not. Blue or red markers and error bars show whether the coefficient is positive and significant (at the 0.05 level) or red and significant, respectively.
You can install Specification Curve via pip:
$ pip install specification-curve
To install the development version from git, use:
$ pip install git+https://github.com/aeturrell/specification_curve.git
@misc{aeturrell_2022_7264033,
author = {Arthur Turrell},
title = {Specification Curve: v0.3.1},
month = oct,
year = 2022,
publisher = {Zenodo},
version = {v0.3.1},
doi = {10.5281/zenodo.7264033},
url = {https://doi.org/10.5281/zenodo.7264033}
}
Using Specification Curve in your paper? Let us know by raising an issue beginning with "citation".
Distributed under the terms of the MIT license.
The package is built with poetry, while the documentation is built with Jupyter Book. Tests are run with nox.
In RStats, there is specr (which inspired many design choices in this package) and spec_chart. Some of the example data in this package is the same as in specr, but please note that results have not been cross-checked across packages.