Statistical computations and models for use with SciPy
People: Skipper Seabold, Josef Perktold
What it is
Statsmodels is a Python package that provides a complement to scipy for
statistical computations including descriptive statistics and
estimation of statistical models.
- regression: Generalized least squares (including weighted least squares and
least squares with autoregressive errors), ordinary least squares.
- glm: Generalized linear models with support for all of the one-parameter
exponential family distributions.
- discrete choice models: Poisson, probit, logit, multinomial logit
- rlm: Robust linear models with support for several M-estimators.
- tsa: Time series analysis models, including ARMA, AR, VAR
- nonparametric : (Univariate) kernel density estimators
- datasets: Datasets to be distributed and used for examples and in testing.
- PyDTA: Tools for reading Stata .dta files into numpy arrays.
- stats: a wide range of statistical tests
- sandbox: There is also a sandbox which contains code for generalized additive
models (untested), mixed effects models, cox proportional hazards model (both
are untested and still dependent on the nipy formula framework), generating
descriptive statistics, and printing table output to ascii, latex, and html.
There is also experimental code for systems of equations regression,
time series models, panel data estimators and information theoretic measures.
None of this code is considered "production ready".
The source distribution for Windows includes a htmlhelp file (statsmodels.chm).
This can be opened from the python interpreter
>>> import scikits.statsmodels.api as sm
Discussion and Development
All chatter will take place on the or scipy-user mailing list. We are very
interested in receiving feedback about usability, suggestions for improvements,
and bug reports via the mailing list or the bug tracker at
There is also a google group at
to discuss development and design issues that are deemed to be too specialized
for the scipy-dev/user list.
scikits.statsmodels has been ported and tested for Python 3.2. Python 3
version of the code can be obtained by running 2to3.py over the entire
statsmodels source. The numerical core of statsmodels worked almost without
changes, however there can be problems with data input and plotting.
The STATA file reader and writer in iolib.foreign has not been ported yet.
And there are still some problems with the matplotlib version for Python 3
that was used in testing. Running the test suite with Python 3.2 shows some
errors related to foreign and matplotlib.
- Removed academic-only WFS dataset.
- Fix easy_install issue on Windows.
Changes that break backwards compatibility
Added api.py for importing. So the new convention for importing is:
import scikits.statsmodels.api as sm
Importing from modules directly now avoids unnecessary imports and increases
the import speed if a library or user only needs specific functions.
- sandbox/output.py -> iolib/table.py
- lib/io.py -> iolib/foreign.py (Now contains Stata .dta format reader)
- family -> families
- families.links.inverse -> families.links.inverse_power
- Datasets' Load class is now load function.
- regression.py -> regression/linear_model.py
- discretemod.py -> discrete/discrete_model.py
- rlm.py -> robust/robust_linear_model.py
- glm.py -> genmod/generalized_linear_model.py
- model.py -> base/model.py
- t() method -> tvalues attribute (t() still exists but raises a warning)
Main changes and additions
- Numerous bugfixes.
- Time Series Analysis model (tsa)
- Vector Autoregression Models VAR (tsa.VAR)
- Autogressive Models AR (tsa.AR)
- Autoregressive Moving Average Models ARMA (tsa.ARMA)
optionally uses Cython for Kalman Filtering
use setup.py install with option --with-cython
- Baxter-King band-pass filter (tsa.filters.bkfilter)
- Hodrick-Prescott filter (tsa.filters.hpfilter)
- Christiano-Fitzgerald filter (tsa.filters.cffilter)
- Improved maximum likelihood framework uses all available scipy.optimize solvers
- Refactor of the datasets sub-package.
- Added more datasets for examples.
- Removed RPy dependency for running the test suite.
- Refactored the test suite.
- Refactored codebase/directory structure.
- Support for offset and exposure in GLM.
- Removed data_weights argument to GLM.fit for Binomial models.
- New statistical tests, especially diagnostic and specification tests
- Multiple test correction
- General Method of Moment framework in sandbox
- Improved documentation
- and other additions
- renames for more consistency
RLM.fitted_values -> RLM.fittedvalues
GLMResults.resid_dev -> GLMResults.resid_deviance
- GLMResults, RegressionResults:
lazy calculations, convert attributes to properties with _cache
- fix tests to run without rpy
- expanded examples in examples directory
- add PyDTA to lib.io -- functions for reading Stata .dta binary files
them to numpy arrays
- made tools.categorical much more robust
- add_constant now takes a prepend argument
- fix GLS to work with only a one column design
- add four new datasets
- A dataset from the American National Election Studies (1996)
- Grunfeld (1950) investment data
- Spector and Mazzeo (1980) program effectiveness data
- A US macroeconomic dataset
- add four new Maximum Likelihood Estimators for models with a discrete
dependent variables with examples
- MNLogit (multinomial logit)
- add qqplot in sandbox.graphics
- add sandbox.tsa (time series analysis) and sandbox.regression (anova)
- add principal component analysis in sandbox.tools
- add Seemingly Unrelated Regression (SUR) and Two-Stage Least Squares
for systems of equations in sandbox.sysreg.Sem2SLS
- add restricted least squares (RLS)
You can download the latest distribution from PyPI here: http://pypi.python.org/pypi/scikits.statsmodels
You can install scikits.statsmodels for yourself from the terminal by running:
pip install --user scikits.statsmodels
If you want to install it for all users on your machine, do:
pip install scikits.statsmodels
On Linux, do sudo pip install scikits.statsmodels
If you don't yet have the pip tool, you can get it following
This package was discovered in PyPI.