diff --git a/doc/examples/quick_start_example.ipynb b/doc/examples/quick_start_example.ipynb
index 76992e831..7e94dc0b9 100644
--- a/doc/examples/quick_start_example.ipynb
+++ b/doc/examples/quick_start_example.ipynb
@@ -18,7 +18,9 @@
{
"cell_type": "code",
"execution_count": 1,
- "metadata": {},
+ "metadata": {
+ "collapsed": false
+ },
"outputs": [
{
"name": "stdout",
@@ -74,7 +76,9 @@
{
"cell_type": "code",
"execution_count": 2,
- "metadata": {},
+ "metadata": {
+ "collapsed": true
+ },
"outputs": [],
"source": [
"# this is a dataset from R\n",
@@ -110,7 +114,9 @@
{
"cell_type": "code",
"execution_count": 3,
- "metadata": {},
+ "metadata": {
+ "collapsed": true
+ },
"outputs": [],
"source": [
"from pyramid.arima import ARIMA\n",
@@ -128,7 +134,9 @@
{
"cell_type": "code",
"execution_count": 4,
- "metadata": {},
+ "metadata": {
+ "collapsed": true
+ },
"outputs": [],
"source": [
"fit = ARIMA(order=(1, 1, 1), seasonal_order=None).fit(y=wineind)"
@@ -146,8 +154,70 @@
{
"cell_type": "code",
"execution_count": 5,
- "metadata": {},
+ "metadata": {
+ "collapsed": false
+ },
"outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Fitting ARIMA: order=(1, 1, 2) seasonal_order=(0, 1, 1, 12); AIC=3066.771, BIC=3085.794\n",
+ "Fitting ARIMA: order=(1, 1, 1) seasonal_order=(0, 1, 1, 12); AIC=3066.811, BIC=3082.663\n",
+ "Fitting ARIMA: order=(1, 1, 1) seasonal_order=(1, 1, 1, 12); AIC=3067.666, BIC=3086.688\n",
+ "Fitting ARIMA: order=(1, 1, 2) seasonal_order=(1, 1, 1, 12); AIC=3068.086, BIC=3090.280\n",
+ "Fitting ARIMA: order=(1, 1, 2) seasonal_order=(0, 1, 2, 12); AIC=3067.766, BIC=3089.959\n",
+ "Fitting ARIMA: order=(1, 1, 3) seasonal_order=(0, 1, 1, 12); AIC=3068.842, BIC=3091.036\n",
+ "Fitting ARIMA: order=(1, 1, 1) seasonal_order=(2, 1, 1, 12); AIC=3070.302, BIC=3092.495\n",
+ "Fitting ARIMA: order=(1, 1, 1) seasonal_order=(1, 1, 2, 12); AIC=3068.757, BIC=3090.951\n",
+ "Fitting ARIMA: order=(1, 1, 1) seasonal_order=(0, 1, 2, 12); AIC=3067.669, BIC=3086.692\n",
+ "Fitting ARIMA: order=(1, 1, 3) seasonal_order=(1, 1, 1, 12); AIC=3070.214, BIC=3095.578\n",
+ "Fitting ARIMA: order=(1, 1, 2) seasonal_order=(2, 1, 1, 12); AIC=3069.948, BIC=3095.312\n",
+ "Fitting ARIMA: order=(2, 1, 1) seasonal_order=(0, 1, 1, 12); AIC=3067.485, BIC=3086.508\n",
+ "Fitting ARIMA: order=(1, 1, 2) seasonal_order=(1, 1, 2, 12); AIC=3069.717, BIC=3095.081\n",
+ "Fitting ARIMA: order=(2, 1, 1) seasonal_order=(1, 1, 1, 12); AIC=3068.672, BIC=3090.865\n",
+ "Fitting ARIMA: order=(1, 1, 1) seasonal_order=(2, 1, 2, 12); AIC=3070.103, BIC=3095.467\n",
+ "Fitting ARIMA: order=(2, 1, 1) seasonal_order=(0, 1, 2, 12); AIC=3068.503, BIC=3090.696\n",
+ "Fitting ARIMA: order=(1, 1, 3) seasonal_order=(0, 1, 2, 12); AIC=3069.854, BIC=3095.218\n",
+ "Fitting ARIMA: order=(2, 1, 2) seasonal_order=(0, 1, 1, 12); AIC=3068.701, BIC=3090.895\n",
+ "Fitting ARIMA: order=(2, 1, 1) seasonal_order=(2, 1, 1, 12); AIC=3070.641, BIC=3096.005\n",
+ "Fitting ARIMA: order=(2, 1, 2) seasonal_order=(1, 1, 1, 12); AIC=3070.025, BIC=3095.389\n",
+ "Fitting ARIMA: order=(1, 1, 3) seasonal_order=(2, 1, 1, 12); AIC=3072.048, BIC=3100.582\n",
+ "Fitting ARIMA: order=(1, 1, 3) seasonal_order=(1, 1, 2, 12); AIC=3071.758, BIC=3100.293\n",
+ "Fitting ARIMA: order=(1, 1, 2) seasonal_order=(2, 1, 2, 12); AIC=3069.992, BIC=3098.526\n",
+ "Fitting ARIMA: order=(2, 1, 1) seasonal_order=(1, 1, 2, 12); AIC=3070.503, BIC=3095.866\n",
+ "Fitting ARIMA: order=(2, 1, 3) seasonal_order=(0, 1, 1, 12); AIC=3070.642, BIC=3096.006\n",
+ "Fitting ARIMA: order=(2, 1, 2) seasonal_order=(0, 1, 2, 12); AIC=3069.726, BIC=3095.090\n",
+ "Fitting ARIMA: order=(2, 1, 3) seasonal_order=(1, 1, 1, 12); AIC=3071.523, BIC=3100.057\n",
+ "Fitting ARIMA: order=(2, 1, 2) seasonal_order=(2, 1, 1, 12); AIC=3071.901, BIC=3100.435\n",
+ "Fitting ARIMA: order=(2, 1, 2) seasonal_order=(1, 1, 2, 12); AIC=3071.683, BIC=3100.218\n",
+ "Fitting ARIMA: order=(1, 1, 3) seasonal_order=(2, 1, 2, 12); AIC=3072.042, BIC=3103.747\n",
+ "Fitting ARIMA: order=(3, 1, 1) seasonal_order=(0, 1, 1, 12); AIC=3069.393, BIC=3091.586\n",
+ "Fitting ARIMA: order=(3, 1, 1) seasonal_order=(1, 1, 1, 12); AIC=3070.667, BIC=3096.031\n",
+ "Fitting ARIMA: order=(2, 1, 1) seasonal_order=(2, 1, 2, 12); AIC=3071.047, BIC=3099.581\n",
+ "Fitting ARIMA: order=(3, 1, 1) seasonal_order=(0, 1, 2, 12); AIC=3070.436, BIC=3095.800\n",
+ "Fitting ARIMA: order=(2, 1, 3) seasonal_order=(0, 1, 2, 12); AIC=3071.600, BIC=3100.135\n",
+ "Fitting ARIMA: order=(3, 1, 2) seasonal_order=(0, 1, 1, 12); AIC=nan, BIC=nan\n",
+ "Fitting ARIMA: order=(3, 1, 2) seasonal_order=(0, 1, 2, 12); AIC=nan, BIC=nan\n",
+ "Fitting ARIMA: order=(3, 1, 2) seasonal_order=(1, 1, 1, 12); AIC=nan, BIC=nan\n",
+ "Fitting ARIMA: order=(3, 1, 2) seasonal_order=(1, 1, 2, 12); AIC=nan, BIC=nan\n",
+ "Fitting ARIMA: order=(3, 1, 2) seasonal_order=(2, 1, 1, 12); AIC=nan, BIC=nan\n",
+ "Fitting ARIMA: order=(3, 1, 2) seasonal_order=(2, 1, 2, 12); AIC=nan, BIC=nan\n",
+ "Fitting ARIMA: order=(3, 1, 3) seasonal_order=(0, 1, 1, 12); AIC=3072.626, BIC=3101.160\n",
+ "Fitting ARIMA: order=(3, 1, 1) seasonal_order=(2, 1, 1, 12); AIC=3072.617, BIC=3101.151\n",
+ "Fitting ARIMA: order=(3, 1, 1) seasonal_order=(1, 1, 2, 12); AIC=3072.395, BIC=3100.930\n",
+ "Fitting ARIMA: order=(2, 1, 2) seasonal_order=(2, 1, 2, 12); AIC=3072.043, BIC=3103.748\n",
+ "Fitting ARIMA: order=(3, 1, 3) seasonal_order=(1, 1, 1, 12); AIC=3073.539, BIC=3105.244\n",
+ "Fitting ARIMA: order=(2, 1, 3) seasonal_order=(1, 1, 2, 12); AIC=3073.554, BIC=3105.259\n",
+ "Fitting ARIMA: order=(2, 1, 3) seasonal_order=(2, 1, 1, 12); AIC=3073.517, BIC=3105.222\n",
+ "Fitting ARIMA: order=(3, 1, 3) seasonal_order=(0, 1, 2, 12); AIC=3073.580, BIC=3105.285\n",
+ "Fitting ARIMA: order=(2, 1, 3) seasonal_order=(2, 1, 2, 12); AIC=3074.239, BIC=3109.114\n",
+ "Fitting ARIMA: order=(3, 1, 1) seasonal_order=(2, 1, 2, 12); AIC=3072.623, BIC=3104.328\n",
+ "Fitting ARIMA: order=(3, 1, 3) seasonal_order=(2, 1, 1, 12); AIC=3075.530, BIC=3110.405\n",
+ "Fitting ARIMA: order=(3, 1, 3) seasonal_order=(1, 1, 2, 12); AIC=3075.561, BIC=3110.437\n",
+ "Fitting ARIMA: order=(3, 1, 3) seasonal_order=(2, 1, 2, 12); AIC=3077.492, BIC=3115.537\n"
+ ]
+ },
{
"data": {
"text/html": [
@@ -163,7 +233,7 @@
"
Date: | Fri, 02 Jun 2017 | AIC | 3066.771 | \n",
"\n",
"\n",
- " Time: | 11:21:21 | BIC | 3085.794 | \n",
+ " Time: | 12:36:29 | BIC | 3085.794 | \n",
"
\n",
"\n",
" Sample: | 0 | HQIC | 3074.487 | \n",
@@ -212,17 +282,51 @@
" Prob(H) (two-sided): | 0.54 | Kurtosis: | 4.31 | \n",
"
\n",
""
+ ],
+ "text/plain": [
+ "\n",
+ "\"\"\"\n",
+ " Statespace Model Results \n",
+ "==========================================================================================\n",
+ "Dep. Variable: y No. Observations: 176\n",
+ "Model: SARIMAX(1, 1, 2)x(0, 1, 1, 12) Log Likelihood -1527.386\n",
+ "Date: Fri, 02 Jun 2017 AIC 3066.771\n",
+ "Time: 12:36:29 BIC 3085.794\n",
+ "Sample: 0 HQIC 3074.487\n",
+ " - 176 \n",
+ "Covariance Type: opg \n",
+ "==============================================================================\n",
+ " coef std err z P>|z| [0.025 0.975]\n",
+ "------------------------------------------------------------------------------\n",
+ "intercept -100.7446 72.306 -1.393 0.164 -242.462 40.973\n",
+ "ar.L1 -0.5139 0.390 -1.319 0.187 -1.278 0.250\n",
+ "ma.L1 -0.0791 0.403 -0.196 0.844 -0.869 0.710\n",
+ "ma.L2 -0.4438 0.223 -1.988 0.047 -0.881 -0.006\n",
+ "ma.S.L12 -0.4021 0.054 -7.448 0.000 -0.508 -0.296\n",
+ "sigma2 7.663e+06 7.3e+05 10.500 0.000 6.23e+06 9.09e+06\n",
+ "===================================================================================\n",
+ "Ljung-Box (Q): 48.66 Jarque-Bera (JB): 21.62\n",
+ "Prob(Q): 0.16 Prob(JB): 0.00\n",
+ "Heteroskedasticity (H): 1.18 Skew: -0.61\n",
+ "Prob(H) (two-sided): 0.54 Kurtosis: 4.31\n",
+ "===================================================================================\n",
+ "\n",
+ "Warnings:\n",
+ "[1] Covariance matrix calculated using the outer product of gradients (complex-step).\n",
+ "[2] Covariance matrix is singular or near-singular, with condition number 8.15e+14. Standard errors may be unstable.\n",
+ "\"\"\""
]
},
- "output_type": "execute_result",
- "metadata": {}
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
}
],
"source": [
"from pyramid.arima import auto_arima\n",
"\n",
"fit = auto_arima(wineind, start_p=1, start_q=1, max_p=3, max_q=3, m=12,\n",
- " start_P=0, seasonal=True, n_jobs=-1, d=1, D=1,\n",
+ " start_P=0, seasonal=True, n_jobs=-1, d=1, D=1, trace=True,\n",
" error_action='ignore', # don't want to know if an order does not work\n",
" suppress_warnings=True) # don't want convergence warnings\n",
"\n",
@@ -240,8 +344,10 @@
},
{
"cell_type": "code",
- "execution_count": 9,
- "metadata": {},
+ "execution_count": 6,
+ "metadata": {
+ "collapsed": false
+ },
"outputs": [
{
"data": {
@@ -255,9 +361,9 @@
" 16734.91315808])"
]
},
- "execution_count": 9,
- "output_type": "execute_result",
- "metadata": {}
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
}
],
"source": [
@@ -274,8 +380,10 @@
},
{
"cell_type": "code",
- "execution_count": 10,
- "metadata": {},
+ "execution_count": 7,
+ "metadata": {
+ "collapsed": false
+ },
"outputs": [
{
"data": {
@@ -283,15 +391,102 @@
"\n",
" \n",
"
\n",
- "
Loading BokehJS ...\n",
+ "
Loading BokehJS ...\n",
"
"
]
},
- "output_type": "execute_result",
- "metadata": {}
+ "metadata": {},
+ "output_type": "display_data"
},
{
- "metadata": {}
+ "data": {
+ "application/javascript": [
+ "\n",
+ "(function(global) {\n",
+ " function now() {\n",
+ " return new Date();\n",
+ " }\n",
+ "\n",
+ " if (typeof (window._bokeh_onload_callbacks) === \"undefined\") {\n",
+ " window._bokeh_onload_callbacks = [];\n",
+ " }\n",
+ "\n",
+ " function run_callbacks() {\n",
+ " window._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n",
+ " delete window._bokeh_onload_callbacks\n",
+ " console.info(\"Bokeh: all callbacks have finished\");\n",
+ " }\n",
+ "\n",
+ " function load_libs(js_urls, callback) {\n",
+ " window._bokeh_onload_callbacks.push(callback);\n",
+ " if (window._bokeh_is_loading > 0) {\n",
+ " console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
+ " return null;\n",
+ " }\n",
+ " if (js_urls == null || js_urls.length === 0) {\n",
+ " run_callbacks();\n",
+ " return null;\n",
+ " }\n",
+ " console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
+ " window._bokeh_is_loading = js_urls.length;\n",
+ " for (var i = 0; i < js_urls.length; i++) {\n",
+ " var url = js_urls[i];\n",
+ " var s = document.createElement('script');\n",
+ " s.src = url;\n",
+ " s.async = false;\n",
+ " s.onreadystatechange = s.onload = function() {\n",
+ " window._bokeh_is_loading--;\n",
+ " if (window._bokeh_is_loading === 0) {\n",
+ " console.log(\"Bokeh: all BokehJS libraries loaded\");\n",
+ " run_callbacks()\n",
+ " }\n",
+ " };\n",
+ " s.onerror = function() {\n",
+ " console.warn(\"failed to load library \" + url);\n",
+ " };\n",
+ " console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
+ " document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
+ " }\n",
+ " };\n",
+ "\n",
+ " var js_urls = ['https://cdn.pydata.org/bokeh/release/bokeh-0.12.0.min.js', 'https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.0.min.js', 'https://cdn.pydata.org/bokeh/release/bokeh-compiler-0.12.0.min.js'];\n",
+ "\n",
+ " var inline_js = [\n",
+ " function(Bokeh) {\n",
+ " Bokeh.set_log_level(\"info\");\n",
+ " },\n",
+ " \n",
+ " function(Bokeh) {\n",
+ " Bokeh.$(\"#f70c02e8-0cb9-476a-ae7e-b303861dadc3\").text(\"BokehJS successfully loaded\");\n",
+ " },\n",
+ " function(Bokeh) {\n",
+ " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.12.0.min.css\");\n",
+ " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.0.min.css\");\n",
+ " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.0.min.css\");\n",
+ " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.0.min.css\");\n",
+ " }\n",
+ " ];\n",
+ "\n",
+ " function run_inline_js() {\n",
+ " for (var i = 0; i < inline_js.length; i++) {\n",
+ " inline_js[i](window.Bokeh);\n",
+ " }\n",
+ " }\n",
+ "\n",
+ " if (window._bokeh_is_loading === 0) {\n",
+ " console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
+ " run_inline_js();\n",
+ " } else {\n",
+ " load_libs(js_urls, function() {\n",
+ " console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n",
+ " run_inline_js();\n",
+ " });\n",
+ " }\n",
+ "}(this));"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
}
],
"source": [
@@ -301,8 +496,10 @@
},
{
"cell_type": "code",
- "execution_count": 11,
- "metadata": {},
+ "execution_count": 8,
+ "metadata": {
+ "collapsed": false
+ },
"outputs": [
{
"data": {
@@ -310,7 +507,7 @@
"\n",
"\n",
" \n",
""
]
},
- "output_type": "execute_result",
- "metadata": {}
+ "metadata": {},
+ "output_type": "display_data"
},
{
"data": {
"text/html": [
- "<Bokeh Notebook handle for In[11]>
"
+ "<Bokeh Notebook handle for In[8]>
"
+ ],
+ "text/plain": [
+ ""
]
},
- "output_type": "execute_result",
- "metadata": {}
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
}
],
"source": [
@@ -453,11 +654,11 @@
{
"cell_type": "code",
"execution_count": null,
- "metadata": {},
+ "metadata": {
+ "collapsed": true
+ },
"outputs": [],
- "source": [
- ""
- ]
+ "source": []
}
],
"metadata": {
@@ -470,7 +671,7 @@
"language_info": {
"codemirror_mode": {
"name": "ipython",
- "version": 2.0
+ "version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
@@ -482,4 +683,4 @@
},
"nbformat": 4,
"nbformat_minor": 0
-}
\ No newline at end of file
+}
diff --git a/pyramid/arima/auto.py b/pyramid/arima/auto.py
index f739f4dd9..bc9ccf442 100644
--- a/pyramid/arima/auto.py
+++ b/pyramid/arima/auto.py
@@ -413,14 +413,11 @@ def generator():
def _fit_arima(x, xreg, order, seasonal_order, start_params, trend, method, transparams,
solver, maxiter, disp, callback, fit_params, suppress_warnings, trace,
error_action):
- if trace:
- print('Fitting ARIMA: %s' % _fmt_order_info(order, seasonal_order))
-
try:
- return ARIMA(order=order, seasonal_order=seasonal_order, start_params=start_params,
- trend=trend, method=method, transparams=transparams,
- solver=solver, maxiter=maxiter, disp=disp,
- callback=callback, suppress_warnings=suppress_warnings)\
+ fit = ARIMA(order=order, seasonal_order=seasonal_order, start_params=start_params,
+ trend=trend, method=method, transparams=transparams,
+ solver=solver, maxiter=maxiter, disp=disp,
+ callback=callback, suppress_warnings=suppress_warnings)\
.fit(x, exogenous=xreg, **fit_params)
# for non-stationarity errors, return None
@@ -430,8 +427,16 @@ def _fit_arima(x, xreg, order, seasonal_order, start_params, trend, method, tran
elif error_action == 'raise':
raise v
# otherwise it's 'ignore'
- return None
+ fit = None
+
+ # do trace
+ if trace:
+ print('Fit ARIMA: %s; AIC=%.3f, BIC=%.3f'
+ % (_fmt_order_info(order, seasonal_order),
+ fit.aic() if fit is not None else np.nan,
+ fit.bic() if fit is not None else np.nan))
+ return fit
def _fmt_order_info(order, seasonal_order):
return 'order=(%i, %i, %i)%s' \