Last active
December 20, 2015 08:39
-
-
Save lluang/6101786 to your computer and use it in GitHub Desktop.
This is an implementation of the Wilkinson Statistics Quiz of the Python data analysis libraries applied to the **NASTY** dataset. Currently based on Pandas. Todo: (1) Finish implementation and confirm that these are correct (2) Apply to other libraries (3) Write up bug submissions as appropriate.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"metadata": { | |
"name": "wilkinson_statistics_quiz.ipynb" | |
}, | |
"nbformat": 3, | |
"nbformat_minor": 0, | |
"worksheets": [ | |
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Wilkinson Statistics Quiz\n", | |
"=========================\n", | |
"\n", | |
"McCullogh and Yalta (2013) [1] recently evaluated the statistical functions in several well known cloud-based spreadsheet programs using a fairly basic set of tests [2]. They found, like the majority of their PC based counterparts, that the statistical functions in the spreadsheets fail. They note that there are well known algorithms that can in fact pass these tests using double precision therefore the problem is in the naive choices of algorithms used in computing these standard statistics. This is an implementation of the Wilkinson Statistics Quiz [3] of the Python data analysis libraries applied to the **NASTY** dataset. The data set dictionary *nastydict* below was created by using the pandas.read_csv('nasty.dat') as found at [1], then it was re-exported using pandas.to_dict(). Finally, some newlines were removed in the interest of aesthetics. No other processing was done to the data (i.e. the *nan* values found in dataset **MISS** were processed correctly by pandas on read.)\n", | |
"\n", | |
"[1] McCullough, Bruce D, and A Talha Yalta. 2013. \u201cSpreadsheets in the Cloud - Not Ready Yet.\u201d Journal of Statistical Software 52 (7): 1\u201314. http://www.jstatsoft.org/v52/i07.\n", | |
" \n", | |
"[2] Wilkinson, Leland. 1994. \u201cPractical Guidelines for Testing Statistical Software.\u201d In Computational Statistics: Papers Collected on the Occasion of the 25th Conference on Statistical Computing at Schlo\u00df Reisensburg (Contributions to Statistics), edited by Peter Dirschedl and R\u00fcdiger Ostermann, 553. Physica-Verlag HD. ISBN: 379080813X\n", | |
" \n", | |
"[3] Wilkinson, Leland. 1985. \u201cSTATISTICS QUIZ.\u201d http://www.stanford.edu/~clint/bench/wilk.txt." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"import numpy as np\n", | |
"import pandas as pd\n", | |
"print(np.__version__)\n", | |
"print(pd.__version__)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"1.7.1\n", | |
"0.12.0\n" | |
] | |
} | |
], | |
"prompt_number": 1 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"nastydict = {'BIG': {0: 99999991, 1: 99999992, 2: 99999993, 3: 99999994, 4: 99999995,\n", | |
" 5: 99999996, 6: 99999997, 7: 99999998, 8: 99999999},\n", | |
" 'HUGE': {0: 1000000000000.0, 1: 2000000000000.0, 2: 3000000000000.0,\n", | |
" 3: 4000000000000.0, 4: 5000000000000.0, 5: 6000000000000.0,\n", | |
" 6: 7000000000000.0, 7: 8000000000000.0, 8: 9000000000000.0},\n", | |
" 'LITTLE': {0: 0.99999990999999999, 1: 0.99999992000000004, 2: 0.99999992999999998,\n", | |
" 3: 0.99999994000000003, 4: 0.99999994999999997, 5: 0.99999996000000002,\n", | |
" 6: 0.99999996999999996, 7: 0.99999998000000001, 8: 0.99999998999999995},\n", | |
" 'MISS': {0: nan, 1: nan, 2: nan, 3: nan, 4: nan, 5: nan,\n", | |
" 6: nan, 7: nan, 8: nan},\n", | |
" 'OBS': {0: 'ONE', 1: 'TWO', 2: 'THREE', 3: 'FOUR', 4: 'FIVE', 5: 'SIX',\n", | |
" 6: 'SEVEN', 7: 'EIGHT', 8: 'NINE'},\n", | |
" 'ROUND': {0: 0.5, 1: 1.5, 2: 2.5, 3: 3.5, 4: 4.5, 5: 5.5,\n", | |
" 6: 6.5, 7: 7.5, 8: 8.5},\n", | |
" 'TINY': {0: 9.9999999999999998e-13, 1: 2e-12, 2: 2.9999999999999997e-12,\n", | |
" 3: 3.9999999999999999e-12, 4: 5.0000000000000005e-12, 5: 5.9999999999999995e-12,\n", | |
" 6: 7.0000000000000001e-12, 7: 7.9999999999999998e-12, 8: 8.9999999999999996e-12},\n", | |
" 'X': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9},\n", | |
" 'ZERO': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0}}" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 2 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"nasty = pd.DataFrame.from_dict(nastydict)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 3 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"nasty" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": [ | |
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>BIG</th>\n", | |
" <th>HUGE</th>\n", | |
" <th>LITTLE</th>\n", | |
" <th>MISS</th>\n", | |
" <th>OBS</th>\n", | |
" <th>ROUND</th>\n", | |
" <th>TINY</th>\n", | |
" <th>X</th>\n", | |
" <th>ZERO</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td> 99999991</td>\n", | |
" <td> 1.000000e+12</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" <td> ONE</td>\n", | |
" <td> 0.5</td>\n", | |
" <td> 1.000000e-12</td>\n", | |
" <td> 1</td>\n", | |
" <td> 0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td> 99999992</td>\n", | |
" <td> 2.000000e+12</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" <td> TWO</td>\n", | |
" <td> 1.5</td>\n", | |
" <td> 2.000000e-12</td>\n", | |
" <td> 2</td>\n", | |
" <td> 0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td> 99999993</td>\n", | |
" <td> 3.000000e+12</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" <td> THREE</td>\n", | |
" <td> 2.5</td>\n", | |
" <td> 3.000000e-12</td>\n", | |
" <td> 3</td>\n", | |
" <td> 0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td> 99999994</td>\n", | |
" <td> 4.000000e+12</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" <td> FOUR</td>\n", | |
" <td> 3.5</td>\n", | |
" <td> 4.000000e-12</td>\n", | |
" <td> 4</td>\n", | |
" <td> 0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td> 99999995</td>\n", | |
" <td> 5.000000e+12</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" <td> FIVE</td>\n", | |
" <td> 4.5</td>\n", | |
" <td> 5.000000e-12</td>\n", | |
" <td> 5</td>\n", | |
" <td> 0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td> 99999996</td>\n", | |
" <td> 6.000000e+12</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" <td> SIX</td>\n", | |
" <td> 5.5</td>\n", | |
" <td> 6.000000e-12</td>\n", | |
" <td> 6</td>\n", | |
" <td> 0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td> 99999997</td>\n", | |
" <td> 7.000000e+12</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" <td> SEVEN</td>\n", | |
" <td> 6.5</td>\n", | |
" <td> 7.000000e-12</td>\n", | |
" <td> 7</td>\n", | |
" <td> 0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td> 99999998</td>\n", | |
" <td> 8.000000e+12</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" <td> EIGHT</td>\n", | |
" <td> 7.5</td>\n", | |
" <td> 8.000000e-12</td>\n", | |
" <td> 8</td>\n", | |
" <td> 0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td> 99999999</td>\n", | |
" <td> 9.000000e+12</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" <td> NINE</td>\n", | |
" <td> 8.5</td>\n", | |
" <td> 9.000000e-12</td>\n", | |
" <td> 9</td>\n", | |
" <td> 0</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"output_type": "pyout", | |
"prompt_number": 4, | |
"text": [ | |
" BIG HUGE LITTLE MISS OBS ROUND TINY X ZERO\n", | |
"0 99999991 1.000000e+12 1 NaN ONE 0.5 1.000000e-12 1 0\n", | |
"1 99999992 2.000000e+12 1 NaN TWO 1.5 2.000000e-12 2 0\n", | |
"2 99999993 3.000000e+12 1 NaN THREE 2.5 3.000000e-12 3 0\n", | |
"3 99999994 4.000000e+12 1 NaN FOUR 3.5 4.000000e-12 4 0\n", | |
"4 99999995 5.000000e+12 1 NaN FIVE 4.5 5.000000e-12 5 0\n", | |
"5 99999996 6.000000e+12 1 NaN SIX 5.5 6.000000e-12 6 0\n", | |
"6 99999997 7.000000e+12 1 NaN SEVEN 6.5 7.000000e-12 7 0\n", | |
"7 99999998 8.000000e+12 1 NaN EIGHT 7.5 8.000000e-12 8 0\n", | |
"8 99999999 9.000000e+12 1 NaN NINE 8.5 9.000000e-12 9 0" | |
] | |
} | |
], | |
"prompt_number": 4 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Real Numbers\n", | |
"============\n", | |
"\n", | |
"Means\n", | |
"-----\n", | |
"\n", | |
"C. Compute basic statistic on all the variables. The means should \n", | |
"be the fifth value of all the variables (case FIVE)." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print(nasty['X'].mean())\n", | |
"nasty['X'].mean()==nasty['X'][4]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"5.0\n" | |
] | |
}, | |
{ | |
"output_type": "pyout", | |
"prompt_number": 5, | |
"text": [ | |
"True" | |
] | |
} | |
], | |
"prompt_number": 5 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print(nasty['ZERO'].mean())\n", | |
"nasty['ZERO'].mean()==nasty['ZERO'][4]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"0.0\n" | |
] | |
}, | |
{ | |
"output_type": "pyout", | |
"prompt_number": 6, | |
"text": [ | |
"True" | |
] | |
} | |
], | |
"prompt_number": 6 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print(nasty['MISS'].mean())\n", | |
"nasty['MISS'].mean()==nasty['MISS'][4]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"nan\n" | |
] | |
}, | |
{ | |
"output_type": "pyout", | |
"prompt_number": 7, | |
"text": [ | |
"False" | |
] | |
} | |
], | |
"prompt_number": 7 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print(nasty['BIG'].mean())\n", | |
"nasty['BIG'].mean()==nasty['BIG'][4]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"99999995.0\n" | |
] | |
}, | |
{ | |
"output_type": "pyout", | |
"prompt_number": 8, | |
"text": [ | |
"True" | |
] | |
} | |
], | |
"prompt_number": 8 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print(nasty['LITTLE'].mean())\n", | |
"nasty['LITTLE'].mean()==nasty['LITTLE'][4]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"0.99999995\n" | |
] | |
}, | |
{ | |
"output_type": "pyout", | |
"prompt_number": 9, | |
"text": [ | |
"True" | |
] | |
} | |
], | |
"prompt_number": 9 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print(nasty['HUGE'].mean())\n", | |
"nasty['HUGE'].mean()==nasty['HUGE'][4]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"5e+12\n" | |
] | |
}, | |
{ | |
"output_type": "pyout", | |
"prompt_number": 10, | |
"text": [ | |
"True" | |
] | |
} | |
], | |
"prompt_number": 10 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print(nasty['TINY'].mean())\n", | |
"nasty['TINY'].mean()==nasty['TINY'][4]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"5e-12\n" | |
] | |
}, | |
{ | |
"output_type": "pyout", | |
"prompt_number": 11, | |
"text": [ | |
"False" | |
] | |
} | |
], | |
"prompt_number": 11 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print(nasty['ROUND'].mean())\n", | |
"nasty['ROUND'].mean()==nasty['ROUND'][4]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"4.5\n" | |
] | |
}, | |
{ | |
"output_type": "pyout", | |
"prompt_number": 12, | |
"text": [ | |
"True" | |
] | |
} | |
], | |
"prompt_number": 12 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"I currently have **TINY** failing the test, although it does print out the correct results of 5e-12. This is probably due to floating point rounding so this should be considered as a Pass. Note that *nan* always fails tests of equality for **MISS**." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Standard deviation\n", | |
"------------------\n", | |
"\n", | |
"C. Compute basic statistic on all the variables. The standard\n", | |
"deviations should be \"undefined\" or missing for MISS, 0 for ZERO,\n", | |
"and 2.738612788 (times 10 to a power) for all the other variables.\n", | |
"\n", | |
"The standard deviation for all numerical columns is 2.738612788 times a power, except for **ZERO** and **MISS**" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print(nasty['X'].std())\n", | |
"print(nasty['ZERO'].std())\n", | |
"print(nasty['MISS'].std())\n", | |
"print(nasty['BIG'].std())\n", | |
"print(nasty['LITTLE'].std())\n", | |
"print(nasty['HUGE'].std())\n", | |
"print(nasty['TINY'].std())\n", | |
"print(nasty['ROUND'].std())" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"2.73861278753\n", | |
"0.0\n", | |
"nan\n", | |
"2.44948974278\n", | |
"2.98023223877e-08\n", | |
"2.73861278753e+12\n", | |
"2.73861278753e-12\n", | |
"2.73861278753\n" | |
] | |
} | |
], | |
"prompt_number": 13 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Using pandas 0.12, BIG and LITTLE fail, providing only one accurate digit each." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"PLOTTING\n", | |
"--------\n", | |
"\n", | |
"B. Plot HUGE against TINY in a scatterplot. The values should fall \n", | |
"on a line. Plot BIG against LITTLE. Again, the values should fall\n", | |
"on a line. Plot X against ZERO. Some programs cannot produce this\n", | |
"last plot because they cannot scale an axis for a constant." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"import matplotlib.pyplot as plt" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 14 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"plt.plot(nasty['HUGE'], nasty['TINY'])" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "pyout", | |
"prompt_number": 15, | |
"text": [ | |
"[<matplotlib.lines.Line2D at 0x3ddd390>]" | |
] | |
}, | |
{ | |
"output_type": "display_data", | |
"png": "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\n+3+suggPFbS8IAAAAABJRU5ErkJggg==\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x3d931d0>" | |
] | |
} | |
], | |
"prompt_number": 15 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"plt.plot(nasty['BIG'], nasty['LITTLE'])" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "pyout", | |
"prompt_number": 16, | |
"text": [ | |
"[<matplotlib.lines.Line2D at 0x4117550>]" | |
] | |
}, | |
{ | |
"output_type": "display_data", | |
"png": "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\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x3def5d0>" | |
] | |
} | |
], | |
"prompt_number": 16 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"plt.plot(nasty['X'], nasty['ZERO'])" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "pyout", | |
"prompt_number": 17, | |
"text": [ | |
"[<matplotlib.lines.Line2D at 0x41482d0>]" | |
] | |
}, | |
{ | |
"output_type": "display_data", | |
"png": "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\nLV68WBkZGaEe55YmTJign/3sZwH/fEcoHTx4UGVlZXrwwQeVlZWlv//971qyZEmoxwroBz/4gSTJ\n6XTqF7/4hd5///0QT9TTpEmTNHnyZKWnp2vEiBHKyspSeXl5qMfqVXl5uWbMmDFo/yyMz+dTYmKi\nJk2apAceeEALFy5UdXV1qMcKKD09XXv37tWBAwd0/fp1/+9f/S8CECTLspSdna2pU6dq5cqVoR6n\nV83Nzbp06ZIkqaWlRX/9618HXaxeeuklnT59Wo2Njdq5c6fmzJmjd955J9Rj9XDlyhW1tbVJuvFT\n4b59+3r9Bgs1h8Mhr9er69eva8+ePUpOTg71SL3685//rKysrFCP0atHH31UdXV1unjxov71r3+p\nvLxcKSkpoR4roK+++krSjfdU/vnPf2r69OkB1930N4FDKSsrS/v371dLS4vGjx+vF154QU899VSo\nx+rhwIEDKikp0bRp0xQbGytJ2rhx46A7IZw7d05PPvmkrl27prFjxyo/P9//U+xgZbPZQj1CQF9+\n+aUee+wxSdIDDzygZ599dlC+nyJJr7zyipYsWaLOzk4lJydr0aJFoR4poMuXL6uyslLbt28P9Si9\nuu+++7R+/Xo99thjunLlilJTUzV79uxQjxVQZmamvvrqK40aNUpvvfVWr+ts1mC/2AoAuCO4BAQA\nhiIAAGAoAgAAhiIAAGAoAgAAhiIAAGCo/wNKquKxz912XgAAAABJRU5ErkJggg==\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x411c6d0>" | |
] | |
} | |
], | |
"prompt_number": 17 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Correlation matrix\n", | |
"------------------\n", | |
"\n", | |
"D. Compute a correlation matrix on all the variables. All the\n", | |
"correlations, except for ZERO and MISS, shoud be exactly 1. ZERO\n", | |
"and MISS should have undefined or missing correlations with the\n", | |
"other variables. The same should go for SPEARMAN corelations, if\n", | |
"your program has them." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"nasty.corr()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": [ | |
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>BIG</th>\n", | |
" <th>HUGE</th>\n", | |
" <th>LITTLE</th>\n", | |
" <th>MISS</th>\n", | |
" <th>ROUND</th>\n", | |
" <th>TINY</th>\n", | |
" <th>X</th>\n", | |
" <th>ZERO</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>BIG</th>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>HUGE</th>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>LITTLE</th>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>MISS</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ROUND</th>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>TINY</th>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>X</th>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ZERO</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"output_type": "pyout", | |
"prompt_number": 18, | |
"text": [ | |
" BIG HUGE LITTLE MISS ROUND TINY X ZERO\n", | |
"BIG 1 1 1 NaN 1 1 1 NaN\n", | |
"HUGE 1 1 1 NaN 1 1 1 NaN\n", | |
"LITTLE 1 1 1 NaN 1 1 1 NaN\n", | |
"MISS NaN NaN NaN NaN NaN NaN NaN NaN\n", | |
"ROUND 1 1 1 NaN 1 1 1 NaN\n", | |
"TINY 1 1 1 NaN 1 1 1 NaN\n", | |
"X 1 1 1 NaN 1 1 1 NaN\n", | |
"ZERO NaN NaN NaN NaN NaN NaN NaN NaN" | |
] | |
} | |
], | |
"prompt_number": 18 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"nasty.corr(method='spearman')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": [ | |
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>BIG</th>\n", | |
" <th>HUGE</th>\n", | |
" <th>LITTLE</th>\n", | |
" <th>MISS</th>\n", | |
" <th>ROUND</th>\n", | |
" <th>TINY</th>\n", | |
" <th>X</th>\n", | |
" <th>ZERO</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>BIG</th>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>HUGE</th>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>LITTLE</th>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>MISS</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ROUND</th>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>TINY</th>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>X</th>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td> 1</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ZERO</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"output_type": "pyout", | |
"prompt_number": 19, | |
"text": [ | |
" BIG HUGE LITTLE MISS ROUND TINY X ZERO\n", | |
"BIG 1 1 1 NaN 1 1 1 NaN\n", | |
"HUGE 1 1 1 NaN 1 1 1 NaN\n", | |
"LITTLE 1 1 1 NaN 1 1 1 NaN\n", | |
"MISS NaN NaN NaN NaN NaN NaN NaN NaN\n", | |
"ROUND 1 1 1 NaN 1 1 1 NaN\n", | |
"TINY 1 1 1 NaN 1 1 1 NaN\n", | |
"X 1 1 1 NaN 1 1 1 NaN\n", | |
"ZERO NaN NaN NaN NaN NaN NaN NaN NaN" | |
] | |
} | |
], | |
"prompt_number": 19 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Tabulate\n", | |
"\n", | |
"E. Tabulate X against X, using BIG as a case weight. The values \n", | |
"should appear on the diagonal and the total should be 899999955.\n", | |
"If the table cannot hold these values, forget about working with \n", | |
"census data. You can also tabulate HUGE against TINY. There is no\n", | |
"reason a tabulation program should not be able to digtinguish \n", | |
"different values regardless of their magnitude." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Regression\n", | |
"==========\n", | |
"\n", | |
"Regress BIG on X. The constant should be 99999990 and the\n", | |
"regression coefficient should be 1." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"import statsmodels\n", | |
"import statsmodels.api as sm\n", | |
"statsmodels.__version__" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "pyout", | |
"prompt_number": 20, | |
"text": [ | |
"'0.4.3'" | |
] | |
} | |
], | |
"prompt_number": 20 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"X = nasty['X']\n", | |
"Y = nasty['BIG']\n", | |
"X = sm.add_constant(X)\n", | |
"big_x = sm.OLS(Y, X).fit()\n", | |
"big_x.summary()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stderr", | |
"text": [ | |
"/home/lluang/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/statsmodels/tools/tools.py:306: FutureWarning: The default of `prepend` will be changed to True in 0.5.0, use explicit prepend\n", | |
" FutureWarning)\n", | |
"/home/lluang/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/scipy/stats/stats.py:1276: UserWarning: kurtosistest only valid for n>=20 ... continuing anyway, n=9\n", | |
" int(n))\n" | |
] | |
}, | |
{ | |
"html": [ | |
"<table class=\"simpletable\">\n", | |
"<caption>OLS Regression Results</caption>\n", | |
"<tr>\n", | |
" <th>Dep. Variable:</th> <td>BIG</td> <th> R-squared: </th> <td> 1.000</td> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Model:</th> <td>OLS</td> <th> Adj. R-squared: </th> <td> 1.000</td> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Method:</th> <td>Least Squares</td> <th> F-statistic: </th> <td>1.478e+16</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Date:</th> <td>Sun, 28 Jul 2013</td> <th> Prob (F-statistic):</th> <td>6.73e-55</td> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Time:</th> <td>22:20:08</td> <th> Log-Likelihood: </th> <td> 137.48</td> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>No. Observations:</th> <td> 9</td> <th> AIC: </th> <td> -271.0</td> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Df Residuals:</th> <td> 7</td> <th> BIC: </th> <td> -270.6</td> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Df Model:</th> <td> 1</td> <th> </th> <td> </td> \n", | |
"</tr>\n", | |
"</table>\n", | |
"<table class=\"simpletable\">\n", | |
"<tr>\n", | |
" <td></td> <th>coef</th> <th>std err</th> <th>t</th> <th>P>|t|</th> <th>[95.0% Conf. Int.]</th> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>X</th> <td> 1.0000</td> <td> 8.23e-09</td> <td> 1.22e+08</td> <td> 0.000</td> <td> 1.000 1.000</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>const</th> <td> 1e+08</td> <td> 4.63e-08</td> <td> 2.16e+15</td> <td> 0.000</td> <td> 1e+08 1e+08</td>\n", | |
"</tr>\n", | |
"</table>\n", | |
"<table class=\"simpletable\">\n", | |
"<tr>\n", | |
" <th>Omnibus:</th> <td> 2.026</td> <th> Durbin-Watson: </th> <td> 0.047</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Prob(Omnibus):</th> <td> 0.363</td> <th> Jarque-Bera (JB): </th> <td> 0.796</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Skew:</th> <td>-0.061</td> <th> Prob(JB): </th> <td> 0.672</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Kurtosis:</th> <td> 1.548</td> <th> Cond. No. </th> <td> 12.6</td>\n", | |
"</tr>\n", | |
"</table>" | |
], | |
"output_type": "pyout", | |
"prompt_number": 21, | |
"text": [ | |
"<class 'statsmodels.iolib.summary.Summary'>\n", | |
"\"\"\"\n", | |
" OLS Regression Results \n", | |
"==============================================================================\n", | |
"Dep. Variable: BIG R-squared: 1.000\n", | |
"Model: OLS Adj. R-squared: 1.000\n", | |
"Method: Least Squares F-statistic: 1.478e+16\n", | |
"Date: Sun, 28 Jul 2013 Prob (F-statistic): 6.73e-55\n", | |
"Time: 22:20:08 Log-Likelihood: 137.48\n", | |
"No. Observations: 9 AIC: -271.0\n", | |
"Df Residuals: 7 BIC: -270.6\n", | |
"Df Model: 1 \n", | |
"==============================================================================\n", | |
" coef std err t P>|t| [95.0% Conf. Int.]\n", | |
"------------------------------------------------------------------------------\n", | |
"X 1.0000 8.23e-09 1.22e+08 0.000 1.000 1.000\n", | |
"const 1e+08 4.63e-08 2.16e+15 0.000 1e+08 1e+08\n", | |
"==============================================================================\n", | |
"Omnibus: 2.026 Durbin-Watson: 0.047\n", | |
"Prob(Omnibus): 0.363 Jarque-Bera (JB): 0.796\n", | |
"Skew: -0.061 Prob(JB): 0.672\n", | |
"Kurtosis: 1.548 Cond. No. 12.6\n", | |
"==============================================================================\n", | |
"\"\"\"" | |
] | |
} | |
], | |
"prompt_number": 21 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Missing data\n", | |
"============\n", | |
"\n", | |
"A. Use the NASTY dataset above on the following transformation:\n", | |
"\n", | |
" IF MISS = 3 THEN TEST = 1\n", | |
" ELSE TEST = 2\n", | |
"\n", | |
" If a package does not have an else statement (a serious omission if\n", | |
" you are doing a lot of IF-THEN transformations), you can code the\n", | |
" second statement as \"IF MISS <> 3 THEN TEST = 2\" where <> is \"not\n", | |
" equal\". TEST should have the value 2 for all cases because MISS\n", | |
" does not anywhere equal 3 (i.e. missing values do not equal 3).\n", | |
" Some packages have an \"indeterminate\" value if MISS=<missing> and\n", | |
" assign neither 1 or 2 to TEST. That is OK provided they assign\n", | |
" a missing value to TEST. IF the package assigns any other value to\n", | |
" TEST (say, 1), don't trust it for any logical comparisons.\n", | |
"\n", | |
"B. Use the NASTY dataset on the following calculation:\n", | |
"\n", | |
" IF MISS = <missing> THEN MISS = MISS + 1\n", | |
"\n", | |
" This transformation should leave the values of MISS as missing (you\n", | |
" cannot add 1 to something that is missing).\n", | |
" \n", | |
"C. Use the NASTY dataset and tabulate MISS against ZERO. You\n", | |
" should have one cell with 9 cases in it. This ability to tabulate\n", | |
" missing values against other variables is essential for analyzing\n", | |
" patterns of missing data in a file. Now tabulate MISS against ZERO\n", | |
" excluding missing values from the tablulation. You should be \n", | |
" notified that there are no non-missing values to tabulate." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"[1 if nasty['MISS'][i]==3 else 2 for i in range(len(nasty['MISS']))]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "pyout", | |
"prompt_number": 22, | |
"text": [ | |
"[2, 2, 2, 2, 2, 2, 2, 2, 2]" | |
] | |
} | |
], | |
"prompt_number": 22 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"[np.nan if np.isnan(nasty['MISS'][i]) else nasty['MISS'][i] +1 for i in range(len(nasty['MISS']))]" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "pyout", | |
"prompt_number": 23, | |
"text": [ | |
"[nan, nan, nan, nan, nan, nan, nan, nan, nan]" | |
] | |
} | |
], | |
"prompt_number": 23 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Regression\n", | |
"==========\n", | |
"\n", | |
"A. Take the NASTY dataset above.\n", | |
"--------------------------------\n", | |
"\n", | |
"Use the variable X as a\n", | |
" basis for computing polynomials. Namely, compute X1=X, X2=X*X,\n", | |
" X3=X*X*X, and so on up to 9 products. Use the algebraic\n", | |
" transformation language within the statistical package itself. You\n", | |
" will end up with 9 variables. Now regress X1 on X2-X9 (a perfect\n", | |
" fit). If the package balks (singular or roundoff error messages),\n", | |
" try X1 on X2-X8, and so on. Most packages cannot handle more than\n", | |
" a few polynomials.\n", | |
"\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"X = [[nasty['X'][i], nasty['X'][i]*nasty['X'][i], nasty['X'][i]*nasty['X'][i]*nasty['X'][i]] for i in range(len(nasty['X']))]\n", | |
"Y = nasty['X']\n", | |
"X = sm.add_constant(X)\n", | |
"x9_x = sm.OLS(Y, X).fit()\n", | |
"x9_x.summary()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": [ | |
"<table class=\"simpletable\">\n", | |
"<caption>OLS Regression Results</caption>\n", | |
"<tr>\n", | |
" <th>Dep. Variable:</th> <td>X</td> <th> R-squared: </th> <td> 1.000</td> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Model:</th> <td>OLS</td> <th> Adj. R-squared: </th> <td> 1.000</td> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Method:</th> <td>Least Squares</td> <th> F-statistic: </th> <td>4.734e+27</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Date:</th> <td>Sun, 28 Jul 2013</td> <th> Prob (F-statistic):</th> <td>4.74e-69</td> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Time:</th> <td>22:20:08</td> <th> Log-Likelihood: </th> <td> 263.15</td> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>No. Observations:</th> <td> 9</td> <th> AIC: </th> <td> -518.3</td> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Df Residuals:</th> <td> 5</td> <th> BIC: </th> <td> -517.5</td> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Df Model:</th> <td> 3</td> <th> </th> <td> </td> \n", | |
"</tr>\n", | |
"</table>\n", | |
"<table class=\"simpletable\">\n", | |
"<tr>\n", | |
" <td></td> <th>coef</th> <th>std err</th> <th>t</th> <th>P>|t|</th> <th>[95.0% Conf. Int.]</th> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>x1</th> <td> 1.0000</td> <td> 1.15e-13</td> <td> 8.68e+12</td> <td> 0.000</td> <td> 1.000 1.000</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>x2</th> <td> 6.661e-16</td> <td> 2.61e-14</td> <td> 0.026</td> <td> 0.981</td> <td>-6.64e-14 6.77e-14</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>x3</th> <td>-1.665e-16</td> <td> 1.72e-15</td> <td> -0.097</td> <td> 0.927</td> <td>-4.59e-15 4.26e-15</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>const</th> <td> 7.994e-15</td> <td> 1.41e-13</td> <td> 0.057</td> <td> 0.957</td> <td>-3.53e-13 3.69e-13</td>\n", | |
"</tr>\n", | |
"</table>\n", | |
"<table class=\"simpletable\">\n", | |
"<tr>\n", | |
" <th>Omnibus:</th> <td> 2.114</td> <th> Durbin-Watson: </th> <td> 0.098</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Prob(Omnibus):</th> <td> 0.347</td> <th> Jarque-Bera (JB): </th> <td> 1.170</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Skew:</th> <td> 0.839</td> <th> Prob(JB): </th> <td> 0.557</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Kurtosis:</th> <td> 2.448</td> <th> Cond. No. </th> <td>2.77e+03</td>\n", | |
"</tr>\n", | |
"</table>" | |
], | |
"output_type": "pyout", | |
"prompt_number": 24, | |
"text": [ | |
"<class 'statsmodels.iolib.summary.Summary'>\n", | |
"\"\"\"\n", | |
" OLS Regression Results \n", | |
"==============================================================================\n", | |
"Dep. Variable: X R-squared: 1.000\n", | |
"Model: OLS Adj. R-squared: 1.000\n", | |
"Method: Least Squares F-statistic: 4.734e+27\n", | |
"Date: Sun, 28 Jul 2013 Prob (F-statistic): 4.74e-69\n", | |
"Time: 22:20:08 Log-Likelihood: 263.15\n", | |
"No. Observations: 9 AIC: -518.3\n", | |
"Df Residuals: 5 BIC: -517.5\n", | |
"Df Model: 3 \n", | |
"==============================================================================\n", | |
" coef std err t P>|t| [95.0% Conf. Int.]\n", | |
"------------------------------------------------------------------------------\n", | |
"x1 1.0000 1.15e-13 8.68e+12 0.000 1.000 1.000\n", | |
"x2 6.661e-16 2.61e-14 0.026 0.981 -6.64e-14 6.77e-14\n", | |
"x3 -1.665e-16 1.72e-15 -0.097 0.927 -4.59e-15 4.26e-15\n", | |
"const 7.994e-15 1.41e-13 0.057 0.957 -3.53e-13 3.69e-13\n", | |
"==============================================================================\n", | |
"Omnibus: 2.114 Durbin-Watson: 0.098\n", | |
"Prob(Omnibus): 0.347 Jarque-Bera (JB): 1.170\n", | |
"Skew: 0.839 Prob(JB): 0.557\n", | |
"Kurtosis: 2.448 Cond. No. 2.77e+03\n", | |
"==============================================================================\n", | |
"\n", | |
"The condition number is large, 2.77e+03. This might indicate that there are\n", | |
"strong multicollinearity or other numerical problems.\n", | |
"\"\"\"" | |
] | |
} | |
], | |
"prompt_number": 24 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"B. Regress X on X \n", | |
"------------------\n", | |
" \n", | |
"The constant should be exactly 0 and the\n", | |
"regression coefficient should be 1. This is a perfectly valid\n", | |
"regression. The program should not complain.\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"X = nasty['X']\n", | |
"Y = nasty['X']\n", | |
"X = sm.add_constant(X)\n", | |
"x_x = sm.OLS(Y, X).fit()\n", | |
"x_x.summary()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": [ | |
"<table class=\"simpletable\">\n", | |
"<caption>OLS Regression Results</caption>\n", | |
"<tr>\n", | |
" <th>Dep. Variable:</th> <td>X</td> <th> R-squared: </th> <td> 1.000</td> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Model:</th> <td>OLS</td> <th> Adj. R-squared: </th> <td> 1.000</td> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Method:</th> <td>Least Squares</td> <th> F-statistic: </th> <td>1.674e+30</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Date:</th> <td>Sun, 28 Jul 2013</td> <th> Prob (F-statistic):</th> <td>4.35e-104</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Time:</th> <td>22:20:08</td> <th> Log-Likelihood: </th> <td> 283.10</td> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>No. Observations:</th> <td> 9</td> <th> AIC: </th> <td> -562.2</td> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Df Residuals:</th> <td> 7</td> <th> BIC: </th> <td> -561.8</td> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Df Model:</th> <td> 1</td> <th> </th> <td> </td> \n", | |
"</tr>\n", | |
"</table>\n", | |
"<table class=\"simpletable\">\n", | |
"<tr>\n", | |
" <td></td> <th>coef</th> <th>std err</th> <th>t</th> <th>P>|t|</th> <th>[95.0% Conf. Int.]</th> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>X</th> <td> 1.0000</td> <td> 7.73e-16</td> <td> 1.29e+15</td> <td> 0.000</td> <td> 1.000 1.000</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>const</th> <td> 2.887e-15</td> <td> 4.35e-15</td> <td> 0.664</td> <td> 0.528</td> <td> -7.4e-15 1.32e-14</td>\n", | |
"</tr>\n", | |
"</table>\n", | |
"<table class=\"simpletable\">\n", | |
"<tr>\n", | |
" <th>Omnibus:</th> <td> 1.380</td> <th> Durbin-Watson: </th> <td> 0.013</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Prob(Omnibus):</th> <td> 0.501</td> <th> Jarque-Bera (JB): </th> <td> 0.781</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Skew:</th> <td>-0.327</td> <th> Prob(JB): </th> <td> 0.677</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Kurtosis:</th> <td> 1.714</td> <th> Cond. No. </th> <td> 12.6</td>\n", | |
"</tr>\n", | |
"</table>" | |
], | |
"output_type": "pyout", | |
"prompt_number": 25, | |
"text": [ | |
"<class 'statsmodels.iolib.summary.Summary'>\n", | |
"\"\"\"\n", | |
" OLS Regression Results \n", | |
"==============================================================================\n", | |
"Dep. Variable: X R-squared: 1.000\n", | |
"Model: OLS Adj. R-squared: 1.000\n", | |
"Method: Least Squares F-statistic: 1.674e+30\n", | |
"Date: Sun, 28 Jul 2013 Prob (F-statistic): 4.35e-104\n", | |
"Time: 22:20:08 Log-Likelihood: 283.10\n", | |
"No. Observations: 9 AIC: -562.2\n", | |
"Df Residuals: 7 BIC: -561.8\n", | |
"Df Model: 1 \n", | |
"==============================================================================\n", | |
" coef std err t P>|t| [95.0% Conf. Int.]\n", | |
"------------------------------------------------------------------------------\n", | |
"X 1.0000 7.73e-16 1.29e+15 0.000 1.000 1.000\n", | |
"const 2.887e-15 4.35e-15 0.664 0.528 -7.4e-15 1.32e-14\n", | |
"==============================================================================\n", | |
"Omnibus: 1.380 Durbin-Watson: 0.013\n", | |
"Prob(Omnibus): 0.501 Jarque-Bera (JB): 0.781\n", | |
"Skew: -0.327 Prob(JB): 0.677\n", | |
"Kurtosis: 1.714 Cond. No. 12.6\n", | |
"==============================================================================\n", | |
"\"\"\"" | |
] | |
} | |
], | |
"prompt_number": 25 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"C. Regress X on BIG and LITTLE (two predictors)\n", | |
"-----------------------------------------------\n", | |
" \n", | |
"The program should tell you that this model is \"singular\" because BIG and\n", | |
"LITTLE are linear combinations of each other. Cryptic error\n", | |
"messages are unacceptable here. Singularity is the most\n", | |
"fundamental regression error.\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"Y = nasty['X']\n", | |
"X = [[nasty['BIG'][i], nasty['LITTLE'][i]] for i in range(len(nasty['BIG']))]\n", | |
"X=sm.add_constant(X)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 26 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"X" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "pyout", | |
"prompt_number": 27, | |
"text": [ | |
"array([[ 9.99999910e+07, 9.99999910e-01, 1.00000000e+00],\n", | |
" [ 9.99999920e+07, 9.99999920e-01, 1.00000000e+00],\n", | |
" [ 9.99999930e+07, 9.99999930e-01, 1.00000000e+00],\n", | |
" [ 9.99999940e+07, 9.99999940e-01, 1.00000000e+00],\n", | |
" [ 9.99999950e+07, 9.99999950e-01, 1.00000000e+00],\n", | |
" [ 9.99999960e+07, 9.99999960e-01, 1.00000000e+00],\n", | |
" [ 9.99999970e+07, 9.99999970e-01, 1.00000000e+00],\n", | |
" [ 9.99999980e+07, 9.99999980e-01, 1.00000000e+00],\n", | |
" [ 9.99999990e+07, 9.99999990e-01, 1.00000000e+00]])" | |
] | |
} | |
], | |
"prompt_number": 27 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"big_little_x = sm.OLS(Y, X).fit()\n", | |
"big_little_x.summary()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": [ | |
"<table class=\"simpletable\">\n", | |
"<caption>OLS Regression Results</caption>\n", | |
"<tr>\n", | |
" <th>Dep. Variable:</th> <td>X</td> <th> R-squared: </th> <td> 0.000</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Model:</th> <td>OLS</td> <th> Adj. R-squared: </th> <td> 0.000</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Method:</th> <td>Least Squares</td> <th> F-statistic: </th> <td> inf</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Date:</th> <td>Sun, 28 Jul 2013</td> <th> Prob (F-statistic):</th> <td> nan</td> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Time:</th> <td>22:20:08</td> <th> Log-Likelihood: </th> <td> -21.307</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>No. Observations:</th> <td> 9</td> <th> AIC: </th> <td> 44.61</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Df Residuals:</th> <td> 8</td> <th> BIC: </th> <td> 44.81</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Df Model:</th> <td> 0</td> <th> </th> <td> </td> \n", | |
"</tr>\n", | |
"</table>\n", | |
"<table class=\"simpletable\">\n", | |
"<tr>\n", | |
" <td></td> <th>coef</th> <th>std err</th> <th>t</th> <th>P>|t|</th> <th>[95.0% Conf. Int.]</th> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>x1</th> <td> 5e-08</td> <td> 9.13e-09</td> <td> 5.477</td> <td> 0.001</td> <td> 2.89e-08 7.11e-08</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>x2</th> <td> 5e-16</td> <td> 9.13e-17</td> <td> 5.477</td> <td> 0.001</td> <td> 2.89e-16 7.11e-16</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>const</th> <td> 5e-16</td> <td> 9.13e-17</td> <td> 5.477</td> <td> 0.001</td> <td> 2.89e-16 7.11e-16</td>\n", | |
"</tr>\n", | |
"</table>\n", | |
"<table class=\"simpletable\">\n", | |
"<tr>\n", | |
" <th>Omnibus:</th> <td> 0.824</td> <th> Durbin-Watson: </th> <td> 0.133</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Prob(Omnibus):</th> <td> 0.662</td> <th> Jarque-Bera (JB): </th> <td> 0.567</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Skew:</th> <td> 0.000</td> <th> Prob(JB): </th> <td> 0.753</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Kurtosis:</th> <td> 1.770</td> <th> Cond. No. </th> <td> nan</td>\n", | |
"</tr>\n", | |
"</table>" | |
], | |
"output_type": "pyout", | |
"prompt_number": 28, | |
"text": [ | |
"<class 'statsmodels.iolib.summary.Summary'>\n", | |
"\"\"\"\n", | |
" OLS Regression Results \n", | |
"==============================================================================\n", | |
"Dep. Variable: X R-squared: 0.000\n", | |
"Model: OLS Adj. R-squared: 0.000\n", | |
"Method: Least Squares F-statistic: inf\n", | |
"Date: Sun, 28 Jul 2013 Prob (F-statistic): nan\n", | |
"Time: 22:20:08 Log-Likelihood: -21.307\n", | |
"No. Observations: 9 AIC: 44.61\n", | |
"Df Residuals: 8 BIC: 44.81\n", | |
"Df Model: 0 \n", | |
"==============================================================================\n", | |
" coef std err t P>|t| [95.0% Conf. Int.]\n", | |
"------------------------------------------------------------------------------\n", | |
"x1 5e-08 9.13e-09 5.477 0.001 2.89e-08 7.11e-08\n", | |
"x2 5e-16 9.13e-17 5.477 0.001 2.89e-16 7.11e-16\n", | |
"const 5e-16 9.13e-17 5.477 0.001 2.89e-16 7.11e-16\n", | |
"==============================================================================\n", | |
"Omnibus: 0.824 Durbin-Watson: 0.133\n", | |
"Prob(Omnibus): 0.662 Jarque-Bera (JB): 0.567\n", | |
"Skew: 0.000 Prob(JB): 0.753\n", | |
"Kurtosis: 1.770 Cond. No. nan\n", | |
"==============================================================================\n", | |
"\n", | |
"The smallest eigenvalue is -8.18e-15. This might indicate that there are\n", | |
"strong multicollinearity problems or that the design matrix is singular.\n", | |
"\"\"\"" | |
] | |
} | |
], | |
"prompt_number": 28 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Note that this is a failure because it did not report a sigularity" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"D. Regress ZERO on X.\n", | |
"---------------------\n", | |
" \n", | |
"The program should inform you that ZERO has\n", | |
"no variance or it should go ahead and compute the regression\n", | |
"and report a correlation and total sum of squares of exactly 0." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"X = nasty['ZERO']\n", | |
"Y = nasty['X']\n", | |
"X = sm.add_constant(X)\n", | |
"zero_x = sm.OLS(Y, X).fit()\n", | |
"zero_x.summary()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": [ | |
"<table class=\"simpletable\">\n", | |
"<caption>OLS Regression Results</caption>\n", | |
"<tr>\n", | |
" <th>Dep. Variable:</th> <td>X</td> <th> R-squared: </th> <td> 0.000</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Model:</th> <td>OLS</td> <th> Adj. R-squared: </th> <td> 0.000</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Method:</th> <td>Least Squares</td> <th> F-statistic: </th> <td> nan</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Date:</th> <td>Sun, 28 Jul 2013</td> <th> Prob (F-statistic):</th> <td> nan</td> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Time:</th> <td>22:20:08</td> <th> Log-Likelihood: </th> <td> -21.307</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>No. Observations:</th> <td> 9</td> <th> AIC: </th> <td> 44.61</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Df Residuals:</th> <td> 8</td> <th> BIC: </th> <td> 44.81</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Df Model:</th> <td> 0</td> <th> </th> <td> </td> \n", | |
"</tr>\n", | |
"</table>\n", | |
"<table class=\"simpletable\">\n", | |
"<tr>\n", | |
" <td></td> <th>coef</th> <th>std err</th> <th>t</th> <th>P>|t|</th> <th>[95.0% Conf. Int.]</th> \n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>ZERO</th> <td> 0</td> <td> 0</td> <td> nan</td> <td> nan</td> <td> 0 0</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>const</th> <td> 5.0000</td> <td> 0.913</td> <td> 5.477</td> <td> 0.001</td> <td> 2.895 7.105</td>\n", | |
"</tr>\n", | |
"</table>\n", | |
"<table class=\"simpletable\">\n", | |
"<tr>\n", | |
" <th>Omnibus:</th> <td> 1.861</td> <th> Durbin-Watson: </th> <td> 0.133</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Prob(Omnibus):</th> <td> 0.394</td> <th> Jarque-Bera (JB): </th> <td> 0.567</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Skew:</th> <td> 0.000</td> <th> Prob(JB): </th> <td> 0.753</td>\n", | |
"</tr>\n", | |
"<tr>\n", | |
" <th>Kurtosis:</th> <td> 1.770</td> <th> Cond. No. </th> <td> inf</td>\n", | |
"</tr>\n", | |
"</table>" | |
], | |
"output_type": "pyout", | |
"prompt_number": 29, | |
"text": [ | |
"<class 'statsmodels.iolib.summary.Summary'>\n", | |
"\"\"\"\n", | |
" OLS Regression Results \n", | |
"==============================================================================\n", | |
"Dep. Variable: X R-squared: 0.000\n", | |
"Model: OLS Adj. R-squared: 0.000\n", | |
"Method: Least Squares F-statistic: nan\n", | |
"Date: Sun, 28 Jul 2013 Prob (F-statistic): nan\n", | |
"Time: 22:20:08 Log-Likelihood: -21.307\n", | |
"No. Observations: 9 AIC: 44.61\n", | |
"Df Residuals: 8 BIC: 44.81\n", | |
"Df Model: 0 \n", | |
"==============================================================================\n", | |
" coef std err t P>|t| [95.0% Conf. Int.]\n", | |
"------------------------------------------------------------------------------\n", | |
"ZERO 0 0 nan nan 0 0\n", | |
"const 5.0000 0.913 5.477 0.001 2.895 7.105\n", | |
"==============================================================================\n", | |
"Omnibus: 1.861 Durbin-Watson: 0.133\n", | |
"Prob(Omnibus): 0.394 Jarque-Bera (JB): 0.567\n", | |
"Skew: 0.000 Prob(JB): 0.753\n", | |
"Kurtosis: 1.770 Cond. No. inf\n", | |
"==============================================================================\n", | |
"\n", | |
"The smallest eigenvalue is 0. This might indicate that there are\n", | |
"strong multicollinearity problems or that the design matrix is singular.\n", | |
"\"\"\"" | |
] | |
} | |
], | |
"prompt_number": 29 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"ANALYSIS OF VARIANCE\n", | |
"====================\n", | |
"\n", | |
"A. Simple contrasts.\n", | |
"---------------------\n", | |
"\n", | |
"The following data contain an unbalanced\n", | |
" design with a significant interaction. A least squares analysis\n", | |
" shows the main efefct for A is not significant, but this test is\n", | |
" not particularlrly meaningful because of the interaction. Test,\n", | |
" therefore, the simple constrast between A1 and A2 within B1. Then\n", | |
" test A1 vs. A2 within B2. Both tests should use the same residual\n", | |
" error term (separate t-tests are unacceptable). Several widely\n", | |
" used mainframe programs fail this test. Unless the program can\n", | |
" constrast any terms in a model (not just main effects), it cannot\n", | |
" handle this frequently encountered type of problem." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 29 | |
} | |
], | |
"metadata": {} | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment