├── README.md ├── 0. Updating The Dataset.ipynb ├── 11. Auto ARIMA.ipynb ├── 10. The GARCH model.ipynb └── 4. Analyzing prices using the AR model.ipynb /README.md: -------------------------------------------------------------------------------- 1 | # Time-series-analysis-in-Python 2 | I perform time series analysis of data from scratch. I also implement The Autoregressive (AR) Model, The Moving Average (MA) Model, The Autoregressive Moving Average (ARMA) Model, The Autoregressive Integrated Moving Average (ARIMA) Model, The ARCH Model, The GARCH model, Auto ARIMA, forecasting and exploring a business case. 3 | 4 | Index2018.csv is the dataset used for time series analysis in this project 5 | -------------------------------------------------------------------------------- /0. Updating The Dataset.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "# Importing the necessary package \n", 10 | "import yfinance " 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 2, 16 | "metadata": {}, 17 | "outputs": [], 18 | "source": [ 19 | "# Ignoring warning messages\n", 20 | "import warnings \n", 21 | "warnings.filterwarnings(\"ignore\")" 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": 3, 27 | "metadata": {}, 28 | "outputs": [ 29 | { 30 | "name": "stdout", 31 | "output_type": "stream", 32 | "text": [ 33 | "[*********************100%***********************] 4 of 4 downloaded\n" 34 | ] 35 | } 36 | ], 37 | "source": [ 38 | "# Using the .download() method to get our data\n", 39 | "\n", 40 | "raw_data = yfinance.download (tickers = \"^GSPC ^FTSE ^N225 ^GDAXI\", start = \"1994-01-07\", end = \"2019-09-27\", interval = \"1d\", group_by = 'ticker', auto_adjust = True, treads = True)\n", 41 | "\n", 42 | "# tickers -> The time series we are interested in - (in our case, these are the S&P, FTSE, NIKKEI and DAX)\n", 43 | "# start -> The starting date of our data set\n", 44 | "# end -> The ending date of our data set (at the time of upload, this is the current date)\n", 45 | "# interval -> The distance in time between two recorded observations. Since we're using daily closing prices, we set it equal to \"1d\", which indicates 1 day. \n", 46 | "# group_by -> The way we want to group the scraped data. Usually we want it to be \"ticker\", so that we have all the information about a time series in 1 variable.\n", 47 | "# auto_adjust -> Automatically adjust the closing prices for each period. \n", 48 | "# treads - > Whether to use threads for mass downloading. " 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": 4, 54 | "metadata": {}, 55 | "outputs": [], 56 | "source": [ 57 | "# Creating a back up copy in case we remove/alter elements of the data by mistake\n", 58 | "df_comp = raw_data.copy()" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": 5, 64 | "metadata": {}, 65 | "outputs": [], 66 | "source": [ 67 | "# Adding new columns to the data set\n", 68 | "df_comp['spx'] = df_comp['^GSPC'].Close\n", 69 | "df_comp['dax'] = df_comp['^GDAXI'].Close\n", 70 | "df_comp['ftse'] = df_comp['^FTSE'].Close\n", 71 | "df_comp['nikkei'] = df_comp['^N225'].Close" 72 | ] 73 | }, 74 | { 75 | "cell_type": "code", 76 | "execution_count": 6, 77 | "metadata": { 78 | "scrolled": true 79 | }, 80 | "outputs": [], 81 | "source": [ 82 | "df_comp = df_comp.iloc[1:] # Removing the first elements, since we always start 1 period before the first, due to time zone differences of closing prices\n", 83 | "del df_comp['^N225'] # Removing the original tickers of the data set\n", 84 | "del df_comp['^GSPC']\n", 85 | "del df_comp['^GDAXI']\n", 86 | "del df_comp['^FTSE']\n", 87 | "df_comp=df_comp.asfreq('b') # Setting the frequency of the data\n", 88 | "df_comp=df_comp.fillna(method='ffill') # Filling any missing values" 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": 7, 94 | "metadata": {}, 95 | "outputs": [ 96 | { 97 | "name": "stdout", 98 | "output_type": "stream", 99 | "text": [ 100 | " spx dax ftse nikkei\n", 101 | " \n", 102 | "Date \n", 103 | "1994-01-07 469.90 2224.95 3446.0 18124.01\n", 104 | "1994-01-10 475.27 2225.00 3440.6 18443.44\n", 105 | "1994-01-11 474.13 2228.10 3413.8 18485.25\n", 106 | "1994-01-12 474.17 2182.06 3372.0 18793.88\n", 107 | "1994-01-13 472.47 2142.37 3360.0 18577.26\n", 108 | " spx dax ftse nikkei\n", 109 | " \n", 110 | "Date \n", 111 | "2019-09-20 2992.07 12468.01 7344.9 22079.09\n", 112 | "2019-09-23 2991.78 12342.33 7326.1 22079.09\n", 113 | "2019-09-24 2966.60 12307.15 7291.4 22098.84\n", 114 | "2019-09-25 2984.87 12234.18 7290.0 22020.15\n", 115 | "2019-09-26 2977.62 12288.54 7351.1 22048.24\n" 116 | ] 117 | } 118 | ], 119 | "source": [ 120 | "print (df_comp.head()) # Displaying the first 5 elements to make sure the data was scraped correctly\n", 121 | "print (df_comp.tail()) # Making sure the last day we're including in the series are correct" 122 | ] 123 | } 124 | ], 125 | "metadata": { 126 | "kernelspec": { 127 | "display_name": "Python 3", 128 | "language": "python", 129 | "name": "python3" 130 | }, 131 | "language_info": { 132 | "codemirror_mode": { 133 | "name": "ipython", 134 | "version": 3 135 | }, 136 | "file_extension": ".py", 137 | "mimetype": "text/x-python", 138 | "name": "python", 139 | "nbconvert_exporter": "python", 140 | "pygments_lexer": "ipython3", 141 | "version": "3.7.4" 142 | } 143 | }, 144 | "nbformat": 4, 145 | "nbformat_minor": 2 146 | } 147 | -------------------------------------------------------------------------------- /11. Auto ARIMA.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "### Packages" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 1, 13 | "metadata": {}, 14 | "outputs": [], 15 | "source": [ 16 | "import numpy as np\n", 17 | "import pandas as pd\n", 18 | "import scipy\n", 19 | "import statsmodels.api as sm\n", 20 | "import matplotlib.pyplot as plt\n", 21 | "import seaborn as sns\n", 22 | "import sklearn\n", 23 | "from statsmodels.tsa.arima_model import ARIMA\n", 24 | "from arch import arch_model\n", 25 | "import seaborn as sns\n", 26 | "import yfinance\n", 27 | "import warnings\n", 28 | "warnings.filterwarnings(\"ignore\")\n", 29 | "sns.set()" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": {}, 35 | "source": [ 36 | "### Loading the data" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 2, 42 | "metadata": {}, 43 | "outputs": [ 44 | { 45 | "name": "stdout", 46 | "output_type": "stream", 47 | "text": [ 48 | "[*********************100%***********************] 4 of 4 downloaded\n" 49 | ] 50 | } 51 | ], 52 | "source": [ 53 | "raw_data = yfinance.download (tickers = \"^GSPC ^FTSE ^N225 ^GDAXI\", start = \"1994-01-07\", end = \"2018-01-29\", \n", 54 | " interval = \"1d\", group_by = 'ticker', auto_adjust = True, treads = True)" 55 | ] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "execution_count": 3, 60 | "metadata": {}, 61 | "outputs": [], 62 | "source": [ 63 | "df_comp = raw_data.copy()" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": 4, 69 | "metadata": {}, 70 | "outputs": [], 71 | "source": [ 72 | "df_comp['spx'] = df_comp['^GSPC'].Close[:]\n", 73 | "df_comp['dax'] = df_comp['^GDAXI'].Close[:]\n", 74 | "df_comp['ftse'] = df_comp['^FTSE'].Close[:]\n", 75 | "df_comp['nikkei'] = df_comp['^N225'].Close[:]" 76 | ] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": 5, 81 | "metadata": { 82 | "scrolled": true 83 | }, 84 | "outputs": [], 85 | "source": [ 86 | "df_comp = df_comp.iloc[1:]\n", 87 | "del df_comp['^N225']\n", 88 | "del df_comp['^GSPC']\n", 89 | "del df_comp['^GDAXI']\n", 90 | "del df_comp['^FTSE']\n", 91 | "df_comp=df_comp.asfreq('b')\n", 92 | "df_comp=df_comp.fillna(method='ffill')" 93 | ] 94 | }, 95 | { 96 | "cell_type": "markdown", 97 | "metadata": {}, 98 | "source": [ 99 | "### Creating Returns" 100 | ] 101 | }, 102 | { 103 | "cell_type": "code", 104 | "execution_count": 6, 105 | "metadata": {}, 106 | "outputs": [], 107 | "source": [ 108 | "df_comp['ret_spx'] = df_comp.spx.pct_change(1)*100\n", 109 | "df_comp['ret_ftse'] = df_comp.ftse.pct_change(1)*100\n", 110 | "df_comp['ret_dax'] = df_comp.dax.pct_change(1)*100\n", 111 | "df_comp['ret_nikkei'] = df_comp.nikkei.pct_change(1)*100" 112 | ] 113 | }, 114 | { 115 | "cell_type": "markdown", 116 | "metadata": {}, 117 | "source": [ 118 | "### Splitting the Data" 119 | ] 120 | }, 121 | { 122 | "cell_type": "code", 123 | "execution_count": 7, 124 | "metadata": {}, 125 | "outputs": [], 126 | "source": [ 127 | "size = int(len(df_comp)*0.8)\n", 128 | "df, df_test = df_comp.iloc[:size], df_comp.iloc[size:]" 129 | ] 130 | }, 131 | { 132 | "cell_type": "markdown", 133 | "metadata": {}, 134 | "source": [ 135 | "### Fitting a Model" 136 | ] 137 | }, 138 | { 139 | "cell_type": "code", 140 | "execution_count": 8, 141 | "metadata": {}, 142 | "outputs": [], 143 | "source": [ 144 | "from pmdarima.arima import auto_arima" 145 | ] 146 | }, 147 | { 148 | "cell_type": "code", 149 | "execution_count": 9, 150 | "metadata": {}, 151 | "outputs": [], 152 | "source": [ 153 | "model_auto = auto_arima(df.ret_ftse[1:])" 154 | ] 155 | }, 156 | { 157 | "cell_type": "code", 158 | "execution_count": 10, 159 | "metadata": {}, 160 | "outputs": [ 161 | { 162 | "data": { 163 | "text/plain": [ 164 | "ARIMA(maxiter=50, method='lbfgs', order=(2, 0, 5), out_of_sample_size=0,\n", 165 | " scoring='mse', scoring_args=None, seasonal_order=(0, 0, 0, 1),\n", 166 | " start_params=None, suppress_warnings=False, trend=None,\n", 167 | " with_intercept=True)" 168 | ] 169 | }, 170 | "execution_count": 10, 171 | "metadata": {}, 172 | "output_type": "execute_result" 173 | } 174 | ], 175 | "source": [ 176 | "model_auto" 177 | ] 178 | }, 179 | { 180 | "cell_type": "code", 181 | "execution_count": 11, 182 | "metadata": {}, 183 | "outputs": [ 184 | { 185 | "data": { 186 | "text/html": [ 187 | "\n", 188 | "\n", 189 | "\n", 190 | " \n", 191 | "\n", 192 | "\n", 193 | " \n", 194 | "\n", 195 | "\n", 196 | " \n", 197 | "\n", 198 | "\n", 199 | " \n", 200 | "\n", 201 | "\n", 202 | " \n", 203 | "\n", 204 | "\n", 205 | " \n", 206 | "\n", 207 | "\n", 208 | " \n", 209 | "\n", 210 | "
Statespace Model Results
Dep. Variable: y No. Observations: 5020
Model: SARIMAX(2, 0, 5) Log Likelihood -7885.690
Date: Fri, 03 Jan 2020 AIC 15789.380
Time: 10:19:03 BIC 15848.070
Sample: 0 HQIC 15809.946
- 5020
Covariance Type: opg
\n", 211 | "\n", 212 | "\n", 213 | " \n", 214 | "\n", 215 | "\n", 216 | " \n", 217 | "\n", 218 | "\n", 219 | " \n", 220 | "\n", 221 | "\n", 222 | " \n", 223 | "\n", 224 | "\n", 225 | " \n", 226 | "\n", 227 | "\n", 228 | " \n", 229 | "\n", 230 | "\n", 231 | " \n", 232 | "\n", 233 | "\n", 234 | " \n", 235 | "\n", 236 | "\n", 237 | " \n", 238 | "\n", 239 | "\n", 240 | " \n", 241 | "\n", 242 | "
coef std err z P>|z| [0.025 0.975]
intercept 0.0309 0.024 1.289 0.197 -0.016 0.078
ar.L1 0.1766 0.039 4.544 0.000 0.100 0.253
ar.L2 -0.8128 0.035 -22.984 0.000 -0.882 -0.743
ma.L1 -0.2005 0.038 -5.239 0.000 -0.275 -0.125
ma.L2 0.7654 0.037 20.436 0.000 0.692 0.839
ma.L3 -0.0953 0.012 -8.246 0.000 -0.118 -0.073
ma.L4 0.0112 0.009 1.229 0.219 -0.007 0.029
ma.L5 -0.1113 0.009 -12.960 0.000 -0.128 -0.094
sigma2 1.3550 0.014 94.014 0.000 1.327 1.383
\n", 243 | "\n", 244 | "\n", 245 | " \n", 246 | "\n", 247 | "\n", 248 | " \n", 249 | "\n", 250 | "\n", 251 | " \n", 252 | "\n", 253 | "\n", 254 | " \n", 255 | "\n", 256 | "
Ljung-Box (Q): 69.64 Jarque-Bera (JB): 6575.67
Prob(Q): 0.00 Prob(JB): 0.00
Heteroskedasticity (H): 2.00 Skew: -0.18
Prob(H) (two-sided): 0.00 Kurtosis: 8.60


Warnings:
[1] Covariance matrix calculated using the outer product of gradients (complex-step)." 257 | ], 258 | "text/plain": [ 259 | "\n", 260 | "\"\"\"\n", 261 | " Statespace Model Results \n", 262 | "==============================================================================\n", 263 | "Dep. Variable: y No. Observations: 5020\n", 264 | "Model: SARIMAX(2, 0, 5) Log Likelihood -7885.690\n", 265 | "Date: Fri, 03 Jan 2020 AIC 15789.380\n", 266 | "Time: 10:19:03 BIC 15848.070\n", 267 | "Sample: 0 HQIC 15809.946\n", 268 | " - 5020 \n", 269 | "Covariance Type: opg \n", 270 | "==============================================================================\n", 271 | " coef std err z P>|z| [0.025 0.975]\n", 272 | "------------------------------------------------------------------------------\n", 273 | "intercept 0.0309 0.024 1.289 0.197 -0.016 0.078\n", 274 | "ar.L1 0.1766 0.039 4.544 0.000 0.100 0.253\n", 275 | "ar.L2 -0.8128 0.035 -22.984 0.000 -0.882 -0.743\n", 276 | "ma.L1 -0.2005 0.038 -5.239 0.000 -0.275 -0.125\n", 277 | "ma.L2 0.7654 0.037 20.436 0.000 0.692 0.839\n", 278 | "ma.L3 -0.0953 0.012 -8.246 0.000 -0.118 -0.073\n", 279 | "ma.L4 0.0112 0.009 1.229 0.219 -0.007 0.029\n", 280 | "ma.L5 -0.1113 0.009 -12.960 0.000 -0.128 -0.094\n", 281 | "sigma2 1.3550 0.014 94.014 0.000 1.327 1.383\n", 282 | "===================================================================================\n", 283 | "Ljung-Box (Q): 69.64 Jarque-Bera (JB): 6575.67\n", 284 | "Prob(Q): 0.00 Prob(JB): 0.00\n", 285 | "Heteroskedasticity (H): 2.00 Skew: -0.18\n", 286 | "Prob(H) (two-sided): 0.00 Kurtosis: 8.60\n", 287 | "===================================================================================\n", 288 | "\n", 289 | "Warnings:\n", 290 | "[1] Covariance matrix calculated using the outer product of gradients (complex-step).\n", 291 | "\"\"\"" 292 | ] 293 | }, 294 | "execution_count": 11, 295 | "metadata": {}, 296 | "output_type": "execute_result" 297 | } 298 | ], 299 | "source": [ 300 | "model_auto.summary()" 301 | ] 302 | }, 303 | { 304 | "cell_type": "markdown", 305 | "metadata": {}, 306 | "source": [ 307 | "### Important Arguments" 308 | ] 309 | }, 310 | { 311 | "cell_type": "code", 312 | "execution_count": 14, 313 | "metadata": { 314 | "scrolled": true 315 | }, 316 | "outputs": [], 317 | "source": [ 318 | "model_auto = auto_arima(df_comp.ret_ftse[1:], exogenous = df_comp[['ret_spx', 'ret_dax', 'ret_nikkei']][1:], m = 5,\n", 319 | " max_order = None, max_p = 7, max_q = 7, max_d = 2, max_P = 4, max_Q = 4, max_D = 2,\n", 320 | " maxiter = 50, alpha = 0.05, n_jobs = -1, trend = 'ct', information_criterion = 'oob',\n", 321 | " out_of_sample = int(len(df_comp)*0.2))\n", 322 | "\n", 323 | "\n", 324 | "# !!! Important Note: In pdmarima v1.5.2, out_of_sample_size is replaced with out_of_sample, so make sure to use the latter!\n", 325 | "\n", 326 | "\n", 327 | "# exogenous -> outside factors (e.g other time series)\n", 328 | "# m -> seasonal cycle length\n", 329 | "# max_order -> maximum amount of variables to be used in the regression (p + q)\n", 330 | "# max_p -> maximum AR components\n", 331 | "# max_q -> maximum MA components\n", 332 | "# max_d -> maximum Integrations\n", 333 | "# maxiter -> maximum iterations we're giving the model to converge the coefficients (becomes harder as the order increases)\n", 334 | "# alpha -> level of significance, default is 5%, which we should be using most of the time\n", 335 | "# n_jobs -> how many models to fit at a time (-1 indicates \"as many as possible\")\n", 336 | "# trend -> \"ct\" usually\n", 337 | "# information_criterion -> 'aic', 'aicc', 'bic', 'hqic', 'oob' \n", 338 | "# (Akaike Information Criterion, Corrected Akaike Information Criterion,\n", 339 | "# Bayesian Information Criterion, Hannan-Quinn Information Criterion, or\n", 340 | "# \"out of bag\"--for validation scoring--respectively)\n", 341 | "# out_of_smaple -> validates the model selection (pass the entire dataset, and set 20% to be the out_of_sample_size)" 342 | ] 343 | }, 344 | { 345 | "cell_type": "code", 346 | "execution_count": 15, 347 | "metadata": {}, 348 | "outputs": [ 349 | { 350 | "data": { 351 | "text/html": [ 352 | "\n", 353 | "\n", 354 | "\n", 355 | " \n", 356 | "\n", 357 | "\n", 358 | " \n", 359 | "\n", 360 | "\n", 361 | " \n", 362 | "\n", 363 | "\n", 364 | " \n", 365 | "\n", 366 | "\n", 367 | " \n", 368 | "\n", 369 | "\n", 370 | " \n", 371 | "\n", 372 | "\n", 373 | " \n", 374 | "\n", 375 | "
Statespace Model Results
Dep. Variable: y No. Observations: 6276
Model: SARIMAX(2, 0, 2)x(1, 0, 1, 5) Log Likelihood -6340.661
Date: Fri, 03 Jan 2020 AIC 12705.322
Time: 10:34:50 BIC 12786.256
Sample: 01-10-1994 HQIC 12733.364
- 01-29-2018
Covariance Type: opg
\n", 376 | "\n", 377 | "\n", 378 | " \n", 379 | "\n", 380 | "\n", 381 | " \n", 382 | "\n", 383 | "\n", 384 | " \n", 385 | "\n", 386 | "\n", 387 | " \n", 388 | "\n", 389 | "\n", 390 | " \n", 391 | "\n", 392 | "\n", 393 | " \n", 394 | "\n", 395 | "\n", 396 | " \n", 397 | "\n", 398 | "\n", 399 | " \n", 400 | "\n", 401 | "\n", 402 | " \n", 403 | "\n", 404 | "\n", 405 | " \n", 406 | "\n", 407 | "\n", 408 | " \n", 409 | "\n", 410 | "\n", 411 | " \n", 412 | "\n", 413 | "\n", 414 | " \n", 415 | "\n", 416 | "
coef std err z P>|z| [0.025 0.975]
intercept -0.0043 0.009 -0.500 0.617 -0.021 0.013
drift -1.45e-06 2.72e-06 -0.533 0.594 -6.78e-06 3.88e-06
ret_spx 0.0958 0.006 16.947 0.000 0.085 0.107
ret_dax 0.5582 0.005 113.729 0.000 0.549 0.568
ret_nikkei 0.0702 0.004 16.547 0.000 0.062 0.079
ar.L1 -0.1932 0.101 -1.918 0.055 -0.390 0.004
ar.L2 0.5083 0.059 8.643 0.000 0.393 0.624
ma.L1 0.0863 0.101 0.855 0.393 -0.112 0.284
ma.L2 -0.5369 0.056 -9.535 0.000 -0.647 -0.427
ar.S.L5 0.0705 0.339 0.208 0.836 -0.595 0.736
ma.S.L5 -0.0987 0.339 -0.291 0.771 -0.764 0.567
sigma2 0.4404 0.004 99.131 0.000 0.432 0.449
\n", 417 | "\n", 418 | "\n", 419 | " \n", 420 | "\n", 421 | "\n", 422 | " \n", 423 | "\n", 424 | "\n", 425 | " \n", 426 | "\n", 427 | "\n", 428 | " \n", 429 | "\n", 430 | "
Ljung-Box (Q): 84.27 Jarque-Bera (JB): 15325.76
Prob(Q): 0.00 Prob(JB): 0.00
Heteroskedasticity (H): 0.54 Skew: 0.25
Prob(H) (two-sided): 0.00 Kurtosis: 10.64


Warnings:
[1] Covariance matrix calculated using the outer product of gradients (complex-step)." 431 | ], 432 | "text/plain": [ 433 | "\n", 434 | "\"\"\"\n", 435 | " Statespace Model Results \n", 436 | "=========================================================================================\n", 437 | "Dep. Variable: y No. Observations: 6276\n", 438 | "Model: SARIMAX(2, 0, 2)x(1, 0, 1, 5) Log Likelihood -6340.661\n", 439 | "Date: Fri, 03 Jan 2020 AIC 12705.322\n", 440 | "Time: 10:34:50 BIC 12786.256\n", 441 | "Sample: 01-10-1994 HQIC 12733.364\n", 442 | " - 01-29-2018 \n", 443 | "Covariance Type: opg \n", 444 | "==============================================================================\n", 445 | " coef std err z P>|z| [0.025 0.975]\n", 446 | "------------------------------------------------------------------------------\n", 447 | "intercept -0.0043 0.009 -0.500 0.617 -0.021 0.013\n", 448 | "drift -1.45e-06 2.72e-06 -0.533 0.594 -6.78e-06 3.88e-06\n", 449 | "ret_spx 0.0958 0.006 16.947 0.000 0.085 0.107\n", 450 | "ret_dax 0.5582 0.005 113.729 0.000 0.549 0.568\n", 451 | "ret_nikkei 0.0702 0.004 16.547 0.000 0.062 0.079\n", 452 | "ar.L1 -0.1932 0.101 -1.918 0.055 -0.390 0.004\n", 453 | "ar.L2 0.5083 0.059 8.643 0.000 0.393 0.624\n", 454 | "ma.L1 0.0863 0.101 0.855 0.393 -0.112 0.284\n", 455 | "ma.L2 -0.5369 0.056 -9.535 0.000 -0.647 -0.427\n", 456 | "ar.S.L5 0.0705 0.339 0.208 0.836 -0.595 0.736\n", 457 | "ma.S.L5 -0.0987 0.339 -0.291 0.771 -0.764 0.567\n", 458 | "sigma2 0.4404 0.004 99.131 0.000 0.432 0.449\n", 459 | "===================================================================================\n", 460 | "Ljung-Box (Q): 84.27 Jarque-Bera (JB): 15325.76\n", 461 | "Prob(Q): 0.00 Prob(JB): 0.00\n", 462 | "Heteroskedasticity (H): 0.54 Skew: 0.25\n", 463 | "Prob(H) (two-sided): 0.00 Kurtosis: 10.64\n", 464 | "===================================================================================\n", 465 | "\n", 466 | "Warnings:\n", 467 | "[1] Covariance matrix calculated using the outer product of gradients (complex-step).\n", 468 | "\"\"\"" 469 | ] 470 | }, 471 | "execution_count": 15, 472 | "metadata": {}, 473 | "output_type": "execute_result" 474 | } 475 | ], 476 | "source": [ 477 | "model_auto.summary()" 478 | ] 479 | } 480 | ], 481 | "metadata": { 482 | "kernelspec": { 483 | "display_name": "Python 3", 484 | "language": "python", 485 | "name": "python3" 486 | }, 487 | "language_info": { 488 | "codemirror_mode": { 489 | "name": "ipython", 490 | "version": 3 491 | }, 492 | "file_extension": ".py", 493 | "mimetype": "text/x-python", 494 | "name": "python", 495 | "nbconvert_exporter": "python", 496 | "pygments_lexer": "ipython3", 497 | "version": "3.6.7" 498 | } 499 | }, 500 | "nbformat": 4, 501 | "nbformat_minor": 2 502 | } 503 | -------------------------------------------------------------------------------- /10. The GARCH model.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## Importing the relevant packages" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 1, 13 | "metadata": {}, 14 | "outputs": [], 15 | "source": [ 16 | "import pandas as pd\n", 17 | "import numpy as np\n", 18 | "import matplotlib.pyplot as plt\n", 19 | "import statsmodels.graphics.tsaplots as sgt\n", 20 | "import statsmodels.tsa.stattools as sts\n", 21 | "from statsmodels.tsa.arima_model import ARIMA\n", 22 | "from scipy.stats.distributions import chi2 \n", 23 | "from arch import arch_model\n", 24 | "from math import sqrt\n", 25 | "import seaborn as sns\n", 26 | "sns.set()" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": {}, 32 | "source": [ 33 | " " 34 | ] 35 | }, 36 | { 37 | "cell_type": "markdown", 38 | "metadata": {}, 39 | "source": [ 40 | "## Importing the Data and Pre-processing " 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 2, 46 | "metadata": {}, 47 | "outputs": [], 48 | "source": [ 49 | "raw_csv_data = pd.read_csv(\"Index2018.csv\") \n", 50 | "df_comp=raw_csv_data.copy()\n", 51 | "df_comp.date = pd.to_datetime(df_comp.date, dayfirst = True)\n", 52 | "df_comp.set_index(\"date\", inplace=True)\n", 53 | "df_comp=df_comp.asfreq('b')\n", 54 | "df_comp=df_comp.fillna(method='ffill')" 55 | ] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "execution_count": 3, 60 | "metadata": {}, 61 | "outputs": [], 62 | "source": [ 63 | "df_comp['market_value']=df_comp.ftse" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": 4, 69 | "metadata": {}, 70 | "outputs": [], 71 | "source": [ 72 | "del df_comp['spx']\n", 73 | "del df_comp['dax']\n", 74 | "del df_comp['ftse']\n", 75 | "del df_comp['nikkei']\n", 76 | "size = int(len(df_comp)*0.8)\n", 77 | "df, df_test = df_comp.iloc[:size], df_comp.iloc[size:]" 78 | ] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "execution_count": 5, 83 | "metadata": {}, 84 | "outputs": [], 85 | "source": [ 86 | "import warnings\n", 87 | "warnings.filterwarnings(\"ignore\")" 88 | ] 89 | }, 90 | { 91 | "cell_type": "markdown", 92 | "metadata": {}, 93 | "source": [ 94 | " " 95 | ] 96 | }, 97 | { 98 | "cell_type": "markdown", 99 | "metadata": {}, 100 | "source": [ 101 | "## The LLR Test" 102 | ] 103 | }, 104 | { 105 | "cell_type": "code", 106 | "execution_count": 6, 107 | "metadata": {}, 108 | "outputs": [], 109 | "source": [ 110 | "def LLR_test(mod_1, mod_2, DF = 1):\n", 111 | " L1 = mod_1.fit(start_ar_lags = 11).llf\n", 112 | " L2 = mod_2.fit(start_ar_lags = 11).llf\n", 113 | " LR = (2*(L2-L1)) \n", 114 | " p = chi2.sf(LR, DF).round(3)\n", 115 | " return p" 116 | ] 117 | }, 118 | { 119 | "cell_type": "markdown", 120 | "metadata": {}, 121 | "source": [ 122 | "## Creating Returns" 123 | ] 124 | }, 125 | { 126 | "cell_type": "code", 127 | "execution_count": 7, 128 | "metadata": { 129 | "scrolled": true 130 | }, 131 | "outputs": [], 132 | "source": [ 133 | "df['returns'] = df.market_value.pct_change(1)*100" 134 | ] 135 | }, 136 | { 137 | "cell_type": "markdown", 138 | "metadata": {}, 139 | "source": [ 140 | "## The Simple GARCH Model" 141 | ] 142 | }, 143 | { 144 | "cell_type": "code", 145 | "execution_count": 8, 146 | "metadata": {}, 147 | "outputs": [ 148 | { 149 | "name": "stdout", 150 | "output_type": "stream", 151 | "text": [ 152 | "Iteration: 5, Func. Count: 39, Neg. LLF: 6972.734752397977\n", 153 | "Iteration: 10, Func. Count: 73, Neg. LLF: 6970.088043671654\n", 154 | "Optimization terminated successfully. (Exit mode 0)\n", 155 | " Current function value: 6970.058366189876\n", 156 | " Iterations: 13\n", 157 | " Function evaluations: 91\n", 158 | " Gradient evaluations: 13\n" 159 | ] 160 | }, 161 | { 162 | "data": { 163 | "text/html": [ 164 | "\n", 165 | "\n", 166 | "\n", 167 | " \n", 168 | "\n", 169 | "\n", 170 | " \n", 171 | "\n", 172 | "\n", 173 | " \n", 174 | "\n", 175 | "\n", 176 | " \n", 177 | "\n", 178 | "\n", 179 | " \n", 180 | "\n", 181 | "\n", 182 | " \n", 183 | "\n", 184 | "\n", 185 | " \n", 186 | "\n", 187 | "\n", 188 | " \n", 189 | "\n", 190 | "
Constant Mean - GARCH Model Results
Dep. Variable: returns R-squared: -0.001
Mean Model: Constant Mean Adj. R-squared: -0.001
Vol Model: GARCH Log-Likelihood: -6970.06
Distribution: Normal AIC: 13948.1
Method: Maximum Likelihood BIC: 13974.2
No. Observations: 5020
Date: Thu, Sep 19 2019 Df Residuals: 5016
Time: 17:53:26 Df Model: 4
\n", 191 | "\n", 192 | "\n", 193 | "\n", 194 | " \n", 195 | "\n", 196 | "\n", 197 | " \n", 198 | "\n", 199 | "
Mean Model
coef std err t P>|t| 95.0% Conf. Int.
mu 0.0466 1.183e-02 3.939 8.187e-05 [2.342e-02,6.981e-02]
\n", 200 | "\n", 201 | "\n", 202 | "\n", 203 | " \n", 204 | "\n", 205 | "\n", 206 | " \n", 207 | "\n", 208 | "\n", 209 | " \n", 210 | "\n", 211 | "\n", 212 | " \n", 213 | "\n", 214 | "
Volatility Model
coef std err t P>|t| 95.0% Conf. Int.
omega 0.0109 3.004e-03 3.640 2.724e-04 [5.048e-03,1.682e-02]
alpha[1] 0.0835 1.071e-02 7.794 6.476e-15 [6.249e-02, 0.104]
beta[1] 0.9089 1.148e-02 79.168 0.000 [ 0.886, 0.931]


Covariance estimator: robust" 215 | ], 216 | "text/plain": [ 217 | "\n", 218 | "\"\"\"\n", 219 | " Constant Mean - GARCH Model Results \n", 220 | "==============================================================================\n", 221 | "Dep. Variable: returns R-squared: -0.001\n", 222 | "Mean Model: Constant Mean Adj. R-squared: -0.001\n", 223 | "Vol Model: GARCH Log-Likelihood: -6970.06\n", 224 | "Distribution: Normal AIC: 13948.1\n", 225 | "Method: Maximum Likelihood BIC: 13974.2\n", 226 | " No. Observations: 5020\n", 227 | "Date: Thu, Sep 19 2019 Df Residuals: 5016\n", 228 | "Time: 17:53:26 Df Model: 4\n", 229 | " Mean Model \n", 230 | "============================================================================\n", 231 | " coef std err t P>|t| 95.0% Conf. Int.\n", 232 | "----------------------------------------------------------------------------\n", 233 | "mu 0.0466 1.183e-02 3.939 8.187e-05 [2.342e-02,6.981e-02]\n", 234 | " Volatility Model \n", 235 | "============================================================================\n", 236 | " coef std err t P>|t| 95.0% Conf. Int.\n", 237 | "----------------------------------------------------------------------------\n", 238 | "omega 0.0109 3.004e-03 3.640 2.724e-04 [5.048e-03,1.682e-02]\n", 239 | "alpha[1] 0.0835 1.071e-02 7.794 6.476e-15 [6.249e-02, 0.104]\n", 240 | "beta[1] 0.9089 1.148e-02 79.168 0.000 [ 0.886, 0.931]\n", 241 | "============================================================================\n", 242 | "\n", 243 | "Covariance estimator: robust\n", 244 | "\"\"\"" 245 | ] 246 | }, 247 | "execution_count": 8, 248 | "metadata": {}, 249 | "output_type": "execute_result" 250 | } 251 | ], 252 | "source": [ 253 | "model_garch_1_1 = arch_model(df.returns[1:], mean = \"Constant\", vol = \"GARCH\", p = 1, q = 1)\n", 254 | "results_garch_1_1 = model_garch_1_1.fit(update_freq = 5)\n", 255 | "results_garch_1_1.summary()" 256 | ] 257 | }, 258 | { 259 | "cell_type": "markdown", 260 | "metadata": {}, 261 | "source": [ 262 | "## Higher-Lag GARCH Models" 263 | ] 264 | }, 265 | { 266 | "cell_type": "code", 267 | "execution_count": 9, 268 | "metadata": {}, 269 | "outputs": [ 270 | { 271 | "name": "stdout", 272 | "output_type": "stream", 273 | "text": [ 274 | "Iteration: 5, Func. Count: 44, Neg. LLF: 6978.593988486672\n", 275 | "Iteration: 10, Func. Count: 80, Neg. LLF: 6970.063553697997\n", 276 | "Optimization terminated successfully. (Exit mode 0)\n", 277 | " Current function value: 6970.058366227228\n", 278 | " Iterations: 12\n", 279 | " Function evaluations: 95\n", 280 | " Gradient evaluations: 12\n" 281 | ] 282 | }, 283 | { 284 | "data": { 285 | "text/html": [ 286 | "\n", 287 | "\n", 288 | "\n", 289 | " \n", 290 | "\n", 291 | "\n", 292 | " \n", 293 | "\n", 294 | "\n", 295 | " \n", 296 | "\n", 297 | "\n", 298 | " \n", 299 | "\n", 300 | "\n", 301 | " \n", 302 | "\n", 303 | "\n", 304 | " \n", 305 | "\n", 306 | "\n", 307 | " \n", 308 | "\n", 309 | "\n", 310 | " \n", 311 | "\n", 312 | "
Constant Mean - GARCH Model Results
Dep. Variable: returns R-squared: -0.001
Mean Model: Constant Mean Adj. R-squared: -0.001
Vol Model: GARCH Log-Likelihood: -6970.06
Distribution: Normal AIC: 13950.1
Method: Maximum Likelihood BIC: 13982.7
No. Observations: 5020
Date: Thu, Sep 19 2019 Df Residuals: 5015
Time: 17:54:06 Df Model: 5
\n", 313 | "\n", 314 | "\n", 315 | "\n", 316 | " \n", 317 | "\n", 318 | "\n", 319 | " \n", 320 | "\n", 321 | "
Mean Model
coef std err t P>|t| 95.0% Conf. Int.
mu 0.0466 1.184e-02 3.938 8.219e-05 [2.341e-02,6.982e-02]
\n", 322 | "\n", 323 | "\n", 324 | "\n", 325 | " \n", 326 | "\n", 327 | "\n", 328 | " \n", 329 | "\n", 330 | "\n", 331 | " \n", 332 | "\n", 333 | "\n", 334 | " \n", 335 | "\n", 336 | "\n", 337 | " \n", 338 | "\n", 339 | "
Volatility Model
coef std err t P>|t| 95.0% Conf. Int.
omega 0.0109 2.908e-03 3.761 1.696e-04 [5.236e-03,1.663e-02]
alpha[1] 0.0835 1.189e-02 7.019 2.231e-12 [6.017e-02, 0.107]
beta[1] 0.9089 0.188 4.845 1.268e-06 [ 0.541, 1.277]
beta[2] 0.0000 0.180 0.000 1.000 [ -0.352, 0.352]


Covariance estimator: robust" 340 | ], 341 | "text/plain": [ 342 | "\n", 343 | "\"\"\"\n", 344 | " Constant Mean - GARCH Model Results \n", 345 | "==============================================================================\n", 346 | "Dep. Variable: returns R-squared: -0.001\n", 347 | "Mean Model: Constant Mean Adj. R-squared: -0.001\n", 348 | "Vol Model: GARCH Log-Likelihood: -6970.06\n", 349 | "Distribution: Normal AIC: 13950.1\n", 350 | "Method: Maximum Likelihood BIC: 13982.7\n", 351 | " No. Observations: 5020\n", 352 | "Date: Thu, Sep 19 2019 Df Residuals: 5015\n", 353 | "Time: 17:54:06 Df Model: 5\n", 354 | " Mean Model \n", 355 | "============================================================================\n", 356 | " coef std err t P>|t| 95.0% Conf. Int.\n", 357 | "----------------------------------------------------------------------------\n", 358 | "mu 0.0466 1.184e-02 3.938 8.219e-05 [2.341e-02,6.982e-02]\n", 359 | " Volatility Model \n", 360 | "============================================================================\n", 361 | " coef std err t P>|t| 95.0% Conf. Int.\n", 362 | "----------------------------------------------------------------------------\n", 363 | "omega 0.0109 2.908e-03 3.761 1.696e-04 [5.236e-03,1.663e-02]\n", 364 | "alpha[1] 0.0835 1.189e-02 7.019 2.231e-12 [6.017e-02, 0.107]\n", 365 | "beta[1] 0.9089 0.188 4.845 1.268e-06 [ 0.541, 1.277]\n", 366 | "beta[2] 0.0000 0.180 0.000 1.000 [ -0.352, 0.352]\n", 367 | "============================================================================\n", 368 | "\n", 369 | "Covariance estimator: robust\n", 370 | "\"\"\"" 371 | ] 372 | }, 373 | "execution_count": 9, 374 | "metadata": {}, 375 | "output_type": "execute_result" 376 | } 377 | ], 378 | "source": [ 379 | "model_garch_1_2 = arch_model(df.returns[1:], mean = \"Constant\", vol = \"GARCH\", p = 1, q = 2)\n", 380 | "results_garch_1_2 = model_garch_1_2.fit(update_freq = 5)\n", 381 | "results_garch_1_2.summary()" 382 | ] 383 | }, 384 | { 385 | "cell_type": "code", 386 | "execution_count": 10, 387 | "metadata": {}, 388 | "outputs": [ 389 | { 390 | "name": "stdout", 391 | "output_type": "stream", 392 | "text": [ 393 | "Iteration: 5, Func. Count: 51, Neg. LLF: 6993.438671672955\n", 394 | "Iteration: 10, Func. Count: 97, Neg. LLF: 6972.43119644999\n", 395 | "Iteration: 15, Func. Count: 138, Neg. LLF: 6970.058671960955\n", 396 | "Optimization terminated successfully. (Exit mode 0)\n", 397 | " Current function value: 6970.05836623016\n", 398 | " Iterations: 17\n", 399 | " Function evaluations: 154\n", 400 | " Gradient evaluations: 17\n" 401 | ] 402 | }, 403 | { 404 | "data": { 405 | "text/html": [ 406 | "\n", 407 | "\n", 408 | "\n", 409 | " \n", 410 | "\n", 411 | "\n", 412 | " \n", 413 | "\n", 414 | "\n", 415 | " \n", 416 | "\n", 417 | "\n", 418 | " \n", 419 | "\n", 420 | "\n", 421 | " \n", 422 | "\n", 423 | "\n", 424 | " \n", 425 | "\n", 426 | "\n", 427 | " \n", 428 | "\n", 429 | "\n", 430 | " \n", 431 | "\n", 432 | "
Constant Mean - GARCH Model Results
Dep. Variable: returns R-squared: -0.001
Mean Model: Constant Mean Adj. R-squared: -0.001
Vol Model: GARCH Log-Likelihood: -6970.06
Distribution: Normal AIC: 13952.1
Method: Maximum Likelihood BIC: 13991.2
No. Observations: 5020
Date: Thu, Sep 19 2019 Df Residuals: 5014
Time: 17:54:23 Df Model: 6
\n", 433 | "\n", 434 | "\n", 435 | "\n", 436 | " \n", 437 | "\n", 438 | "\n", 439 | " \n", 440 | "\n", 441 | "
Mean Model
coef std err t P>|t| 95.0% Conf. Int.
mu 0.0466 1.179e-02 3.954 7.683e-05 [2.351e-02,6.972e-02]
\n", 442 | "\n", 443 | "\n", 444 | "\n", 445 | " \n", 446 | "\n", 447 | "\n", 448 | " \n", 449 | "\n", 450 | "\n", 451 | " \n", 452 | "\n", 453 | "\n", 454 | " \n", 455 | "\n", 456 | "\n", 457 | " \n", 458 | "\n", 459 | "\n", 460 | " \n", 461 | "\n", 462 | "
Volatility Model
coef std err t P>|t| 95.0% Conf. Int.
omega 0.0109 8.157e-03 1.341 0.180 [-5.052e-03,2.692e-02]
alpha[1] 0.0835 6.059e-02 1.378 0.168 [-3.528e-02, 0.202]
beta[1] 0.9089 2.148 0.423 0.672 [ -3.301, 5.119]
beta[2] 0.0000 3.375 0.000 1.000 [ -6.614, 6.614]
beta[3] 3.9718e-13 1.294 3.070e-13 1.000 [ -2.536, 2.536]


Covariance estimator: robust" 463 | ], 464 | "text/plain": [ 465 | "\n", 466 | "\"\"\"\n", 467 | " Constant Mean - GARCH Model Results \n", 468 | "==============================================================================\n", 469 | "Dep. Variable: returns R-squared: -0.001\n", 470 | "Mean Model: Constant Mean Adj. R-squared: -0.001\n", 471 | "Vol Model: GARCH Log-Likelihood: -6970.06\n", 472 | "Distribution: Normal AIC: 13952.1\n", 473 | "Method: Maximum Likelihood BIC: 13991.2\n", 474 | " No. Observations: 5020\n", 475 | "Date: Thu, Sep 19 2019 Df Residuals: 5014\n", 476 | "Time: 17:54:23 Df Model: 6\n", 477 | " Mean Model \n", 478 | "============================================================================\n", 479 | " coef std err t P>|t| 95.0% Conf. Int.\n", 480 | "----------------------------------------------------------------------------\n", 481 | "mu 0.0466 1.179e-02 3.954 7.683e-05 [2.351e-02,6.972e-02]\n", 482 | " Volatility Model \n", 483 | "=============================================================================\n", 484 | " coef std err t P>|t| 95.0% Conf. Int.\n", 485 | "-----------------------------------------------------------------------------\n", 486 | "omega 0.0109 8.157e-03 1.341 0.180 [-5.052e-03,2.692e-02]\n", 487 | "alpha[1] 0.0835 6.059e-02 1.378 0.168 [-3.528e-02, 0.202]\n", 488 | "beta[1] 0.9089 2.148 0.423 0.672 [ -3.301, 5.119]\n", 489 | "beta[2] 0.0000 3.375 0.000 1.000 [ -6.614, 6.614]\n", 490 | "beta[3] 3.9718e-13 1.294 3.070e-13 1.000 [ -2.536, 2.536]\n", 491 | "=============================================================================\n", 492 | "\n", 493 | "Covariance estimator: robust\n", 494 | "\"\"\"" 495 | ] 496 | }, 497 | "execution_count": 10, 498 | "metadata": {}, 499 | "output_type": "execute_result" 500 | } 501 | ], 502 | "source": [ 503 | "model_garch_1_3 = arch_model(df.returns[1:], mean = \"Constant\", vol = \"GARCH\", p = 1, q = 3)\n", 504 | "results_garch_1_3 = model_garch_1_3.fit(update_freq = 5)\n", 505 | "results_garch_1_3.summary()" 506 | ] 507 | }, 508 | { 509 | "cell_type": "code", 510 | "execution_count": 11, 511 | "metadata": {}, 512 | "outputs": [ 513 | { 514 | "name": "stdout", 515 | "output_type": "stream", 516 | "text": [ 517 | "Iteration: 5, Func. Count: 44, Neg. LLF: 6973.212556117614\n", 518 | "Iteration: 10, Func. Count: 85, Neg. LLF: 6967.735886702618\n", 519 | "Optimization terminated successfully. (Exit mode 0)\n", 520 | " Current function value: 6967.731020076142\n", 521 | " Iterations: 12\n", 522 | " Function evaluations: 99\n", 523 | " Gradient evaluations: 12\n" 524 | ] 525 | }, 526 | { 527 | "data": { 528 | "text/html": [ 529 | "\n", 530 | "\n", 531 | "\n", 532 | " \n", 533 | "\n", 534 | "\n", 535 | " \n", 536 | "\n", 537 | "\n", 538 | " \n", 539 | "\n", 540 | "\n", 541 | " \n", 542 | "\n", 543 | "\n", 544 | " \n", 545 | "\n", 546 | "\n", 547 | " \n", 548 | "\n", 549 | "\n", 550 | " \n", 551 | "\n", 552 | "\n", 553 | " \n", 554 | "\n", 555 | "
Constant Mean - GARCH Model Results
Dep. Variable: returns R-squared: -0.001
Mean Model: Constant Mean Adj. R-squared: -0.001
Vol Model: GARCH Log-Likelihood: -6967.73
Distribution: Normal AIC: 13945.5
Method: Maximum Likelihood BIC: 13978.1
No. Observations: 5020
Date: Thu, Sep 19 2019 Df Residuals: 5015
Time: 17:54:44 Df Model: 5
\n", 556 | "\n", 557 | "\n", 558 | "\n", 559 | " \n", 560 | "\n", 561 | "\n", 562 | " \n", 563 | "\n", 564 | "
Mean Model
coef std err t P>|t| 95.0% Conf. Int.
mu 0.0466 1.187e-02 3.922 8.780e-05 [2.329e-02,6.982e-02]
\n", 565 | "\n", 566 | "\n", 567 | "\n", 568 | " \n", 569 | "\n", 570 | "\n", 571 | " \n", 572 | "\n", 573 | "\n", 574 | " \n", 575 | "\n", 576 | "\n", 577 | " \n", 578 | "\n", 579 | "\n", 580 | " \n", 581 | "\n", 582 | "
Volatility Model
coef std err t P>|t| 95.0% Conf. Int.
omega 0.0129 4.097e-03 3.158 1.589e-03 [4.908e-03,2.097e-02]
alpha[1] 0.0547 1.665e-02 3.286 1.017e-03 [2.208e-02,8.735e-02]
alpha[2] 0.0389 2.345e-02 1.659 9.709e-02 [-7.056e-03,8.488e-02]
beta[1] 0.8974 1.712e-02 52.415 0.000 [ 0.864, 0.931]


Covariance estimator: robust" 583 | ], 584 | "text/plain": [ 585 | "\n", 586 | "\"\"\"\n", 587 | " Constant Mean - GARCH Model Results \n", 588 | "==============================================================================\n", 589 | "Dep. Variable: returns R-squared: -0.001\n", 590 | "Mean Model: Constant Mean Adj. R-squared: -0.001\n", 591 | "Vol Model: GARCH Log-Likelihood: -6967.73\n", 592 | "Distribution: Normal AIC: 13945.5\n", 593 | "Method: Maximum Likelihood BIC: 13978.1\n", 594 | " No. Observations: 5020\n", 595 | "Date: Thu, Sep 19 2019 Df Residuals: 5015\n", 596 | "Time: 17:54:44 Df Model: 5\n", 597 | " Mean Model \n", 598 | "============================================================================\n", 599 | " coef std err t P>|t| 95.0% Conf. Int.\n", 600 | "----------------------------------------------------------------------------\n", 601 | "mu 0.0466 1.187e-02 3.922 8.780e-05 [2.329e-02,6.982e-02]\n", 602 | " Volatility Model \n", 603 | "=============================================================================\n", 604 | " coef std err t P>|t| 95.0% Conf. Int.\n", 605 | "-----------------------------------------------------------------------------\n", 606 | "omega 0.0129 4.097e-03 3.158 1.589e-03 [4.908e-03,2.097e-02]\n", 607 | "alpha[1] 0.0547 1.665e-02 3.286 1.017e-03 [2.208e-02,8.735e-02]\n", 608 | "alpha[2] 0.0389 2.345e-02 1.659 9.709e-02 [-7.056e-03,8.488e-02]\n", 609 | "beta[1] 0.8974 1.712e-02 52.415 0.000 [ 0.864, 0.931]\n", 610 | "=============================================================================\n", 611 | "\n", 612 | "Covariance estimator: robust\n", 613 | "\"\"\"" 614 | ] 615 | }, 616 | "execution_count": 11, 617 | "metadata": {}, 618 | "output_type": "execute_result" 619 | } 620 | ], 621 | "source": [ 622 | "model_garch_2_1 = arch_model(df.returns[1:], mean = \"Constant\", vol = \"GARCH\", p = 2, q = 1)\n", 623 | "results_garch_2_1 = model_garch_2_1.fit(update_freq = 5)\n", 624 | "results_garch_2_1.summary()" 625 | ] 626 | }, 627 | { 628 | "cell_type": "code", 629 | "execution_count": 12, 630 | "metadata": {}, 631 | "outputs": [ 632 | { 633 | "name": "stdout", 634 | "output_type": "stream", 635 | "text": [ 636 | "Iteration: 5, Func. Count: 49, Neg. LLF: 6974.886815445026\n", 637 | "Iteration: 10, Func. Count: 94, Neg. LLF: 6968.538209285089\n", 638 | "Iteration: 15, Func. Count: 134, Neg. LLF: 6967.731020049032\n", 639 | "Optimization terminated successfully. (Exit mode 0)\n", 640 | " Current function value: 6967.731020049671\n", 641 | " Iterations: 15\n", 642 | " Function evaluations: 134\n", 643 | " Gradient evaluations: 15\n" 644 | ] 645 | }, 646 | { 647 | "data": { 648 | "text/html": [ 649 | "\n", 650 | "\n", 651 | "\n", 652 | " \n", 653 | "\n", 654 | "\n", 655 | " \n", 656 | "\n", 657 | "\n", 658 | " \n", 659 | "\n", 660 | "\n", 661 | " \n", 662 | "\n", 663 | "\n", 664 | " \n", 665 | "\n", 666 | "\n", 667 | " \n", 668 | "\n", 669 | "\n", 670 | " \n", 671 | "\n", 672 | "\n", 673 | " \n", 674 | "\n", 675 | "
Constant Mean - GARCH Model Results
Dep. Variable: returns R-squared: -0.001
Mean Model: Constant Mean Adj. R-squared: -0.001
Vol Model: GARCH Log-Likelihood: -6967.73
Distribution: Normal AIC: 13947.5
Method: Maximum Likelihood BIC: 13986.6
No. Observations: 5020
Date: Thu, Sep 19 2019 Df Residuals: 5014
Time: 17:55:01 Df Model: 6
\n", 676 | "\n", 677 | "\n", 678 | "\n", 679 | " \n", 680 | "\n", 681 | "\n", 682 | " \n", 683 | "\n", 684 | "
Mean Model
coef std err t P>|t| 95.0% Conf. Int.
mu 0.0466 1.187e-02 3.924 8.721e-05 [2.330e-02,6.982e-02]
\n", 685 | "\n", 686 | "\n", 687 | "\n", 688 | " \n", 689 | "\n", 690 | "\n", 691 | " \n", 692 | "\n", 693 | "\n", 694 | " \n", 695 | "\n", 696 | "\n", 697 | " \n", 698 | "\n", 699 | "\n", 700 | " \n", 701 | "\n", 702 | "\n", 703 | " \n", 704 | "\n", 705 | "
Volatility Model
coef std err t P>|t| 95.0% Conf. Int.
omega 0.0129 4.816e-03 2.687 7.217e-03 [3.500e-03,2.238e-02]
alpha[1] 0.0547 1.665e-02 3.285 1.019e-03 [2.207e-02,8.736e-02]
alpha[2] 0.0389 2.505e-02 1.553 0.120 [-1.018e-02,8.800e-02]
alpha[3] 0.0000 2.572e-02 0.000 1.000 [-5.041e-02,5.041e-02]
beta[1] 0.8974 2.245e-02 39.978 0.000 [ 0.853, 0.941]


Covariance estimator: robust" 706 | ], 707 | "text/plain": [ 708 | "\n", 709 | "\"\"\"\n", 710 | " Constant Mean - GARCH Model Results \n", 711 | "==============================================================================\n", 712 | "Dep. Variable: returns R-squared: -0.001\n", 713 | "Mean Model: Constant Mean Adj. R-squared: -0.001\n", 714 | "Vol Model: GARCH Log-Likelihood: -6967.73\n", 715 | "Distribution: Normal AIC: 13947.5\n", 716 | "Method: Maximum Likelihood BIC: 13986.6\n", 717 | " No. Observations: 5020\n", 718 | "Date: Thu, Sep 19 2019 Df Residuals: 5014\n", 719 | "Time: 17:55:01 Df Model: 6\n", 720 | " Mean Model \n", 721 | "============================================================================\n", 722 | " coef std err t P>|t| 95.0% Conf. Int.\n", 723 | "----------------------------------------------------------------------------\n", 724 | "mu 0.0466 1.187e-02 3.924 8.721e-05 [2.330e-02,6.982e-02]\n", 725 | " Volatility Model \n", 726 | "=============================================================================\n", 727 | " coef std err t P>|t| 95.0% Conf. Int.\n", 728 | "-----------------------------------------------------------------------------\n", 729 | "omega 0.0129 4.816e-03 2.687 7.217e-03 [3.500e-03,2.238e-02]\n", 730 | "alpha[1] 0.0547 1.665e-02 3.285 1.019e-03 [2.207e-02,8.736e-02]\n", 731 | "alpha[2] 0.0389 2.505e-02 1.553 0.120 [-1.018e-02,8.800e-02]\n", 732 | "alpha[3] 0.0000 2.572e-02 0.000 1.000 [-5.041e-02,5.041e-02]\n", 733 | "beta[1] 0.8974 2.245e-02 39.978 0.000 [ 0.853, 0.941]\n", 734 | "=============================================================================\n", 735 | "\n", 736 | "Covariance estimator: robust\n", 737 | "\"\"\"" 738 | ] 739 | }, 740 | "execution_count": 12, 741 | "metadata": {}, 742 | "output_type": "execute_result" 743 | } 744 | ], 745 | "source": [ 746 | "model_garch_3_1 = arch_model(df.returns[1:], mean = \"Constant\", vol = \"GARCH\", p = 3, q = 1)\n", 747 | "results_garch_3_1 = model_garch_3_1.fit(update_freq = 5)\n", 748 | "results_garch_3_1.summary()" 749 | ] 750 | } 751 | ], 752 | "metadata": { 753 | "kernelspec": { 754 | "display_name": "Python 3", 755 | "language": "python", 756 | "name": "python3" 757 | }, 758 | "language_info": { 759 | "codemirror_mode": { 760 | "name": "ipython", 761 | "version": 3 762 | }, 763 | "file_extension": ".py", 764 | "mimetype": "text/x-python", 765 | "name": "python", 766 | "nbconvert_exporter": "python", 767 | "pygments_lexer": "ipython3", 768 | "version": "3.6.7" 769 | } 770 | }, 771 | "nbformat": 4, 772 | "nbformat_minor": 2 773 | } 774 | -------------------------------------------------------------------------------- /4. Analyzing prices using the AR model.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## Importing the relevant packages\n" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 1, 13 | "metadata": {}, 14 | "outputs": [], 15 | "source": [ 16 | "import pandas as pd\n", 17 | "import numpy as np\n", 18 | "import matplotlib.pyplot as plt\n", 19 | "import statsmodels.graphics.tsaplots as sgt\n", 20 | "from statsmodels.tsa.arima_model import ARMA\n", 21 | "from scipy.stats.distributions import chi2\n", 22 | "import statsmodels.tsa.stattools as sts \n", 23 | "import seaborn as sns\n", 24 | "sns.set()" 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": {}, 30 | "source": [ 31 | "## Importing the Data and Pre-processing " 32 | ] 33 | }, 34 | { 35 | "cell_type": "code", 36 | "execution_count": 2, 37 | "metadata": {}, 38 | "outputs": [], 39 | "source": [ 40 | "raw_csv_data = pd.read_csv(\"Index2018.csv\") \n", 41 | "df_comp=raw_csv_data.copy()\n", 42 | "df_comp.date = pd.to_datetime(df_comp.date, dayfirst = True)\n", 43 | "df_comp.set_index(\"date\", inplace=True)\n", 44 | "df_comp=df_comp.asfreq('b')\n", 45 | "df_comp=df_comp.fillna(method='ffill')" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": 3, 51 | "metadata": {}, 52 | "outputs": [], 53 | "source": [ 54 | "df_comp['market_value']=df_comp.ftse" 55 | ] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "execution_count": 4, 60 | "metadata": {}, 61 | "outputs": [], 62 | "source": [ 63 | "del df_comp['spx']\n", 64 | "del df_comp['dax']\n", 65 | "del df_comp['ftse']\n", 66 | "del df_comp['nikkei']\n", 67 | "size = int(len(df_comp)*0.8)\n", 68 | "df, df_test = df_comp.iloc[:size], df_comp.iloc[size:]" 69 | ] 70 | }, 71 | { 72 | "cell_type": "markdown", 73 | "metadata": {}, 74 | "source": [ 75 | "## The ACF" 76 | ] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": 5, 81 | "metadata": { 82 | "scrolled": true 83 | }, 84 | "outputs": [ 85 | { 86 | "data": { 87 | "image/png": "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\n", 88 | "text/plain": [ 89 | "
" 90 | ] 91 | }, 92 | "metadata": { 93 | "needs_background": "light" 94 | }, 95 | "output_type": "display_data" 96 | } 97 | ], 98 | "source": [ 99 | "sgt.plot_acf(df.market_value, zero = False, lags = 40)\n", 100 | "plt.title(\"ACF for Prices\", size = 20)\n", 101 | "plt.show()" 102 | ] 103 | }, 104 | { 105 | "cell_type": "code", 106 | "execution_count": 6, 107 | "metadata": {}, 108 | "outputs": [], 109 | "source": [ 110 | "import warnings\n", 111 | "warnings.filterwarnings(\"ignore\")" 112 | ] 113 | }, 114 | { 115 | "cell_type": "markdown", 116 | "metadata": {}, 117 | "source": [ 118 | "## The PACF" 119 | ] 120 | }, 121 | { 122 | "cell_type": "code", 123 | "execution_count": 7, 124 | "metadata": { 125 | "scrolled": true 126 | }, 127 | "outputs": [ 128 | { 129 | "data": { 130 | "image/png": "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\n", 131 | "text/plain": [ 132 | "
" 133 | ] 134 | }, 135 | "metadata": { 136 | "needs_background": "light" 137 | }, 138 | "output_type": "display_data" 139 | } 140 | ], 141 | "source": [ 142 | "sgt.plot_pacf(df.market_value, lags = 40, alpha = 0.05, zero = False, method = ('ols'))\n", 143 | "plt.title(\"PACF for Prices\", size = 20)\n", 144 | "plt.show()" 145 | ] 146 | }, 147 | { 148 | "cell_type": "markdown", 149 | "metadata": {}, 150 | "source": [ 151 | "## The AR(1) Model" 152 | ] 153 | }, 154 | { 155 | "cell_type": "code", 156 | "execution_count": 8, 157 | "metadata": {}, 158 | "outputs": [], 159 | "source": [ 160 | "model_ar = ARMA(df.market_value, order=(1,0))" 161 | ] 162 | }, 163 | { 164 | "cell_type": "code", 165 | "execution_count": 9, 166 | "metadata": {}, 167 | "outputs": [], 168 | "source": [ 169 | "results_ar = model_ar.fit()" 170 | ] 171 | }, 172 | { 173 | "cell_type": "code", 174 | "execution_count": 10, 175 | "metadata": {}, 176 | "outputs": [ 177 | { 178 | "data": { 179 | "text/html": [ 180 | "\n", 181 | "\n", 182 | "\n", 183 | " \n", 184 | "\n", 185 | "\n", 186 | " \n", 187 | "\n", 188 | "\n", 189 | " \n", 190 | "\n", 191 | "\n", 192 | " \n", 193 | "\n", 194 | "\n", 195 | " \n", 196 | "\n", 197 | "\n", 198 | " \n", 199 | "\n", 200 | "\n", 201 | " \n", 202 | "\n", 203 | "
ARMA Model Results
Dep. Variable: market_value No. Observations: 5021
Model: ARMA(1, 0) Log Likelihood -27622.598
Method: css-mle S.D. of innovations 59.258
Date: Fri, 27 Sep 2019 AIC 55251.196
Time: 10:03:35 BIC 55270.760
Sample: 01-07-1994 HQIC 55258.052
- 04-05-2013
\n", 204 | "\n", 205 | "\n", 206 | " \n", 207 | "\n", 208 | "\n", 209 | " \n", 210 | "\n", 211 | "\n", 212 | " \n", 213 | "\n", 214 | "
coef std err z P>|z| [0.025 0.975]
const 5057.0038 486.461 10.395 0.000 4103.558 6010.450
ar.L1.market_value 0.9985 0.001 1298.863 0.000 0.997 1.000
\n", 215 | "\n", 216 | "\n", 217 | "\n", 218 | " \n", 219 | "\n", 220 | "\n", 221 | " \n", 222 | "\n", 223 | "
Roots
Real Imaginary Modulus Frequency
AR.1 1.0015 +0.0000j 1.0015 0.0000
" 224 | ], 225 | "text/plain": [ 226 | "\n", 227 | "\"\"\"\n", 228 | " ARMA Model Results \n", 229 | "==============================================================================\n", 230 | "Dep. Variable: market_value No. Observations: 5021\n", 231 | "Model: ARMA(1, 0) Log Likelihood -27622.598\n", 232 | "Method: css-mle S.D. of innovations 59.258\n", 233 | "Date: Fri, 27 Sep 2019 AIC 55251.196\n", 234 | "Time: 10:03:35 BIC 55270.760\n", 235 | "Sample: 01-07-1994 HQIC 55258.052\n", 236 | " - 04-05-2013 \n", 237 | "======================================================================================\n", 238 | " coef std err z P>|z| [0.025 0.975]\n", 239 | "--------------------------------------------------------------------------------------\n", 240 | "const 5057.0038 486.461 10.395 0.000 4103.558 6010.450\n", 241 | "ar.L1.market_value 0.9985 0.001 1298.863 0.000 0.997 1.000\n", 242 | " Roots \n", 243 | "=============================================================================\n", 244 | " Real Imaginary Modulus Frequency\n", 245 | "-----------------------------------------------------------------------------\n", 246 | "AR.1 1.0015 +0.0000j 1.0015 0.0000\n", 247 | "-----------------------------------------------------------------------------\n", 248 | "\"\"\"" 249 | ] 250 | }, 251 | "execution_count": 10, 252 | "metadata": {}, 253 | "output_type": "execute_result" 254 | } 255 | ], 256 | "source": [ 257 | "results_ar.summary()" 258 | ] 259 | }, 260 | { 261 | "cell_type": "markdown", 262 | "metadata": {}, 263 | "source": [ 264 | "## Higher-Lag AR Models" 265 | ] 266 | }, 267 | { 268 | "cell_type": "code", 269 | "execution_count": 11, 270 | "metadata": {}, 271 | "outputs": [ 272 | { 273 | "data": { 274 | "text/html": [ 275 | "\n", 276 | "\n", 277 | "\n", 278 | " \n", 279 | "\n", 280 | "\n", 281 | " \n", 282 | "\n", 283 | "\n", 284 | " \n", 285 | "\n", 286 | "\n", 287 | " \n", 288 | "\n", 289 | "\n", 290 | " \n", 291 | "\n", 292 | "\n", 293 | " \n", 294 | "\n", 295 | "\n", 296 | " \n", 297 | "\n", 298 | "
ARMA Model Results
Dep. Variable: market_value No. Observations: 5021
Model: ARMA(2, 0) Log Likelihood -27621.866
Method: css-mle S.D. of innovations 59.249
Date: Fri, 27 Sep 2019 AIC 55251.731
Time: 10:03:37 BIC 55277.817
Sample: 01-07-1994 HQIC 55260.872
- 04-05-2013
\n", 299 | "\n", 300 | "\n", 301 | " \n", 302 | "\n", 303 | "\n", 304 | " \n", 305 | "\n", 306 | "\n", 307 | " \n", 308 | "\n", 309 | "\n", 310 | " \n", 311 | "\n", 312 | "
coef std err z P>|z| [0.025 0.975]
const 5036.7744 495.444 10.166 0.000 4065.721 6007.828
ar.L1.market_value 0.9814 0.014 69.595 0.000 0.954 1.009
ar.L2.market_value 0.0171 0.014 1.211 0.226 -0.011 0.045
\n", 313 | "\n", 314 | "\n", 315 | "\n", 316 | " \n", 317 | "\n", 318 | "\n", 319 | " \n", 320 | "\n", 321 | "\n", 322 | " \n", 323 | "\n", 324 | "
Roots
Real Imaginary Modulus Frequency
AR.1 1.0015 +0.0000j 1.0015 0.0000
AR.2 -58.4573 +0.0000j 58.4573 0.5000
" 325 | ], 326 | "text/plain": [ 327 | "\n", 328 | "\"\"\"\n", 329 | " ARMA Model Results \n", 330 | "==============================================================================\n", 331 | "Dep. Variable: market_value No. Observations: 5021\n", 332 | "Model: ARMA(2, 0) Log Likelihood -27621.866\n", 333 | "Method: css-mle S.D. of innovations 59.249\n", 334 | "Date: Fri, 27 Sep 2019 AIC 55251.731\n", 335 | "Time: 10:03:37 BIC 55277.817\n", 336 | "Sample: 01-07-1994 HQIC 55260.872\n", 337 | " - 04-05-2013 \n", 338 | "======================================================================================\n", 339 | " coef std err z P>|z| [0.025 0.975]\n", 340 | "--------------------------------------------------------------------------------------\n", 341 | "const 5036.7744 495.444 10.166 0.000 4065.721 6007.828\n", 342 | "ar.L1.market_value 0.9814 0.014 69.595 0.000 0.954 1.009\n", 343 | "ar.L2.market_value 0.0171 0.014 1.211 0.226 -0.011 0.045\n", 344 | " Roots \n", 345 | "=============================================================================\n", 346 | " Real Imaginary Modulus Frequency\n", 347 | "-----------------------------------------------------------------------------\n", 348 | "AR.1 1.0015 +0.0000j 1.0015 0.0000\n", 349 | "AR.2 -58.4573 +0.0000j 58.4573 0.5000\n", 350 | "-----------------------------------------------------------------------------\n", 351 | "\"\"\"" 352 | ] 353 | }, 354 | "execution_count": 11, 355 | "metadata": {}, 356 | "output_type": "execute_result" 357 | } 358 | ], 359 | "source": [ 360 | "model_ar_2 = ARMA(df.market_value, order=(2,0))\n", 361 | "results_ar_2 = model_ar_2.fit()\n", 362 | "results_ar_2.summary()" 363 | ] 364 | }, 365 | { 366 | "cell_type": "code", 367 | "execution_count": 12, 368 | "metadata": {}, 369 | "outputs": [ 370 | { 371 | "data": { 372 | "text/html": [ 373 | "\n", 374 | "\n", 375 | "\n", 376 | " \n", 377 | "\n", 378 | "\n", 379 | " \n", 380 | "\n", 381 | "\n", 382 | " \n", 383 | "\n", 384 | "\n", 385 | " \n", 386 | "\n", 387 | "\n", 388 | " \n", 389 | "\n", 390 | "\n", 391 | " \n", 392 | "\n", 393 | "\n", 394 | " \n", 395 | "\n", 396 | "
ARMA Model Results
Dep. Variable: market_value No. Observations: 5021
Model: ARMA(3, 0) Log Likelihood -27615.871
Method: css-mle S.D. of innovations 59.178
Date: Fri, 27 Sep 2019 AIC 55241.742
Time: 10:03:37 BIC 55274.349
Sample: 01-07-1994 HQIC 55253.168
- 04-05-2013
\n", 397 | "\n", 398 | "\n", 399 | " \n", 400 | "\n", 401 | "\n", 402 | " \n", 403 | "\n", 404 | "\n", 405 | " \n", 406 | "\n", 407 | "\n", 408 | " \n", 409 | "\n", 410 | "\n", 411 | " \n", 412 | "\n", 413 | "
coef std err z P>|z| [0.025 0.975]
const 5089.6412 520.376 9.781 0.000 4069.723 6109.560
ar.L1.market_value 0.9806 0.014 69.619 0.000 0.953 1.008
ar.L2.market_value -0.0309 0.020 -1.563 0.118 -0.070 0.008
ar.L3.market_value 0.0489 0.014 3.466 0.001 0.021 0.077
\n", 414 | "\n", 415 | "\n", 416 | "\n", 417 | " \n", 418 | "\n", 419 | "\n", 420 | " \n", 421 | "\n", 422 | "\n", 423 | " \n", 424 | "\n", 425 | "\n", 426 | " \n", 427 | "\n", 428 | "
Roots
Real Imaginary Modulus Frequency
AR.1 1.0013 -0.0000j 1.0013 -0.0000
AR.2 -0.1850 -4.5161j 4.5199 -0.2565
AR.3 -0.1850 +4.5161j 4.5199 0.2565
" 429 | ], 430 | "text/plain": [ 431 | "\n", 432 | "\"\"\"\n", 433 | " ARMA Model Results \n", 434 | "==============================================================================\n", 435 | "Dep. Variable: market_value No. Observations: 5021\n", 436 | "Model: ARMA(3, 0) Log Likelihood -27615.871\n", 437 | "Method: css-mle S.D. of innovations 59.178\n", 438 | "Date: Fri, 27 Sep 2019 AIC 55241.742\n", 439 | "Time: 10:03:37 BIC 55274.349\n", 440 | "Sample: 01-07-1994 HQIC 55253.168\n", 441 | " - 04-05-2013 \n", 442 | "======================================================================================\n", 443 | " coef std err z P>|z| [0.025 0.975]\n", 444 | "--------------------------------------------------------------------------------------\n", 445 | "const 5089.6412 520.376 9.781 0.000 4069.723 6109.560\n", 446 | "ar.L1.market_value 0.9806 0.014 69.619 0.000 0.953 1.008\n", 447 | "ar.L2.market_value -0.0309 0.020 -1.563 0.118 -0.070 0.008\n", 448 | "ar.L3.market_value 0.0489 0.014 3.466 0.001 0.021 0.077\n", 449 | " Roots \n", 450 | "=============================================================================\n", 451 | " Real Imaginary Modulus Frequency\n", 452 | "-----------------------------------------------------------------------------\n", 453 | "AR.1 1.0013 -0.0000j 1.0013 -0.0000\n", 454 | "AR.2 -0.1850 -4.5161j 4.5199 -0.2565\n", 455 | "AR.3 -0.1850 +4.5161j 4.5199 0.2565\n", 456 | "-----------------------------------------------------------------------------\n", 457 | "\"\"\"" 458 | ] 459 | }, 460 | "execution_count": 12, 461 | "metadata": {}, 462 | "output_type": "execute_result" 463 | } 464 | ], 465 | "source": [ 466 | "model_ar_3 = ARMA(df.market_value, order=(3,0))\n", 467 | "results_ar_3 = model_ar_3.fit()\n", 468 | "results_ar_3.summary()" 469 | ] 470 | }, 471 | { 472 | "cell_type": "code", 473 | "execution_count": 13, 474 | "metadata": {}, 475 | "outputs": [ 476 | { 477 | "data": { 478 | "text/html": [ 479 | "\n", 480 | "\n", 481 | "\n", 482 | " \n", 483 | "\n", 484 | "\n", 485 | " \n", 486 | "\n", 487 | "\n", 488 | " \n", 489 | "\n", 490 | "\n", 491 | " \n", 492 | "\n", 493 | "\n", 494 | " \n", 495 | "\n", 496 | "\n", 497 | " \n", 498 | "\n", 499 | "\n", 500 | " \n", 501 | "\n", 502 | "
ARMA Model Results
Dep. Variable: market_value No. Observations: 5021
Model: ARMA(4, 0) Log Likelihood -27602.863
Method: css-mle S.D. of innovations 59.024
Date: Fri, 27 Sep 2019 AIC 55217.726
Time: 10:03:38 BIC 55256.854
Sample: 01-07-1994 HQIC 55231.437
- 04-05-2013
\n", 503 | "\n", 504 | "\n", 505 | " \n", 506 | "\n", 507 | "\n", 508 | " \n", 509 | "\n", 510 | "\n", 511 | " \n", 512 | "\n", 513 | "\n", 514 | " \n", 515 | "\n", 516 | "\n", 517 | " \n", 518 | "\n", 519 | "\n", 520 | " \n", 521 | "\n", 522 | "
coef std err z P>|z| [0.025 0.975]
const 5493.1989 959.292 5.726 0.000 3613.022 7373.376
ar.L1.market_value 0.9771 0.014 69.567 0.000 0.950 1.005
ar.L2.market_value -0.0286 0.020 -1.455 0.146 -0.067 0.010
ar.L3.market_value -0.0224 0.020 -1.135 0.256 -0.061 0.016
ar.L4.market_value 0.0729 0.014 5.171 0.000 0.045 0.100
\n", 523 | "\n", 524 | "\n", 525 | "\n", 526 | " \n", 527 | "\n", 528 | "\n", 529 | " \n", 530 | "\n", 531 | "\n", 532 | " \n", 533 | "\n", 534 | "\n", 535 | " \n", 536 | "\n", 537 | "\n", 538 | " \n", 539 | "\n", 540 | "
Roots
Real Imaginary Modulus Frequency
AR.1 1.0009 -0.0000j 1.0009 -0.0000
AR.2 0.9543 -2.0876j 2.2954 -0.1818
AR.3 0.9543 +2.0876j 2.2954 0.1818
AR.4 -2.6026 -0.0000j 2.6026 -0.5000
" 541 | ], 542 | "text/plain": [ 543 | "\n", 544 | "\"\"\"\n", 545 | " ARMA Model Results \n", 546 | "==============================================================================\n", 547 | "Dep. Variable: market_value No. Observations: 5021\n", 548 | "Model: ARMA(4, 0) Log Likelihood -27602.863\n", 549 | "Method: css-mle S.D. of innovations 59.024\n", 550 | "Date: Fri, 27 Sep 2019 AIC 55217.726\n", 551 | "Time: 10:03:38 BIC 55256.854\n", 552 | "Sample: 01-07-1994 HQIC 55231.437\n", 553 | " - 04-05-2013 \n", 554 | "======================================================================================\n", 555 | " coef std err z P>|z| [0.025 0.975]\n", 556 | "--------------------------------------------------------------------------------------\n", 557 | "const 5493.1989 959.292 5.726 0.000 3613.022 7373.376\n", 558 | "ar.L1.market_value 0.9771 0.014 69.567 0.000 0.950 1.005\n", 559 | "ar.L2.market_value -0.0286 0.020 -1.455 0.146 -0.067 0.010\n", 560 | "ar.L3.market_value -0.0224 0.020 -1.135 0.256 -0.061 0.016\n", 561 | "ar.L4.market_value 0.0729 0.014 5.171 0.000 0.045 0.100\n", 562 | " Roots \n", 563 | "=============================================================================\n", 564 | " Real Imaginary Modulus Frequency\n", 565 | "-----------------------------------------------------------------------------\n", 566 | "AR.1 1.0009 -0.0000j 1.0009 -0.0000\n", 567 | "AR.2 0.9543 -2.0876j 2.2954 -0.1818\n", 568 | "AR.3 0.9543 +2.0876j 2.2954 0.1818\n", 569 | "AR.4 -2.6026 -0.0000j 2.6026 -0.5000\n", 570 | "-----------------------------------------------------------------------------\n", 571 | "\"\"\"" 572 | ] 573 | }, 574 | "execution_count": 13, 575 | "metadata": {}, 576 | "output_type": "execute_result" 577 | } 578 | ], 579 | "source": [ 580 | "model_ar_4 = ARMA(df.market_value, order=[4,0])\n", 581 | "results_ar_4 = model_ar_4.fit()\n", 582 | "results_ar_4.summary()" 583 | ] 584 | }, 585 | { 586 | "cell_type": "markdown", 587 | "metadata": {}, 588 | "source": [ 589 | "## LLR Test" 590 | ] 591 | }, 592 | { 593 | "cell_type": "code", 594 | "execution_count": 16, 595 | "metadata": {}, 596 | "outputs": [], 597 | "source": [ 598 | "def LLR_test(mod_1, mod_2, DF=1):\n", 599 | " L1 = mod_1.fit().llf\n", 600 | " L2 = mod_2.fit().llf\n", 601 | " LR = (2*(L2-L1))\n", 602 | " p = chi2.sf(LR, DF).round(3)\n", 603 | " return p" 604 | ] 605 | }, 606 | { 607 | "cell_type": "markdown", 608 | "metadata": {}, 609 | "source": [ 610 | "## Comparing Higher-Lag AR Models" 611 | ] 612 | }, 613 | { 614 | "cell_type": "code", 615 | "execution_count": 17, 616 | "metadata": {}, 617 | "outputs": [ 618 | { 619 | "data": { 620 | "text/plain": [ 621 | "0.001" 622 | ] 623 | }, 624 | "execution_count": 17, 625 | "metadata": {}, 626 | "output_type": "execute_result" 627 | } 628 | ], 629 | "source": [ 630 | "LLR_test(model_ar_2, model_ar_3)" 631 | ] 632 | }, 633 | { 634 | "cell_type": "code", 635 | "execution_count": null, 636 | "metadata": {}, 637 | "outputs": [], 638 | "source": [ 639 | "LLR_test(model_ar_3, model_ar_4)" 640 | ] 641 | }, 642 | { 643 | "cell_type": "code", 644 | "execution_count": null, 645 | "metadata": {}, 646 | "outputs": [], 647 | "source": [ 648 | "model_ar_4 = ARMA(df.market_value, order=[4,0])\n", 649 | "results_ar_4 = model_ar_4.fit()\n", 650 | "print(results_ar_4.summary()) \n", 651 | "print (\"LLR test: \" + str(LLR_test(model_ar_3, model_ar_4)))" 652 | ] 653 | }, 654 | { 655 | "cell_type": "code", 656 | "execution_count": null, 657 | "metadata": {}, 658 | "outputs": [], 659 | "source": [ 660 | "model_ar_5 = ARMA(df.market_value, order=(5,0))\n", 661 | "results_ar_5 = model_ar_5.fit()\n", 662 | "print(results_ar_5.summary())\n", 663 | "print(\"\\nLLR test p-value = \" + str(LLR_test(model_ar_4, model_ar_5)))" 664 | ] 665 | }, 666 | { 667 | "cell_type": "code", 668 | "execution_count": null, 669 | "metadata": {}, 670 | "outputs": [], 671 | "source": [ 672 | "model_ar_6 = ARMA(df.market_value, order=(6,0))\n", 673 | "results_ar_6 = model_ar_6.fit()\n", 674 | "print(results_ar_6.summary())\n", 675 | "print(\"\\nLLR test p-value = \" + str(LLR_test(model_ar_5, model_ar_6)))" 676 | ] 677 | }, 678 | { 679 | "cell_type": "code", 680 | "execution_count": null, 681 | "metadata": {}, 682 | "outputs": [], 683 | "source": [ 684 | "model_ar_7 = ARMA(df.market_value, order=(7,0))\n", 685 | "results_ar_7 = model_ar_7.fit()\n", 686 | "print(results_ar_7.summary())\n", 687 | "print(\"\\nLLR test p-value = \" + str(LLR_test(model_ar_6, model_ar_7)))" 688 | ] 689 | }, 690 | { 691 | "cell_type": "code", 692 | "execution_count": null, 693 | "metadata": {}, 694 | "outputs": [], 695 | "source": [ 696 | "model_ar_8 = ARMA(df.market_value, order=(8,0))\n", 697 | "results_ar_8 = model_ar_8.fit()\n", 698 | "print(results_ar_8.summary())\n", 699 | "print(\"\\nLLR test p-value = \" + str(LLR_test(model_ar_7, model_ar_8)))" 700 | ] 701 | }, 702 | { 703 | "cell_type": "code", 704 | "execution_count": null, 705 | "metadata": {}, 706 | "outputs": [], 707 | "source": [ 708 | "print(\"LLR test: \" + str(LLR_test(model_ar, model_ar_7, DF = 6)))" 709 | ] 710 | }, 711 | { 712 | "cell_type": "markdown", 713 | "metadata": {}, 714 | "source": [ 715 | "## Analysing the Residuals" 716 | ] 717 | }, 718 | { 719 | "cell_type": "code", 720 | "execution_count": null, 721 | "metadata": {}, 722 | "outputs": [], 723 | "source": [ 724 | "df['res_price'] = results_ar_7.resid" 725 | ] 726 | }, 727 | { 728 | "cell_type": "code", 729 | "execution_count": null, 730 | "metadata": {}, 731 | "outputs": [], 732 | "source": [ 733 | "df.res_price.mean()" 734 | ] 735 | }, 736 | { 737 | "cell_type": "code", 738 | "execution_count": null, 739 | "metadata": {}, 740 | "outputs": [], 741 | "source": [ 742 | "df.res_price.var()" 743 | ] 744 | }, 745 | { 746 | "cell_type": "code", 747 | "execution_count": null, 748 | "metadata": {}, 749 | "outputs": [], 750 | "source": [ 751 | "sts.adfuller(df.res_price)" 752 | ] 753 | }, 754 | { 755 | "cell_type": "code", 756 | "execution_count": null, 757 | "metadata": {}, 758 | "outputs": [], 759 | "source": [ 760 | "sgt.plot_acf(df.res_price, zero = False, lags = 40)\n", 761 | "plt.title(\"ACF Of Residuals for Prices\",size=24)\n", 762 | "plt.show()" 763 | ] 764 | }, 765 | { 766 | "cell_type": "code", 767 | "execution_count": null, 768 | "metadata": {}, 769 | "outputs": [], 770 | "source": [ 771 | "df.res_price[1:].plot(figsize=(20,5))\n", 772 | "plt.title(\"Residuals of Prices\",size=24)\n", 773 | "plt.show()" 774 | ] 775 | } 776 | ], 777 | "metadata": { 778 | "kernelspec": { 779 | "display_name": "Python 3", 780 | "language": "python", 781 | "name": "python3" 782 | }, 783 | "language_info": { 784 | "codemirror_mode": { 785 | "name": "ipython", 786 | "version": 3 787 | }, 788 | "file_extension": ".py", 789 | "mimetype": "text/x-python", 790 | "name": "python", 791 | "nbconvert_exporter": "python", 792 | "pygments_lexer": "ipython3", 793 | "version": "3.7.4" 794 | } 795 | }, 796 | "nbformat": 4, 797 | "nbformat_minor": 2 798 | } 799 | --------------------------------------------------------------------------------