{ "metadata": { "name": "model_checking_and_selection" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "import pandas as pd\n", "import numpy as np" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "%load_ext rmagic" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Robust ..." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%R -o data\n", "set.seed(3433); par(mfrow=c(1,2)); \n", "data <- rnorm(100,mean=seq(0,3,length=100),sd=seq(0.1,3,length=100))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "df = pd.DataFrame(zip(data, np.linspace(0, 3, num=100)), columns=['data', 'x'])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 33 }, { "cell_type": "code", "collapsed": false, "input": [ "from statsmodels.formula.api import ols\n", "from statsmodels.stats.sandwich_covariance import cov_hc3\n", "\n", "lm1 = ols('data ~ x', df).fit()\n", "\n", "cov_hc3(lm1)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 31, "text": [ "array([[ 0.05410024, -0.0476481 ],\n", " [-0.0476481 , 0.05368603]])" ] } ], "prompt_number": 31 }, { "cell_type": "code", "collapsed": false, "input": [ "lm1.normalized_cov_params" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Interceptx
Intercept 0.039406-0.019604
x-0.019604 0.013069
\n", "
" ], "output_type": "pyout", "prompt_number": 32, "text": [ " Intercept x\n", "Intercept 0.039406 -0.019604\n", "x -0.019604 0.013069" ] } ], "prompt_number": 32 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Robust linear modelling" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%R -o x,y\n", "set.seed(343)\n", "x <- seq(0,3,length=100); y <- rcauchy(100)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 35 }, { "cell_type": "code", "collapsed": false, "input": [ "df = pd.DataFrame(zip(x, y), columns=['x', 'y'])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 36 }, { "cell_type": "code", "collapsed": false, "input": [ "from statsmodels.formula.api import rlm\n", "\n", "lm1 = ols('y ~ x', df).fit()\n", "rlm1 = rlm('y ~ x', df).fit()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 38 }, { "cell_type": "code", "collapsed": false, "input": [ "lm1.params" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 39, "text": [ "Intercept 0.352298\n", "x -0.401058" ] } ], "prompt_number": 39 }, { "cell_type": "code", "collapsed": false, "input": [ "rlm1.params" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 40, "text": [ "Intercept 0.008537\n", "x -0.017875" ] } ], "prompt_number": 40 }, { "cell_type": "code", "collapsed": false, "input": [ "f, (ax1, ax2) = subplots(ncols=2)\n", "\n", "ax1.plot(df['x'], df['y'], 'o', color='grey')\n", "ax1.plot(df['x'], lm1.fittedvalues, linewidth=3)\n", "ax1.plot(df['x'], rlm1.fittedvalues, 'g', linewidth=3)\n", "ax1.set_xlabel('x')\n", "ax1.set_ylabel('y')\n", "\n", "ax2.plot(df['x'], df['y'], 'o', color='grey')\n", "ax2.plot(df['x'], lm1.fittedvalues, linewidth=3)\n", "ax2.plot(df['x'], rlm1.fittedvalues, 'g', linewidth=3)\n", "ax2.set_xlabel('x')\n", "ax2.set_ylabel('y')\n", "ax2.set_ylim([-5, 5])\n", "ax2.set_title('Zoomed in')\n", "\n", "f.set_size_inches(9, 3)\n", "f.tight_layout();" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "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\n" } ], "prompt_number": 55 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Model selection" ] }, { "cell_type": "code", "collapsed": false, "input": [ "movies = pd.read_csv('../data/movies.txt', sep='\\t')\n", "movies.columns = ['X', 'score', 'rating', 'genre', 'box_office', 'running_time']\n", "movies.head()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Xscoreratinggenrebox_officerunning_time
0 2 Fast 2 Furious 48.9 PG-13 action/adventure 127.146 107
1 28 Days Later 78.2 R horror 45.065 113
2 A Guy Thing 39.5 PG-13 rom comedy 15.545 101
3 A Man Apart 42.9 R action/adventure 26.248 110
4 A Mighty Wind 79.9 PG-13 comedy 17.781 91
\n", "
" ], "output_type": "pyout", "prompt_number": 58, "text": [ " X score rating genre box_office running_time\n", "0 2 Fast 2 Furious 48.9 PG-13 action/adventure 127.146 107\n", "1 28 Days Later 78.2 R horror 45.065 113\n", "2 A Guy Thing 39.5 PG-13 rom comedy 15.545 101\n", "3 A Man Apart 42.9 R action/adventure 26.248 110\n", "4 A Mighty Wind 79.9 PG-13 comedy 17.781 91" ] } ], "prompt_number": 58 }, { "cell_type": "code", "collapsed": false, "input": [ "# no stepwise regression\n", "lm1 = ols('score ~ box_office + running_time', movies).fit()\n", "lm1.summary()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "
OLS Regression Results
Dep. Variable: score R-squared: 0.212
Model: OLS Adj. R-squared: 0.201
Method: Least Squares F-statistic: 18.46
Date: Thu, 21 Feb 2013 Prob (F-statistic): 7.98e-08
Time: 23:49:35 Log-Likelihood: -554.61
No. Observations: 140 AIC: 1115.
Df Residuals: 137 BIC: 1124.
Df Model: 2
\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "
coef std err t P>|t| [95.0% Conf. Int.]
Intercept 37.2364 5.606 6.643 0.000 26.152 48.321
box_office 0.0824 0.018 4.495 0.000 0.046 0.119
running_time 0.1275 0.054 2.379 0.019 0.022 0.234
\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "
Omnibus: 2.420 Durbin-Watson: 2.124
Prob(Omnibus): 0.298 Jarque-Bera (JB): 2.230
Skew: 0.309 Prob(JB): 0.328
Kurtosis: 2.991 Cond. No. 677.
" ], "output_type": "pyout", "prompt_number": 74, "text": [ "\n", "\"\"\"\n", " OLS Regression Results \n", "==============================================================================\n", "Dep. Variable: score R-squared: 0.212\n", "Model: OLS Adj. R-squared: 0.201\n", "Method: Least Squares F-statistic: 18.46\n", "Date: Thu, 21 Feb 2013 Prob (F-statistic): 7.98e-08\n", "Time: 23:49:35 Log-Likelihood: -554.61\n", "No. Observations: 140 AIC: 1115.\n", "Df Residuals: 137 BIC: 1124.\n", "Df Model: 2 \n", "================================================================================\n", " coef std err t P>|t| [95.0% Conf. Int.]\n", "--------------------------------------------------------------------------------\n", "Intercept 37.2364 5.606 6.643 0.000 26.152 48.321\n", "box_office 0.0824 0.018 4.495 0.000 0.046 0.119\n", "running_time 0.1275 0.054 2.379 0.019 0.022 0.234\n", "==============================================================================\n", "Omnibus: 2.420 Durbin-Watson: 2.124\n", "Prob(Omnibus): 0.298 Jarque-Bera (JB): 2.230\n", "Skew: 0.309 Prob(JB): 0.328\n", "Kurtosis: 2.991 Cond. No. 677.\n", "==============================================================================\n", "\"\"\"" ] } ], "prompt_number": 74 }, { "cell_type": "code", "collapsed": false, "input": [ "# no regsubsets\n", "# no bic.glm" ], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }