GARCH Models Þættir í fjármálum Verkefni 1-f Bjartur Logi Ye Shen Egill Helgi Lárusson
Data S&P Industrials Index, Daily from 1st Jan 1990 – 29th Sep 2003 3586 observations in total
Objectives & Procedures The objective of this project is to estimate the volatility of S&P Industrials Index by using various GARCH (Generalised Autoregressive Conditional Heteroscedasticity) models. The models used in this project are GARCH (1,1); ARCH(20); TGARCH (1,1,1); EGARCH (1,1) and GARCH (1,1) with Student’s T distributed residuals The procedure is divided into three stages, i.e. Pre-estimation analysis; Estimation of parameters by various models; Post-estimation analysis
Pre-estimation Analysis The objective of this procedure is to determine whether GARCH models are appropriate for the analysis of the data The figures display the sample ACF of the returns based on the assumption that all autocorrelations are zero beyond lag zero. ACF of squared returns show significant correlation and die out slowly.
Pre-estimation Analysis Ljung-Box-Pierce Q test for autocorrelation: (at 95% confidence) Under the null hypothesis of no serial correlation, the Q-test statistic is asymptotically Chi-Square distributed Engle Arch test for heteroscedasticity : (at 95% confidence) Under the null hypothesis that a time series is a random sequence of Gaussian disturbances (i.e., no heteroscedasticity). This test statistic is also asymptotically Chi-Square distributed
Estimation of Parameters The model: GARCH (1,1) Parameters estimated by GARCH (1,1)
Outcome of GARCH (1,1) Return, Estimated Volatility, and Innovations (i.e. residuals)
Model: Garch (1,1) Forecast volatility for the next 5 days Standardised residuals: Unconditional Std of [ε]
Post-estimation Analysis Both returns and residuals show volatility clustering. The sum of GARCH and ARCH parameters is close to 1, i.e the process remains stationary. Standardised residuals shows no clustering, no correlation, and no heteroscedasticity, which indicates the model has sufficient explanatory power toward the data
Further Data Analysis Looking more carefully at the data, it doesn’t seem to have the normal distribution property, which GARCH (1,1) assumes. Mean 0.029177 Variance 1.1102 Std 1.0537 Min -7.448 Max 5.5728 Skewness -0.13351 Kurtosis 6.7713
Outcome of Student-t GARCH Model, parameters, estimated volatilty, standardised residuals,ACF of squared standardised residuals, & test results JBP Q test Lag Test statistics Critical Value P-value Test results 10 11.7250 18.3070 0.3039 H0 15 23.3206 24.9958 0.0776 20 31.3753 31.4104 0.0504 Engle ARCH test Lag Test statistics Critical Value P-value Test results 10 12.0273 18.3070 0.2832 H0 15 23.0621 24.9958 0.0828 20 31.2970 31.4104 0.0514
TGARCH The volatility model of TGARCH Parameters Value v 0.014311 a (ARCH) 0.011242 g (Leverage) 0.087869 b (GARCH) 0.94482
LBP Q test & ARCH test Ljung-Box-Pierce Q test for autocorrelation: (at 95% confidence) Under the null hypothesis of no serial correlation, the Q-test statistic is asymptotically Chi-Square distributed Lag Test statistics Critical Value P-value Test results 10 5.5887 18.3070 0.8486 H0 15 21.1278 24.9958 0.1328 H0 20 27.1601 31.4104 0.1308 H0 Engle ARCH test for heteroscedasticity : (at 95% confidence) Under the null hypothesis that a time series is a random sequence of Gaussian disturbances (i.e., no heteroscedasticity). This test statistic is also asymptotically Chi-Square distributed Lag Test statistics Critical Value P-value Test results 10 5.6764 18.3070 0.8417 H0 15 20.2734 24.9958 0.1617 H0 20 25.5158 31.4104 0.1824 H0
Outcome of TGARCH Return, Estimated Volatility, and Innovations (i.e. residuals)
EGARCH Empirical studies on financial series have shown that they are characterised by increased conditional variance following negative shocks (bad news). In EGARCH model, the volatility depends on the signs of lagged residuals The difference between absolute residuals and expectation of the absolute residuals. We do not have to restrict the parameters to be positive.
EGARCH The volatility model of EGARCH Parameters Value v -0.0668 a -0.0630 b 1.0182 g 0.0848
Outcome of EGARCH Returns, Estimated Volatility, and Standardised residuals
ARCH (20) Model The major problem with ARCH model is that it requires long lag. We experimented with ARCH (1) and ARCH (10). Both models fail to capture the property of serial correlation and heterscedasticity of the data. Forecast the volatility of five next days (conditional mean of returns is 0.049289)
Outcome of ARCH (20) Estimated volatility, standardised residuals, ACF of squared standardised residuals, & test results JBP Q test Lag Test statistics Critical Value P-value Test results 10 4.3644 18.3070 0.9294 H0 15 8.6931 24.9958 0.893 20 12.7166 31.4104 0.8892 Engle ARCH test Lag Test statistics Critical Value P-value Test results 10 4.3496 18.3070 0.9302 H0 15 8.6468 24.9958 0.8953 20 13.0126 31.4104 0.8768
Matlab codes (GARCH 1,1) %reading data for S&P industrial SnP_industrial=xlsread('daily_data.xls','Data'); dates=SnP_industrial(:,1)+datenum('30-Dec-1899'); returns=diff(log(SnP_industrial(:,2)))*100; returns(3586,1)=0; plot (dates,SnP_industrial(:,2)); datetick('x',23); ylabel('S&P Industrial Index'); title('Daily S&P Industrial Index 01 Jan 1990 - 29 Sep 2003'); figure; plot (dates,returns); datetick ('x',23); ylabel ('S&P Industrial Returns'); title('Daily Return of S&P Industrial Index 01 Jan 1990 - 29 Sep 2003'); %Preestimation Analysis autocorr(returns); title('ACF with Bounds for Raw Return Series'); autocorr(returns.^2); title('ACF of the Squared Returns'); %Ljung-box-pierce q test for ACF [H,pValue,Stat,CriticalValue] = lbqtest(returns-mean(returns),[10 15 20]',0.05); [H pValue Stat CriticalValue] %LBP q test squared ACF [H,pValue,Stat,CriticalValue] = lbqtest(returns-mean(returns).^2,[10 15 20]',0.05); %Heteroscedasticity Engle ARCH test [H,pValue,Stat,CriticalValue]=archtest(returns-mean(returns),[10 15 20]',0.05);
Matlab codes (GARCH 1,1) %Estimating parameters GARCH (1,1) [coeff,errors,LLF,innovations,sigmas,summary] = garchfit(returns); garchdisp(coeff,errors); %unconditional unconditional std as h0 h0 = sqrt(coeff.K/(1 - sum([coeff.GARCH(:);coeff.ARCH(:)]))) plot(sigmas), hold('on'); plot([0 size(sigmas,1)],[h0 h0],'red'); title('Fitted Conditional Standard Deviations'); hold('off'); %Forecast variance at time t hsquared=coeff.K+coeff.GARCH*sigmas(3586,1)^2+coeff.ARCH*innovations(3586,1)^2 %Forecast volatility (std) at time t (single period) h=sqrt(hsquared) %Forecast volatililty (5 periods) [sigmaForecast,meanForecast] = garchpred(coeff,returns,5); [sigmaForecast,meanForecast] %Postestimation Analysis garchplot(innovations,sigmas,returns); figure; %standardised innovations stdresiduals=returns./sigmas; mean(stdresiduals); std(stdresiduals); hist(stdresiduals,100); plot(stdresiduals); ylabel('Innovation'); title('Standardized Innovations'); %ACF of standardised innovations autocorr((stdresiduals).^2) title('ACF of the Squared Standardized Innovations'); %LBP q test and Engle ARCH test on standardised innovations [H, pValue,Stat,CriticalValue] = lbqtest((stdresiduals).^2,[10 15 20]',0.05); [H pValue Stat CriticalValue] [H, pValue, Stat, CriticalValue] = archtest(stdresiduals,[10 15 20]',0.05);
Matlab codes ARCH (20) %Estimating parameters ARCH (20) spec=garchset('P',0,'Q',20) [coeff,errors,LLF,innovations,sigmas,summary] = garchfit(spec,returns); garchdisp(coeff,errors); %Forecast volatililty (5 periods) [sigmaForecast,meanForecast] = garchpred(coeff,returns,5); [sigmaForecast,meanForecast] %Postestimation Analysis garchplot(innovations,sigmas,returns); figure; %standardised innovations stdresiduals=returns./sigmas; mean(stdresiduals); std(stdresiduals); hist(stdresiduals,100); plot(stdresiduals); ylabel('Innovation'); title('Standardized Innovations'); %ACF of standardised innovations autocorr((stdresiduals).^2) title('ACF of the Squared Standardized Innovations'); %LBP q test and Engle ARCH test on standardised innovations [H, pValue,Stat,CriticalValue] = lbqtest((stdresiduals).^2,[10 15 20]',0.05); [H pValue Stat CriticalValue] [H, pValue, Stat, CriticalValue] = archtest(stdresiduals,[10 15 20]',0.05);
Matlab codes student-t GARCH [parameters, likelihood, stderrors, robustSE, ht, scores] = fattailed_garch(returns, 1, 1,'STUDENTST'); subplot(3,1,1);plot(1:3586,returns);legend('Data'); subplot(3,1,2);plot(1:3586,sqrt(ht));legend('Estimated Std Dev'); subplot(3,1,3);plot(1:3586,returns./sqrt(ht));legend('Standardized Residuals'); stdresiduals=returns./sqrt(ht); hist(stdresiduals,100); plot(stdresiduals); ylabel('Innovation'); title('Standardized Innovations'); figure; %ACF of standardised innovations autocorr((stdresiduals).^2) title('ACF of the Squared Standardized Innovations'); %LBP q test and Engle ARCH test on standardised innovations [H, pValue,Stat,CriticalValue] = lbqtest((stdresiduals).^2,[10 15 20]',0.05); [H pValue Stat CriticalValue] [H, pValue, Stat, CriticalValue] = archtest(stdresiduals,[10 15 20]',0.05);
Matlab codes TGARCH & EGARCH [parameters, likelihood, stderrors, robustSE, ht, scores]=egarch(returns,1,1,'NORMAL'); subplot(3,1,1);plot(1:3586,returns);legend('Data'); subplot(3,1,2);plot(1:3586,sqrt(ht));legend('Estimated Std Dev'); subplot(3,1,3);plot(1:3586,returns./sqrt(ht));legend('Standardized Residuals'); stdresiduals=returns./sqrt(ht); hist(stdresiduals,100); plot(stdresiduals); ylabel('Innovation'); title('Standardized Innovations'); figure; %ACF of standardised innovations autocorr((stdresiduals).^2) title('ACF of the Squared Standardized Innovations'); %LBP q test and Engle ARCH test on standardised innovations [H, pValue,Stat,CriticalValue] = lbqtest((stdresiduals).^2,[10 15 20]',0.05); [H pValue Stat CriticalValue] [H, pValue, Stat, CriticalValue] = archtest(stdresiduals,[10 15 20]',0.05); ***************************************************************************************************************** TGARCH [parameters, likelihood, ht, stderrors, robustSE, scores] = tarch(returns,1, 1, 1);