From 24afab2d421baca88f3d92c82fd7926882f76d01 Mon Sep 17 00:00:00 2001 From: Chad Fulton Date: Sun, 16 Aug 2015 00:41:44 -0700 Subject: [PATCH] ENH: Add VARMAX example notebook stub. --- examples/notebooks/statespace_varmax.ipynb | 140 +++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 examples/notebooks/statespace_varmax.ipynb diff --git a/examples/notebooks/statespace_varmax.ipynb b/examples/notebooks/statespace_varmax.ipynb new file mode 100644 index 00000000000..cce39bb9c45 --- /dev/null +++ b/examples/notebooks/statespace_varmax.ipynb @@ -0,0 +1,140 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# VARMAX models\n", + "\n", + "This is a notebook stub for VARMAX models. Full development will be done after impulse response functions are available." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "import numpy as np\n", + "import pandas as pd\n", + "import statsmodels.api as sm\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "dta = sm.datasets.webuse('lutkepohl2', 'http://www.stata-press.com/data/r12/')\n", + "dta.index = dta.qtr\n", + "endog = dta.ix['1960-04-01':'1978-10-01', ['dln_inv', 'dln_inc', 'dln_consump']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Model specification\n", + "\n", + "The `VARMAX` class in Statsmodels allows estimation of VAR, VMA, and VARMA models (through the `order` argument), optionally with a constant term (via the `trend` argument). Exogenous regressors may also be included (as usual in Statsmodels, by the `exog` argument), and in this way a time trend may be added. Finally, the class allows measurement error (via the `measurement_error` argument) and allows specifying either a diagonal or unstructured innovation covariance matrix (via the `error_cov_type` argument)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 1: VAR\n", + "\n", + "Below is a simple VARX(2) model in two endogenous variables and an exogenous series, but no constant term. Notice that we needed to allow for more iterations than the default (which is `maxiter=50`) in order for the likelihood estimation to converge. This is not unusual in VAR models which have to estimate a large number of parameters, often on a relatively small number of time series: this model, for example, estimates 27 parameters off of 75 observations of 3 variables." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# exog = pd.Series(np.arange(len(endog)), index=endog.index, name='trend')\n", + "exog = endog['dln_consump']\n", + "mod = sm.tsa.VARMAX(endog[['dln_inv', 'dln_inc']], order=(2,0), trend='nc', exog=exog)\n", + "res = mod.fit(maxiter=1000)\n", + "print res.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 2: VMA\n", + "\n", + "A vector moving average model can also be formulated. Below we show a VMA(2) on the same data, but where the innovations to the process are uncorrelated. In this example we leave out the exogenous regressor but now include the constant term." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "mod = sm.tsa.VARMAX(endog[['dln_inv', 'dln_inc']], order=(0,2), error_cov_type='diagonal')\n", + "res = mod.fit(maxiter=1000)\n", + "print res.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Caution: VARMA(p,q) specifications\n", + "\n", + "Although the model allows estimating VARMA(p,q) specifications, these models are not identified without additional restrictions on the representation matrices, which are not built-in. For this reason, it is recommended that the user proceed with error (and indeed a warning is issued when these models are specified). Nonetheless, they may in some circumstances provide useful information." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "mod = sm.tsa.VARMAX(endog[['dln_inv', 'dln_inc']], order=(1,1))\n", + "res = mod.fit(maxiter=1000)\n", + "print res.summary()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +}