Abstract
This is a solution for Workshop 8. In this workshop we learn about volatility models, also called Autoregressive Conditional Heteroscedasticity (ARCH) models.You have to read my note “Introducción a modelos ARCH”.
An ARCH model is designed to model daily variance of financial instruments. We will start with the ARCH(1) model. Assume that \(Y_t\) is the daily continuously compounded return of a financial instrument, then we can model its variance as follows:
\[ Y_{t}=\beta_{0}+\varepsilon_{t} \] In this case, we are interested on the shock or error of the series, not on the actual mean return of the series. This is the reason I indicated that the daily value of Y is about a mean value \(B_0\) plus a random shock (error). This error is supposed to behave like a normal distributed variable with a specific variance and mean equal to zero. Then, I will now focus on how to model the variance of this daily error series:
The shock follows a normal distribution with mean 0 and volatility = square root of h: \[ \varepsilon_{t}\thicksim N(0,\sqrt{h}_{t}) \] Now we will model variance \(h_t\) as an autoregressive process similar to an MA process:
\[ h_{t}=\alpha_{0}+\alpha_{1}\varepsilon_{t-1}^{2} \] We see that the variance of today is equal to a coefficient \(\alpha_0\) plus \(\alpha_1\) times the squared shock of yesterday.
\[ \alpha_{0}>=0;0<=\alpha_{1}<1 \]
This model is called ARCH(1) since we are considering only the lag 1 of the shock as a factor that impacts the return variance of today.
We can see that \(\alpha_1\) is like a filter with values from 0 to 1. If \(\alpha_1\) is close to 1, then almost all information of the previous shock squared will pass to the variance of today. Then, the higher the value of \(\alpha_1\), the higher the impact of the shock of yesterday to the return variance of today.
We will play with a simulation to better understand this ARCH(1) model.
Now you have to simulate 2 ARCH(1) models using 500 periods (days) with the following specifications:
For model 1 use \(\beta_0=0\), \(\alpha_0=1\), and \(\alpha_1=0.90\). You can do this simulation in R as follows:
=1
alpha0= 0.9
alpha1= 0 B0
I create empty vectors for the 500 variances and shocks:
= 500
n = single(length=n)
error = single(length=n) h
The single function creates a numeric vector with a specific length and with zero values.
I generate the first random shock following the specifications:
1] = alpha0 + alpha1*0
h[# Since there is no shock at day 0, I will assign 0 to this shock, so I only
# consider alpha for the formula of the variance
1] = rnorm(n = 1, mean=0, sd=sqrt(h[1])) error[
Now create the Y variable, which will be an ARCH(1) process. Assign the value for Y for the first day:
= single(length=n)
Y1]= B0 + error[1] Y[
Now fill out the Y values for the rest of the days
for (i in 2:n){
<- alpha0 + alpha1*((error[i-1]^2))
h[i] <- rnorm(n=1, 0, sqrt(h[i]))
error[i] }
We can see the first values of h and error:
head(error)
## [1] 0.2398045 -0.1093199 0.7450560 1.0516638 -1.4913706 0.2722053
head(h)
## [1] 1.000000 1.051756 1.010756 1.499598 1.995397 3.001768
Now I create the Y values from day 2 to day 500:
for (i in 2:n){
<- B0 + error[i]
Y[i]
}plot(Y, type="l", col="blue")
Now using the same dataset SIMULATE model 2 (as Y2) as another ARCH(1). Use alpha0=0.1 and alpha1=0.1.
Here is the simulation of Y2 as an ARCH(1) model with alpha0=0.1 and alpha1=0.1.
I follow the same logic and steps I did for Y:
SOLUTION for this simulation:
I start re-defining the parameters of this ARCH(1) model:
=0.1
alpha0= 0.1
alpha1= 0 B0
I create again empty vectors for the 500 variances and shocks. I will use the same R variables I used for Y, so the previous values will be replaced with the new ones:
= 500
n = single(n)
error = single(n) h
The single function creates a numeric vector with zero values.
I generate the first random shock following the specifications:
1] = alpha0 + alpha1*0
h[# Since there is no shock at day 0, I will assign 0 to this shock, so I only
# consider alpha for the formula of the variance
1] = rnorm(n = 1, mean=0, sd=sqrt(h[1])) error[
Now create the Y2 variable, which will be an ARCH(1) process. Assign the value for Y for the first day:
= single(length=n)
Y21]= B0 + error[1] Y[
Now fill out the Y2 values for the rest of the days.
I start filling the values for the variances from day 2 to day N.
# I do a look to estimate the changing variances from day 2 to N
for (i in 2:n){
# For each iteration, I create the variance according to the ARCH(1) equation
<- alpha0 + alpha1*((error[i-1]^2))
h[i] # Using the calculated variance for day i, h[i], now I randomly create a shock/error
# that follows a normal distribution with mean = 0 and standard deviation= sqrt(h[i])
<- rnorm(n=1, 0, sqrt(h[i]))
error[i] }
We can see the first values of h and error:
head(error)
## [1] -0.71363680 -0.22334989 0.45022941 0.05687703 0.09529039 -0.54821941
head(h)
## [1] 0.1000000 0.1509277 0.1049885 0.1202707 0.1003235 0.1009080
Now I create the Y2 values from day 2 to day 500:
for (i in 2:n){
<- B0 + error[i]
Y2[i]
}
plot(Y2, type="l", col="blue")
WHAT IS THE DIFFERENCE BETWEEN THE SERIES Y AND Y2?
THE MAIN DIFFERENCE IS THAT Y2 HAS A MORE HOMOGENEOUS VARIANCE COMPARED WITH Y. Y HAS CHANGING VOLATILITY OVER TIME, WHILE Y2 SEEMS TO HAVE ABOUT THE SAME VARIANCE OVER TIME.
Looking at the original ARCH equation, EXPLAIN why do you think both series are different?
THE ARCH(1) EQUATION IS:
\[ Y_{t}=\beta_{0}+\varepsilon_{t} \]
The shock follows a normal distribution with mean 0 and volatility = square root of h: \[ \varepsilon_{t}\thicksim N(0,\sqrt{h}_{t}) \]
Now we will model variance \(h_t\) as an autoregressive process similar to an MA process:
\[ h_{t}=\alpha_{0}+\alpha_{1}\varepsilon_{t-1}^{2} \]
We see that the variance of today is equal to a coefficient \(\alpha_0\) plus \(\alpha_1\) times the squared shock of yesterday.
FOR Y, WE USED AN ALPHA1=0.9, AND FOR Y2 WE USED AN ALPHA1=0.1. THIS MEANS THAT FOR Y2, ONLY ABOUT 10% OF THE SQUARED ERRORS OF YESTERDAY ARE PASSED TO THE VARIANCE OF TODAY. WE CAN SEE THAT AS ALPHA1 IS CLOSE TO ZERO, THEN THE VARIANCE WILL BE ABOUT THE SAME FOR THE WHOLE PERIOD.
In this exercise we analyze volatility of financial returns using rolling windows. It has been shown that volatility of financial instruments changeS over time. As we practiced in previous exercise, family ARCH models are designed to model the changing volatility, which is the standard deviation of returns (actually, these models analyze the changing variance, but the volatility is the squared root of the variance). In this part, we will use daily returns of a market index, and calculate rolling means and rolling standard deviations using a moving/rolling windows of 20 business days.
#Load the quantmod library to use the getsymbols command:
library(quantmod)
<- getSymbols("^MXX", from="2008-01-01",auto.assign = FALSE)[,6]
IPC # auto.assign=FALSE since I want the dataset to be called IPC, not MXX
# I indicate to get the column 6 of the dataset, which is the adjusted price
# I calculate cc returns of the IPCyC index:
<- na.omit(diff(log(IPC))) ipc_ret
library(zoo)
<- na.omit(rollapply(ipc_ret, 20, mean))
roll_mean <- na.omit(rollapply(ipc_ret, 20, sd))
roll_sd
<- merge(roll_mean, roll_sd)
ipc_mean_vol colnames(ipc_mean_vol) <- c("roll_mean", "roll_sd")
plot(ipc_mean_vol)
WHAT DO YOU OBSERVE? In which periods you observe more volatility?
I SEE MORE VOLATILITY IN 2008 AND 2020 (THE 2 YEARS OF FINANCIAL CRISIS).
Describe with your words, if you see a relationship between volatility and average returns.
WE CAN SEE THAT IN BOTH PLOTS, FOR HIGH PERIODS OF VOLATILITY, USUALLY WE SEE DAYS WITH VERY NEGATIVE RETURNS. THE HIGHER THE VOLATILITY THE MORE THE PROBABILITY TO HAVE VERY NEGATIVE RETURNS.
Now I use a rolling window of only 5 days:
<- na.omit(rollapply(ipc_ret, 5, mean))
roll_mean2 <- na.omit(rollapply(ipc_ret, 5, sd))
roll_sd2
<- merge(roll_mean2, roll_sd2)
ipc_mean_vol2 colnames(ipc_mean_vol2) <- c("roll_mean", "roll_sd")
I plot this new means and volatilities with a rolling window of 5 days:
(The sd will be the red line and the mean, the black line):
plot(ipc_mean_vol2)
COMPARED WITH THE PREVIOUS PLOT OF 20-DAY ROLLING MEANS AND VOLATILITY, WE SEE THAT THE 5-DAY ROLLING MEANS AND VOLATILITIES HAVE A WIDER RANGE OF MOVEMENT OVER TIME. THIS IS EXPECTED SINCE THE VARIABILITY OF THE MEAN OF ONLY 5 DAYS SHOULD BE BIGGER COMPARED WITH THE VARIABILITY OF THE MEAN OF 20 DAYS; THE MORE THE DAYS WE USE FOR THE COMPUTING THE MEAN, THE LESS THE VARIABILITY OF THE MEANS. THEN, WE WOULD FIND MORE VOLATILITY OF THE MEAN OF DAILY RETURNS FOR SHORTER PERIODS OF TIME.
# I run the getSymbols indicating that I only want the column 6,
# and I do not want to name the object automatically (auto.assign=FALSE)
<- getSymbols("^MXX", from="2013-01-01",
IPC13 to="2021-10-01", auto.assign = FALSE)[,6]
# I calculate cc returns:
<- na.omit(diff(log(IPC13)))
ipc_ret13
colnames(ipc_ret13) <- c("r")
plot(ipc_ret13)
Now we check whether the IPCyC returns are heteroscedastic. You can do this by testing whether the cc IPCyC returns follows an ARCH process. Do this test and interpret it.
We do this test with the ArchTest function from the FinTS package (Install this package)
library(FinTS)
## Warning: package 'FinTS' was built under R version 4.1.3
ArchTest(ipc_ret13$r)
##
## ARCH LM-test; Null hypothesis: no ARCH effects
##
## data: ipc_ret13$r
## Chi-squared = 453.65, df = 12, p-value < 2.2e-16
INTERPRETATION:
Since the p-value of this test is less than 0.05, we can reject the NULL hypothesis that states that there is NO ARCH effects. In sum, we can have statistical evidence to say that the IPCyC returns has heteroscedasticity in its variance.
We need to install the fGarch package first.
library(fGarch)
<- garchFit(~garch(1,0), data = ipc_ret13$r, trace = F)
arch.fit summary(arch.fit)
##
## Title:
## GARCH Modelling
##
## Call:
## garchFit(formula = ~garch(1, 0), data = ipc_ret13$r, trace = F)
##
## Mean and Variance Equation:
## data ~ garch(1, 0)
## <environment: 0x0000000016e40f08>
## [data = ipc_ret13$r]
##
## Conditional Distribution:
## norm
##
## Coefficient(s):
## mu omega alpha1
## 5.6089e-05 6.7850e-05 3.0349e-01
##
## Std. Errors:
## based on Hessian
##
## Error Analysis:
## Estimate Std. Error t value Pr(>|t|)
## mu 5.609e-05 1.923e-04 0.292 0.771
## omega 6.785e-05 2.807e-06 24.174 < 2e-16 ***
## alpha1 3.035e-01 3.755e-02 8.083 6.66e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Log Likelihood:
## 7128.66 normalized: 3.249161
##
## Description:
## Wed Apr 27 08:44:30 2022 by user: Alberto
##
##
## Standardised Residuals Tests:
## Statistic p-Value
## Jarque-Bera Test R Chi^2 559.519 0
## Shapiro-Wilk Test R W 0.9780604 0
## Ljung-Box Test R Q(10) 26.51314 0.003108016
## Ljung-Box Test R Q(15) 31.12279 0.008458383
## Ljung-Box Test R Q(20) 40.08945 0.004866927
## Ljung-Box Test R^2 Q(10) 240.4888 0
## Ljung-Box Test R^2 Q(15) 381.8752 0
## Ljung-Box Test R^2 Q(20) 437.1344 0
## LM Arch Test R TR^2 201.9747 0
##
## Information Criterion Statistics:
## AIC BIC SIC HQIC
## -6.495588 -6.487803 -6.495592 -6.492743
We can also run the same ARCH model using the ugarchfit from the rugarch package.
library(FinTS)
library(rugarch)
#ARCH(1)
=ugarchspec(variance.model= list(model= "sGARCH", garchOrder= c(1, 0),
Espec1submodel= NULL, variance.targeting= FALSE),
mean.model= list(armaOrder= c(0, 0), include.mean= TRUE, archm= FALSE,
archpow= 0, arfima= FALSE, external.regressors= NULL, archex= FALSE),
distribution.model= "norm", start.pars= list(), fixed.pars= list())
#Running the ARCH model with the specifications:
<- ugarchfit(spec=Espec1, data=ipc_ret13$r)
arch1 arch1
##
## *---------------------------------*
## * GARCH Model Fit *
## *---------------------------------*
##
## Conditional Variance Dynamics
## -----------------------------------
## GARCH Model : sGARCH(1,0)
## Mean Model : ARFIMA(0,0,0)
## Distribution : norm
##
## Optimal Parameters
## ------------------------------------
## Estimate Std. Error t value Pr(>|t|)
## mu 0.000056 0.000192 0.29162 0.77058
## omega 0.000068 0.000003 24.16390 0.00000
## alpha1 0.303952 0.037609 8.08184 0.00000
##
## Robust Standard Errors:
## Estimate Std. Error t value Pr(>|t|)
## mu 0.000056 0.000195 0.28781 0.773488
## omega 0.000068 0.000005 13.36853 0.000000
## alpha1 0.303952 0.077328 3.93068 0.000085
##
## LogLikelihood : 7128.665
##
## Information Criteria
## ------------------------------------
##
## Akaike -6.4956
## Bayes -6.4878
## Shibata -6.4956
## Hannan-Quinn -6.4927
##
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 8.314 0.0039342
## Lag[2*(p+q)+(p+q)-1][2] 9.512 0.0025732
## Lag[4*(p+q)+(p+q)-1][5] 14.153 0.0007492
## d.o.f=0
## H0 : No serial correlation
##
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 1.85 1.738e-01
## Lag[2*(p+q)+(p+q)-1][2] 17.10 2.567e-05
## Lag[4*(p+q)+(p+q)-1][5] 71.70 0.000e+00
## d.o.f=1
##
## Weighted ARCH LM Tests
## ------------------------------------
## Statistic Shape Scale P-Value
## ARCH Lag[2] 30.45 0.500 2.000 3.422e-08
## ARCH Lag[4] 82.53 1.397 1.611 0.000e+00
## ARCH Lag[6] 106.39 2.222 1.500 0.000e+00
##
## Nyblom stability test
## ------------------------------------
## Joint Statistic: 2.6786
## Individual Statistics:
## mu 0.08615
## omega 2.11360
## alpha1 1.10579
##
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic: 0.846 1.01 1.35
## Individual Statistic: 0.35 0.47 0.75
##
## Sign Bias Test
## ------------------------------------
## t-value prob sig
## Sign Bias 0.7212 0.4709
## Negative Sign Bias 0.6669 0.5049
## Positive Sign Bias 0.8604 0.3897
## Joint Effect 1.1950 0.7542
##
##
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
## group statistic p-value(g-1)
## 1 20 71.07 6.105e-08
## 2 30 79.35 1.439e-06
## 3 40 95.48 1.224e-06
## 4 50 108.28 2.303e-06
##
##
## Elapsed time : 0.2081809
Both functions get the same estimations for the ARCH coefficients.
INTERPRET the OUTPUT of the ARCH(1) model. You have to interpret the omega, alpha and mu coefficients. The omega coefficient is equivalent to the \(\alpha_0\) coefficient of our model, and the mu coefficient is actually our \(\beta_0\) coefficient.
THE aplpha1 COEFFICIENT IS 0.3039519, which means that the squared error of yesterday is positively and significantly related with the return variance of today. In other words,30.3951852% of the squared error of yesterday is passed to the return variance of today.
The mu coefficient of 5.6075049^{-5} is the mean daily return (in decimal) of the IPCyC over time. The average daily return of the IPCyC is about 0.0056075%.
The omega coefficient represents the fixed daily amount of variance, which together with the effect of the changing shock of yesterday filtered by the alpha1 coefficient defines the variance of today.
<- garchFit(~garch(1,1), data = ipc_ret13$r, trace = F) garch.fit
## Warning: Using formula(x) is deprecated when x is a character vector of length > 1.
## Consider formula(paste(x, collapse = " ")) instead.
summary(garch.fit)
##
## Title:
## GARCH Modelling
##
## Call:
## garchFit(formula = ~garch(1, 1), data = ipc_ret13$r, trace = F)
##
## Mean and Variance Equation:
## data ~ garch(1, 1)
## <environment: 0x0000000022fc2990>
## [data = ipc_ret13$r]
##
## Conditional Distribution:
## norm
##
## Coefficient(s):
## mu omega alpha1 beta1
## 1.4819e-04 3.0712e-06 1.0725e-01 8.6075e-01
##
## Std. Errors:
## based on Hessian
##
## Error Analysis:
## Estimate Std. Error t value Pr(>|t|)
## mu 1.482e-04 1.709e-04 0.867 0.385747
## omega 3.071e-06 8.159e-07 3.764 0.000167 ***
## alpha1 1.073e-01 1.535e-02 6.985 2.85e-12 ***
## beta1 8.608e-01 2.023e-02 42.554 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Log Likelihood:
## 7258.084 normalized: 3.308151
##
## Description:
## Wed Apr 27 08:44:32 2022 by user: Alberto
##
##
## Standardised Residuals Tests:
## Statistic p-Value
## Jarque-Bera Test R Chi^2 90.55653 0
## Shapiro-Wilk Test R W 0.9916117 6.063078e-10
## Ljung-Box Test R Q(10) 21.1889 0.0198142
## Ljung-Box Test R Q(15) 24.45307 0.05778823
## Ljung-Box Test R Q(20) 33.26706 0.03153197
## Ljung-Box Test R^2 Q(10) 22.45179 0.01296136
## Ljung-Box Test R^2 Q(15) 25.66922 0.04164662
## Ljung-Box Test R^2 Q(20) 32.40996 0.03912116
## LM Arch Test R TR^2 24.37233 0.01809386
##
## Information Criterion Statistics:
## AIC BIC SIC HQIC
## -6.612656 -6.602276 -6.612663 -6.608863
We can also run the same model using the other function:
=ugarchspec(variance.model= list(model= "sGARCH", garchOrder= c(1, 1),
Espec2submodel= NULL, external.regressors= NULL, variance.targeting= FALSE),
mean.model= list(armaOrder= c(0, 0), include.mean= TRUE, archm= FALSE,
archpow= 0, arfima= FALSE, external.regressors= NULL, archex= FALSE),
distribution.model= "norm", start.pars= list(), fixed.pars= list())
#Estimación del GARCH(1,1)
<- ugarchfit(spec=Espec2, data=ipc_ret13$r)
garch1 garch1
##
## *---------------------------------*
## * GARCH Model Fit *
## *---------------------------------*
##
## Conditional Variance Dynamics
## -----------------------------------
## GARCH Model : sGARCH(1,1)
## Mean Model : ARFIMA(0,0,0)
## Distribution : norm
##
## Optimal Parameters
## ------------------------------------
## Estimate Std. Error t value Pr(>|t|)
## mu 0.000149 0.000171 0.87276 0.382794
## omega 0.000003 0.000002 1.64866 0.099218
## alpha1 0.107037 0.014045 7.62125 0.000000
## beta1 0.861658 0.019241 44.78187 0.000000
##
## Robust Standard Errors:
## Estimate Std. Error t value Pr(>|t|)
## mu 0.000149 0.000154 0.96719 0.333449
## omega 0.000003 0.000009 0.33013 0.741305
## alpha1 0.107037 0.024700 4.33344 0.000015
## beta1 0.861658 0.073294 11.75614 0.000000
##
## LogLikelihood : 7258.083
##
## Information Criteria
## ------------------------------------
##
## Akaike -6.6127
## Bayes -6.6023
## Shibata -6.6127
## Hannan-Quinn -6.6089
##
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 7.815 0.005180
## Lag[2*(p+q)+(p+q)-1][2] 8.455 0.004901
## Lag[4*(p+q)+(p+q)-1][5] 11.738 0.003261
## d.o.f=0
## H0 : No serial correlation
##
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.09676 0.7558
## Lag[2*(p+q)+(p+q)-1][5] 3.00646 0.4059
## Lag[4*(p+q)+(p+q)-1][9] 8.89785 0.0853
## d.o.f=2
##
## Weighted ARCH LM Tests
## ------------------------------------
## Statistic Shape Scale P-Value
## ARCH Lag[3] 2.720 0.500 2.000 0.09913
## ARCH Lag[5] 4.907 1.440 1.667 0.10796
## ARCH Lag[7] 10.185 2.315 1.543 0.01667
##
## Nyblom stability test
## ------------------------------------
## Joint Statistic: 8.4682
## Individual Statistics:
## mu 0.03748
## omega 1.84301
## alpha1 0.22295
## beta1 0.21146
##
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic: 1.07 1.24 1.6
## Individual Statistic: 0.35 0.47 0.75
##
## Sign Bias Test
## ------------------------------------
## t-value prob sig
## Sign Bias 0.5793 0.5624
## Negative Sign Bias 1.0922 0.2749
## Positive Sign Bias 0.7063 0.4801
## Joint Effect 1.9257 0.5880
##
##
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
## group statistic p-value(g-1)
## 1 20 42.24 1.643e-03
## 2 30 57.01 1.432e-03
## 3 40 82.39 6.116e-05
## 4 50 96.93 5.409e-05
##
##
## Elapsed time : 0.1290929
We can plot the volatility estimations over time according to the GARCH(1,1) model:
plot(garch1,which=3)
This plot is very similar to the plot we did with rolling standard deviations. The difference is that in this plot, the volatility is estimated according to the GARCH(1,1) model, instead of using rolling windows.
I indicated which=3 in the plot to see the conditional volatility. There are 12 different plots we can do. You can run in your console: plot(garch1), and you can select which plot you want.
INTERPRET the model output.
What does each coefficient mean?
THE beta1 COEFFICIENT IS 0.8616583, AND IT IS SIGNIFICANTLY DIFFERENT THAN ZERO. THIS MEANS THAT ABOUT 86.1658298% OF THE RETURN VARIANCE OF YESTERDAY IS PASSED TO THE RETURN VARIANCE OF TODAY, BESIDES THE IMPACT OF THE YESTERDA’S SQUARED ERROR. SINCE THIS COEFFICIENT IS GREATER THAN 0.7, THIS IS A SIGN OF CLUSTERING OF VOLATILITY.
IN THIS CASE, CONSIDERING THE VARIANCE OF YESTERDAY, THE SQUARED ERROR OF YESTERDAY IMPACTS THE RETURN VARIANCE OF TODAY IN A POSITIVE AND SIGNIFICANT WAY, BUT ONLY ABOUT 10.703728% OF THE SQUARED ERROR OF YESTERDAY IS PASSED TO THE VARIANCE OF TODAY. WE CAN SEE THAT AFTER WE INCLUDED THE GARCH TERM, THE MAGNITUDE OF THE ALPHA COEFFICIENT WENT DOWN SIGNIFICANTLY.
If we do a forecast of the daily return with this model, we will end up with the value of mu (or \(\beta_0\) according to our mathematical definition for an ARCH model) for the next future days. The reason is that for the mean model we did not include any regressor or explanatory variable, and also we did not include ARMA terms. Then, the mean model was basically the value of the mu coefficient, which is 1.4925263^{-4}.
We can do a prediction with the GARCH(1,1) model for the daily future 10 return days, and we will see that the predictions will be the same for the future days, and equal to the mu coefficient. We can do this by applying the predict function to the object garch.fit, which was generated with the garchFit function (from the fGarch package):
#predict(garch.fit, n.ahead=10, plot=TRUE)
<-predict(garch.fit, n.ahead=10, plot=TRUE) garch.fit.pred
# garch.fit.pred stores the predictions for daily returns and daily volatility for
# the future 10 days
The predict function plots the historical values of the daily returns of the series (IPyC returns), and for the future values, it plots the predicted returns for the next days. We see the same prediction, which is equal to the mu coefficient. Also, we see the 95% confidence interval for the daily future returns for the IPyC, which are plotted in blue.
We can see the future predicted volatility as follows:
$standardDeviation garch.fit.pred
## [1] 0.008897539 0.008927721 0.008956841 0.008984940 0.009012056 0.009038226
## [7] 0.009063488 0.009087874 0.009111417 0.009134150
We can also use the rugarch package to do the predictions. We use the function ugarchforecast from the uGarchfit function:
<- ugarchforecast(garch1,n.ahead= 10) garch1.prediction
garch1.prediction will be a very special R class: an uGARCHforecast class. This is special R class object that stores information about the GARCH prediction.
For this type of R class objects, we use the @ character to access to the content of each element stored in this object.
The forecast for the daily return is stored in:
@forecast$seriesFor garch1.prediction
## 2021-09-30
## T+1 0.0001492526
## T+2 0.0001492526
## T+3 0.0001492526
## T+4 0.0001492526
## T+5 0.0001492526
## T+6 0.0001492526
## T+7 0.0001492526
## T+8 0.0001492526
## T+9 0.0001492526
## T+10 0.0001492526
The forecast for the standard deviation of returns (volatility) is stored in:
@forecast$sigmaFor garch1.prediction
## 2021-09-30
## T+1 0.008901842
## T+2 0.008932142
## T+3 0.008961396
## T+4 0.008989643
## T+5 0.009016922
## T+6 0.009043268
## T+7 0.009068717
## T+8 0.009093301
## T+9 0.009117052
## T+10 0.009140001
We can plot the historic and future volatility:
plot(garch1.prediction,which = 3)
I indicated which=3 to plot the historical and predicted volatility according to the GARCH model.
I download daily prices:
getSymbols(Symbols=c("CEMEXCPO.MX","^MXX"),from="2015-01-01",
to="2021-10-11")
## [1] "CEMEXCPO.MX" "^MXX"
I calculate returns:
<-merge(Ad(CEMEXCPO.MX),Ad(MXX))
prices<- na.omit(diff(log(prices)))
r names(r) <- c("CEMEX","MXX")
<-lm(r$CEMEX ~ r$MXX)
m1plot.default(x=r$MXX,y=r$CEMEX)
<-summary(m1)
m1sum m1sum
##
## Call:
## lm(formula = r$CEMEX ~ r$MXX)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.090026 -0.010191 -0.000749 0.009095 0.112417
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.0001281 0.0004538 -0.282 0.778
## r$MXX 1.4714069 0.0454250 32.392 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.01872 on 1700 degrees of freedom
## Multiple R-squared: 0.3816, Adjusted R-squared: 0.3813
## F-statistic: 1049 on 1 and 1700 DF, p-value: < 2.2e-16
INTERPRETATION:
BETA0 OR ALPHA OF JENSEN IS NOT SIGNIFICANTLY DIFFERENT THAN ZERO. THIS MEANS THAT CEMEX IS NOT OFFERING RETURNS SIGNIFICANTLY ABOVE THE MARKET.
BETA1 IS 1.4714069, AND ITS pvalue IS 1.1120591^{-179}. THIS MEANS THAT CEMEX RETURNS ARE POSITIVELY AND SIGNIFICANTLY RELATED TO THE MARKET RETURNS.
TO CHECK WHETHER CEMEX IS SIGNIFICANTLY RISKIER THAN THE MARKET, WE HAVE TO CHECK WHETHER BETA1 IS SIGNIFICANTLY GREATER THAN 1 (B1>1). ON AVERAGE, IT IS GREATER THAN ONE. TO SEE WHETHER B1 IS SIGNIFICANTLY >1, WE NEED TO ESTIMATE ITS 95% CONFIDENCE INTERVAL. WE CAN DO THIS WITH THE confint FUNCTION:
<-confint(m1)
cim1 cim1
## 2.5 % 97.5 %
## (Intercept) -0.001018204 0.0007620046
## r$MXX 1.382312067 1.5605017725
WE SEE THAT THE 95% C.I. FOR B1 GOES FROM 1.3823121 to 1.5605018, SO WE CAN SAY THAT 95% OF THE TIME, B1 WILL BE GREATER THAN 1. IN OTHER WORDS, IT IS SIGNIFICANTLY RISKIER THAN THE MARKET.
WE CAN CHECK WHETHER THERE IS SIGNIFICANTLY AUTOCORRELATIONS OF DAILY RETURNS JUT BY DOING AN AICF AND PACF PLOT:
library(astsa)
acf2(r$CEMEX)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
## ACF 0.03 -0.02 -0.03 -0.02 0.03 -0.04 0.06 0.03 0 -0.03 -0.01 0.04 -0.02
## PACF 0.03 -0.02 -0.02 -0.02 0.03 -0.04 0.06 0.02 0 -0.03 0.00 0.04 -0.02
## [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25]
## ACF 0.02 0 0.00 -0.01 0.01 0.00 0.06 0.03 0.01 0.01 -0.01 0.02
## PACF 0.02 0 -0.01 -0.01 0.02 -0.01 0.06 0.03 0.01 0.01 0.00 0.02
## [,26] [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36] [,37]
## ACF -0.01 -0.03 -0.01 -0.02 -0.02 0.01 -0.01 0 0 0 0.01 -0.01
## PACF -0.02 -0.03 -0.01 -0.02 -0.03 0.02 -0.02 0 0 0 0.01 0.00
## [,38] [,39] [,40] [,41] [,42] [,43] [,44] [,45] [,46] [,47] [,48] [,49]
## ACF 0.03 0.04 0.00 -0.02 -0.01 0.05 0.01 0.03 -0.01 -0.02 0.00 -0.02
## PACF 0.03 0.04 -0.01 -0.01 -0.01 0.04 0.01 0.03 -0.02 -0.02 0.01 0.00
## [,50] [,51] [,52]
## ACF -0.01 -0.01 -0.03
## PACF -0.02 -0.01 -0.03
WE CAN SEE THAT THERE IS POSITIVE AND SIGNIFICANT AUTOCORRELATION WITH ITS OWN RETURN 7 DAYS AGO AND 20 DAYS AGO.
NOW I DO THE TEST TO CHECK WHETHER THERE IS HETEROGENEITY OF VARIANCE:
ArchTest(r$CEMEX)
##
## ARCH LM-test; Null hypothesis: no ARCH effects
##
## data: r$CEMEX
## Chi-squared = 174.25, df = 12, p-value < 2.2e-16
SINCE P-VALUE OF THE TEST IS <0.05, THEN THERE IS STATISTICAL EVIDENCE FOR HETEROGENEITY OF VARIANCE.
I CAN CHECK WHETHER THE ERRORS (RESIDUALS) OF THE MARKET REGRESSION MODEL HAVE HETEROGENEITY OF VARIANCE:
ArchTest(m1$residuals)
##
## ARCH LM-test; Null hypothesis: no ARCH effects
##
## data: m1$residuals
## Chi-squared = 101.57, df = 12, p-value = 2.745e-16
SINCE P-VALUE<-0.05, THEN THE RESIDUALS OF THE MARKET MODEL HAVE HETEROGENEITY OF VARIANCE.
=ugarchspec(variance.model= list(model= "sGARCH",
Espec1garchOrder= c(5, 0), #Here we specify that we want 5 arch terms and 0 GARCH terms
submodel= NULL, variance.targeting= FALSE),
mean.model= list(armaOrder= c(0, 0), # no AR nor MA terms for the mean model
include.mean= TRUE, archm= FALSE,
archpow= 0, arfima= FALSE,
external.regressors= r$MXX, #This is the explanatory variable, the market return
archex= FALSE),
distribution.model= "norm", start.pars= list(), fixed.pars= list())
#Estimación del ARCH(5)
<- ugarchfit(spec=Espec1, data=r$CEMEX)
arch5 arch5
##
## *---------------------------------*
## * GARCH Model Fit *
## *---------------------------------*
##
## Conditional Variance Dynamics
## -----------------------------------
## GARCH Model : sGARCH(5,0)
## Mean Model : ARFIMA(0,0,0)
## Distribution : norm
##
## Optimal Parameters
## ------------------------------------
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000507 0.000412 -1.2314 0.218159
## mxreg1 1.474010 0.047060 31.3221 0.000000
## omega 0.000206 0.000015 13.3730 0.000000
## alpha1 0.159569 0.031266 5.1036 0.000000
## alpha2 0.101581 0.030709 3.3079 0.000940
## alpha3 0.093867 0.034476 2.7227 0.006476
## alpha4 0.046707 0.025676 1.8191 0.068898
## alpha5 0.032137 0.026755 1.2012 0.229686
##
## Robust Standard Errors:
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000507 0.000427 -1.18819 0.234759
## mxreg1 1.474010 0.058356 25.25887 0.000000
## omega 0.000206 0.000030 6.83966 0.000000
## alpha1 0.159569 0.041027 3.88941 0.000100
## alpha2 0.101581 0.044116 2.30260 0.021301
## alpha3 0.093867 0.049449 1.89827 0.057661
## alpha4 0.046707 0.036976 1.26316 0.206531
## alpha5 0.032137 0.045863 0.70072 0.483477
##
## LogLikelihood : 4421.732
##
## Information Criteria
## ------------------------------------
##
## Akaike -5.1865
## Bayes -5.1610
## Shibata -5.1866
## Hannan-Quinn -5.1771
##
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.0304 0.8616
## Lag[2*(p+q)+(p+q)-1][2] 0.8366 0.5544
## Lag[4*(p+q)+(p+q)-1][5] 1.7423 0.6804
## d.o.f=0
## H0 : No serial correlation
##
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.2492 0.617655
## Lag[2*(p+q)+(p+q)-1][14] 14.3695 0.033328
## Lag[4*(p+q)+(p+q)-1][24] 27.6988 0.001987
## d.o.f=5
##
## Weighted ARCH LM Tests
## ------------------------------------
## Statistic Shape Scale P-Value
## ARCH Lag[6] 0.1361 0.500 2.000 0.7122309
## ARCH Lag[8] 0.1829 1.480 1.774 0.9751318
## ARCH Lag[10] 19.4717 2.424 1.650 0.0002247
##
## Nyblom stability test
## ------------------------------------
## Joint Statistic: 3.0008
## Individual Statistics:
## mu 0.07756
## mxreg1 0.20946
## omega 1.07625
## alpha1 0.21328
## alpha2 0.54889
## alpha3 0.16572
## alpha4 0.74542
## alpha5 1.18395
##
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic: 1.89 2.11 2.59
## Individual Statistic: 0.35 0.47 0.75
##
## Sign Bias Test
## ------------------------------------
## t-value prob sig
## Sign Bias 0.7182 0.4727
## Negative Sign Bias 0.1444 0.8852
## Positive Sign Bias 0.4626 0.6437
## Joint Effect 0.8960 0.8264
##
##
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
## group statistic p-value(g-1)
## 1 20 88.67 5.703e-11
## 2 30 102.65 3.664e-10
## 3 40 112.48 4.750e-09
## 4 50 127.26 7.014e-09
##
##
## Elapsed time : 0.5825009
INTERPRETATION:
THE ALPHA COEFFICIENTS FOR THE PREVIUOS 3 DAYS INDICATE THAT THERE IS A POSITIVE AND SIGNIFICANTLY RELATIONSHIP BETWEEN THE SQUARED ERRORS OF THE PREVIOUS 3 DAYS AND THE RETURN VARIANCE OF TODAY.
SINCE alpha5 IS ALSO POSITIVE AND SIGNFICANT THEN WE CAN SAY THAT THE SQUARED ERRORS OF 5 DAYS AGO ARE RELATED TO THE RETURN VARIANCE OF TODAY.
REGARDING THE BETA1 COEFFICIENT WE SEE THAT BETA1 = 1.4740103, WHICH IS VERY CLOSE TO THE BETA1 WE ESTIMATED USING LINEAR REGRESSION. THE DIFFERENCE IS THAT THE STANDARD ERROR OF BETA1 IN THE ARCH MODEL IS A LITTLE BIT BIGGER (FROM 0.045 TO 0.060), BUT THE CONCLUSIONS ABOUT THE RISKINESS OF THE STOCK IS THE SAME: THERE IS STATISTICAL EVIDENCE TO SAY THAT AFTER CONSIDERING THE EFFECT OF PREVIOUS SHOCKS ON RETURN VARIANCE, CEMEX IS SIGNIFICANTLY RISKIER THAN THE MARKET.
I will start running a GARCH(1,1) model WITHOUT including the market return as explanatory variable (regressor), and then compare with the GARCH(1,1) market model:
=ugarchspec(variance.model= list(model= "sGARCH",
Especgarch1garchOrder= c(1, 1), # arch terms=1 and garch terms=1
submodel= NULL, variance.targeting= FALSE),
mean.model= list(armaOrder= c(0, 0), #With no AR nor MA terms for the mean model
include.mean= TRUE, archm= FALSE,
archpow= 0, arfima= FALSE,
external.regressors= NULL, #With no explanatory variable
archex= FALSE),
distribution.model= "norm", start.pars= list(), fixed.pars= list())
#Estimación del GARCH(1,1)
<- ugarchfit(spec=Especgarch1, data=r$CEMEX)
garch1 garch1
##
## *---------------------------------*
## * GARCH Model Fit *
## *---------------------------------*
##
## Conditional Variance Dynamics
## -----------------------------------
## GARCH Model : sGARCH(1,1)
## Mean Model : ARFIMA(0,0,0)
## Distribution : norm
##
## Optimal Parameters
## ------------------------------------
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000180 0.000494 -0.36449 0.715495
## omega 0.000010 0.000002 4.69002 0.000003
## alpha1 0.067871 0.006397 10.61050 0.000000
## beta1 0.915010 0.008921 102.56949 0.000000
##
## Robust Standard Errors:
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000180 0.000499 -0.36031 0.718615
## omega 0.000010 0.000004 2.79029 0.005266
## alpha1 0.067871 0.009257 7.33165 0.000000
## beta1 0.915010 0.010869 84.18528 0.000000
##
## LogLikelihood : 4070.661
##
## Information Criteria
## ------------------------------------
##
## Akaike -4.7787
## Bayes -4.7659
## Shibata -4.7787
## Hannan-Quinn -4.7740
##
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 2.48 0.1153
## Lag[2*(p+q)+(p+q)-1][2] 2.51 0.1906
## Lag[4*(p+q)+(p+q)-1][5] 3.78 0.2829
## d.o.f=0
## H0 : No serial correlation
##
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 5.051 0.02461
## Lag[2*(p+q)+(p+q)-1][5] 5.810 0.09965
## Lag[4*(p+q)+(p+q)-1][9] 7.319 0.17386
## d.o.f=2
##
## Weighted ARCH LM Tests
## ------------------------------------
## Statistic Shape Scale P-Value
## ARCH Lag[3] 0.0002709 0.500 2.000 0.9869
## ARCH Lag[5] 1.4155766 1.440 1.667 0.6148
## ARCH Lag[7] 2.6768371 2.315 1.543 0.5765
##
## Nyblom stability test
## ------------------------------------
## Joint Statistic: 9.652
## Individual Statistics:
## mu 0.08873
## omega 0.89905
## alpha1 0.16904
## beta1 0.29997
##
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic: 1.07 1.24 1.6
## Individual Statistic: 0.35 0.47 0.75
##
## Sign Bias Test
## ------------------------------------
## t-value prob sig
## Sign Bias 0.1328 0.89440
## Negative Sign Bias 2.2105 0.02720 **
## Positive Sign Bias 1.0471 0.29519
## Joint Effect 7.4339 0.05928 *
##
##
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
## group statistic p-value(g-1)
## 1 20 60.12 3.711e-06
## 2 30 71.67 1.788e-05
## 3 40 85.50 2.501e-05
## 4 50 107.28 3.069e-06
##
##
## Elapsed time : 0.1358349
Now I run the same GARCH(1,1), but including the market return as a regressor in the model:
=ugarchspec(variance.model= list(model= "sGARCH",
Especgarch2garchOrder= c(1, 1), # GARCH(1,1) or arch terms=1 and garch term =1
submodel= NULL, variance.targeting= FALSE),
mean.model= list(armaOrder= c(0, 0), # no AR nor MA terms for the mean model
include.mean= TRUE, archm= FALSE,
archpow= 0, arfima= FALSE, archex= FALSE,
external.regressors= r$MXX), # The explanatory variable for the mean model is
# the market return
distribution.model= "norm", start.pars= list(), fixed.pars= list())
#Estimación del GARCH(1,1)
<- ugarchfit(spec=Especgarch2, data=r$CEMEX)
garch2 garch2
##
## *---------------------------------*
## * GARCH Model Fit *
## *---------------------------------*
##
## Conditional Variance Dynamics
## -----------------------------------
## GARCH Model : sGARCH(1,1)
## Mean Model : ARFIMA(0,0,0)
## Distribution : norm
##
## Optimal Parameters
## ------------------------------------
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000405 0.000401 -1.0108 0.312129
## mxreg1 1.462358 0.047625 30.7059 0.000000
## omega 0.000006 0.000002 3.6680 0.000244
## alpha1 0.050223 0.005775 8.6973 0.000000
## beta1 0.932371 0.007437 125.3743 0.000000
##
## Robust Standard Errors:
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000405 0.000387 -1.0466 0.29531
## mxreg1 1.462358 0.066028 22.1475 0.00000
## omega 0.000006 0.000004 1.5833 0.11335
## alpha1 0.050223 0.008796 5.7101 0.00000
## beta1 0.932371 0.011622 80.2239 0.00000
##
## LogLikelihood : 4451.226
##
## Information Criteria
## ------------------------------------
##
## Akaike -5.2247
## Bayes -5.2087
## Shibata -5.2247
## Hannan-Quinn -5.2188
##
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.01192 0.9131
## Lag[2*(p+q)+(p+q)-1][2] 0.38112 0.7522
## Lag[4*(p+q)+(p+q)-1][5] 1.58218 0.7197
## d.o.f=0
## H0 : No serial correlation
##
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 7.084 0.007778
## Lag[2*(p+q)+(p+q)-1][5] 7.724 0.034497
## Lag[4*(p+q)+(p+q)-1][9] 10.210 0.045226
## d.o.f=2
##
## Weighted ARCH LM Tests
## ------------------------------------
## Statistic Shape Scale P-Value
## ARCH Lag[3] 0.007677 0.500 2.000 0.9302
## ARCH Lag[5] 1.734761 1.440 1.667 0.5328
## ARCH Lag[7] 3.402052 2.315 1.543 0.4410
##
## Nyblom stability test
## ------------------------------------
## Joint Statistic: 5.6176
## Individual Statistics:
## mu 0.06669
## mxreg1 0.34319
## omega 0.19351
## alpha1 0.19142
## beta1 0.29543
##
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic: 1.28 1.47 1.88
## Individual Statistic: 0.35 0.47 0.75
##
## Sign Bias Test
## ------------------------------------
## t-value prob sig
## Sign Bias 0.8327 0.40512
## Negative Sign Bias 1.6533 0.09846 *
## Positive Sign Bias 0.7255 0.46824
## Joint Effect 3.4763 0.32384
##
##
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
## group statistic p-value(g-1)
## 1 20 68.74 1.488e-07
## 2 30 78.75 1.761e-06
## 3 40 96.21 9.727e-07
## 4 50 95.77 7.358e-05
##
##
## Elapsed time : 0.247927
WHEN I INCLUDED THE MARKET RETURN AS A REGRESSOR, THE COEFFICIENT OF GARCH(1) INCREASED AND THE COEFFICIENT OF ARCH(1) DECREASED.
With your words, INTERPRET the coefficients of each model.
INTERPRETATION:
NOTE THAT IN THIS GARCH(1,1) MARKET MODEL, IT IS CONFUSING THAT BETA1 COEFFICIENT REFERS TO THE GARCH(1) TERM, NOT TO THE MARKET! THE MARKET BETA COEFFICIENT IS DISPLAYED AS mxreg1, AND IT IS EQUAL TO 1.4623581. COMPARED TO THE MARKET REGRESSION MODEL, BETA1 IN THIS GARCH MODEL DECREASED A LITTLE BIT, BUT THE CONCLUSION IS THE SAME: WE HAVE STATISTICAL EVIDENCE TO SAY THAT CEMEX IS SIGNIFICANTLY RISKIER THAN THE MARKET SINCE ITS 95% C.I. IS BIGGER THAN 1.
AFTER CONSIDERING THE EFFECT OF THE MARKET RETURN, WE SEE STATISTICAL EVIDENCE OF CLUSTERING OF VOLATILITY SINCE THE GARCH COEFFICIENT IS GREATER THAN 0.9, AND IT IS VERY SIGNIFICANT. IN OTHER WORDS, ABOUT 93.2371385% OF THE 1-DAY AGO RETURN VARIANCE IS PASSED TO THE RETURN VARIANCE OF TODAY.
WE ALSO SEE THAT THE SQUARED ERROR OF YESTERDAY IS POSITIVELY AND SIGNIFICANTLY RELATED TO THE RETURN VARIANCE OF TODAY. ABOUT 5.0223041% OF THE 1-DAY AGO SQUARED ERROR IS PASSED TO THE RETURN VARIANCE OF TODAY.
WE SEE THAT WHEN WE INCLUDE A GARCH TERM, THE MAGNITUD OF THE ARCH COEFFICIENT OF 1 DAY AGO DIMINISHES A LOT. THIS IS EXPECTED SIINCE THE GARCH(1) TERM CAPTURES THE LONG-TERM EFFECT OF PREVIOUS RETURN VARIANCES ON THE RETURN VARIANCE OF TODAY, WHILE THE ARCH(1) TERM CAPTURES THE SHORT-TERM EFFECT OF THE 1-DAY AGO ERROR.
ONLY FOR DAILY RETURN DATA, WE CAN ESTIMATE A MARKET REGRESSION MODEL WITH ARCH EFFECTS USING AN ARCH(N) OR GARCH(1,1). THE GARCH(1,1) IS USUALLY SUPERIOR THAN THE ARCH(1) OR THE ARCH(5) MODEL SINCE THE GARCH(1,1) BETTER MODEL THE CLUSTERING OF VOLATILITY THAT IS VERY COMMON IN ANY STOCK DAILY RETURN DATA.
WHEN WE RUN A MARKET MODEL USING A GARCH(1,1), THE ESTIMATION OF THE MARKET BETA1 AND ITS STANDARD ERROR IS MORE RELIABLE COMPARED TO THE TRADITIONAL LINEAR OLS REGRESSION THAT DOES NOT MODEL VOLATILITY. THE ESTIMATION OF THE MARKET BETA WILL BE VERY SIMILAR, BUT THE STANDARD ERROR CAN CHANGE MORE SIGNIFICANTLY BETWEEN BOTH MODELS.