<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
<HTML>
<HEAD>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=UTF-8">
  <META NAME="GENERATOR" CONTENT="GtkHTML/3.28.1">
  <TITLE>AW: [R-SIG-Finance] GARCH - Models</TITLE>
</HEAD>
<BODY LINK="#0000ff">
I can see your problem right away- there's no noise factor. Everything that comes out of your model is purely deterministic- no stochastic component to it whatsoever.<BR>
<BR>
See this bit of code?<BR>
<BR>
<FONT SIZE="2"><FONT COLOR="#000080">for(t in 2:length(v2)){</FONT></FONT><BR>
<BLOCKQUOTE TYPE=CITE>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">            v2[t] <- garch.coefs[1] + garch.coefs[2] * (r[t-1])^2 + garch.coefs[3] * v2[t-1]</FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">            r[t] <- sqrt(v2[t])*r[t-1]</FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">}</FONT></FONT><BR>
</BLOCKQUOTE>
In order for this stochastic process to work, there has to be a driving white noise factor. It's important to note the the return series itself is considered to be essentially just a random process, the precise nature of which depends on the conditional distribution that you specify.<BR>
<BR>
Try the version in the code I've attached instead. I don't use the quantmod package, simply because I've never needed it- there are other ways to get the job done.<BR>
<BR>
Oh, and I made a slight error in the references I provided- you'll need Hull Ch.19.<BR>
<BR>
I hope that helps.<BR>
<BR>
Regards,<BR>
<BR>
Sarbo<BR>
<BR>
On Sat, 2010-04-17 at 17:29 +0200, Konrad Hoppe wrote:
<BLOCKQUOTE TYPE=CITE>
    <FONT SIZE="2"><FONT COLOR="#000080">Hi,</FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">first of all, thank you for being patient with me, </FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">I’ve now implemented your example, but I simply don’t get any valid result, as you can see in the plot-call at the end of the following snippet:</FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080"> </FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">install.packages("quantmod")</FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">library(quantmod)</FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080"> </FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">from.dat <- as.Date("01/01/91", format="%m/%d/%y")</FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">to.dat <- as.Date(Sys.Date(), format="%m/%d/%y")</FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">getSymbols("^GDAXI", src="yahoo", from = from.dat, to = to.dat)</FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080"> </FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">daxTs <- ts(Ad(GDAXI))</FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">garch.coefs <- summary(garch(diff(daxTs), order=c(1,1), trace=F))$coef[,1]</FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080"> </FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">v2 <- vector(length=length(diff(daxTs)))</FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">r <- vector(length=length(diff(daxTs)))</FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">v2[1] <- rnorm(1)</FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">r[1] <- rnorm(1)</FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080"> </FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">for(t in 2:length(v2)){</FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">            v2[t] <- garch.coefs[1] + garch.coefs[2] * (r[t-1])^2 + garch.coefs[3] * v2[t-1]</FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">            r[t] <- sqrt(v2[t])*r[t-1]</FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">}</FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">plot.ts(r)            </FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080"> </FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">I don’t get it what I’m doing wrong, since I’m just simulating the estimated model formula… hope you have a clue,</FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080"> </FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080">konrad</FONT></FONT><BR>
    <BR>
    <FONT SIZE="2"><FONT COLOR="#000080"> </FONT></FONT><BR>
    <BR>
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    <DIV ALIGN=center>
<HR>
</DIV>
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    <B><FONT SIZE="2">Von:</FONT></B><FONT SIZE="2"> Sarbo [mailto:cmdr_rogue@hotmail.com] </FONT><BR>
    <B><FONT SIZE="2">Gesendet:</FONT></B><FONT SIZE="2"> Samstag, 17. April 2010 14:58</FONT><BR>
    <B><FONT SIZE="2">An:</FONT></B><FONT SIZE="2"> Konrad Hoppe</FONT><BR>
    <B><FONT SIZE="2">Cc:</FONT></B><FONT SIZE="2"> r-sig-finance@stat.math.ethz.ch</FONT><BR>
    <B><FONT SIZE="2">Betreff:</FONT></B><FONT SIZE="2"> Re: AW: [R-SIG-Finance] GARCH - Models</FONT><BR>
    <BR>
    <BR>
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
     <BR>
    <BR>
    Yes, it should be r_t = v_t * r_t-1<BR>
    <BR>
    You're right about the residuals; however, that's only in the case of normalised residuals. The cool thing about the GARCH model is that you can apply different kinds of residual schemes; for instance, there is literature out there concerning GARCH models with t-distributed or even EVT-distributed residuals. As you move farther away from Gaussian assumptions the fitting becomes more difficult, but more robust as well.<BR>
    <BR>
    On Sat, 2010-04-17 at 14:36 +0200, Konrad Hoppe wrote:<BR>
    <BR>
    <BR>
    <BR>
    <FONT SIZE="2">Hi Sarbo,</FONT><BR>
    <BR>
    <FONT SIZE="2">thank you for your help, I was looking for this formal representation you gave in your first formula, because I was just unable to conjunct the series of conditional variance with the outcome of the process and I couldn't found one.</FONT><BR>
    <BR>
    <FONT SIZE="2">But I think you got a small typing error there, you wrote r_t=v_t*r_t</FONT><BR>
    <BR>
    <FONT SIZE="2">I guess the the r_t is the sequence of returns and v_t is the conditional standard error, but I don't get the r_t on the righthandside of the equation. Is that right specified there?</FONT><BR>
    <BR>
    <FONT SIZE="2">And in addition I thought that the residual series of a garch model is the process divided by the estimated conditional variance function. And hence I assume a zero mean series, the residuals are standardized after that. Am I right?</FONT><BR>
    <BR>
    <FONT SIZE="2">Thanks for your help,</FONT> <BR>
    <FONT SIZE="2">Konrad</FONT><BR>
    <BR>
    <FONT SIZE="2">-----Ursprüngliche Nachricht-----</FONT> <BR>
    <FONT SIZE="2">Von: r-sig-finance-bounces@stat.math.ethz.ch [<A HREF="mailto:r-sig-finance-bounces@stat.math.ethz.ch">mailto:r-sig-finance-bounces@stat.math.ethz.ch</A>] Im Auftrag von Sarbo</FONT> <BR>
    <FONT SIZE="2">Gesendet: Samstag, 17. April 2010 13:07</FONT> <BR>
    <FONT SIZE="2">An: r-sig-finance@stat.math.ethz.ch</FONT> <BR>
    <FONT SIZE="2">Betreff: Re: [R-SIG-Finance] GARCH - Models</FONT><BR>
    <BR>
    <FONT SIZE="2">Hi Konrad- I think you're using the GARCH model for the wrong purpose</FONT> <BR>
    <FONT SIZE="2">here. It's important to remember that the GARCH model is primarily</FONT> <BR>
    <FONT SIZE="2">designed to model returns and volatility. The best way to use a GARCH</FONT> <BR>
    <FONT SIZE="2">model is to take a price series, calculate a return series from that ,</FONT> <BR>
    <FONT SIZE="2">and then generate the GARCH parameters using an R package like "fGARCH",</FONT> <BR>
    <FONT SIZE="2">"tseries", or "mgarch".</FONT><BR>
    <BR>
    <FONT SIZE="2">Remember above all that a GARCH model is a mean-reverting model, and</FONT> <BR>
    <FONT SIZE="2">that all you need to simulate (or predict) the future returns from a</FONT> <BR>
    <FONT SIZE="2">GARCH model are the fitted model parameters. Since a GARCH model follows</FONT> <BR>
    <FONT SIZE="2">the form:</FONT><BR>
    <BR>
    <FONT SIZE="2">r_t = v_t * r_t</FONT> <BR>
    <FONT SIZE="2">v_t ^2 = l + a * r_t-1 ^2 + b * v_t-1 ^2 + e_t</FONT><BR>
    <BR>
    <FONT SIZE="2">it should become clear pretty quickly that once you have the three</FONT> <BR>
    <FONT SIZE="2">parameters l, a, and b, you can set up the simulations in a spreadsheet</FONT> <BR>
    <FONT SIZE="2">if necessary.</FONT><BR>
    <BR>
    <FONT SIZE="2">As for literature- I would always go with Hull's book, "Options,</FONT> <BR>
    <FONT SIZE="2">Futures, & Other Derivatives", 6th edition or later, Ch.18. There's a</FONT> <BR>
    <FONT SIZE="2">very nice explanation of the basics of the GARCH model in there. There's</FONT> <BR>
    <FONT SIZE="2">also Shumway & Stoffer's "Time Series Analysis & Its Applications: With</FONT> <BR>
    <FONT SIZE="2">R Examples", which is rather more relevant to what you're trying to do.</FONT><BR>
    <BR>
    <FONT SIZE="2">On Fri, 2010-04-16 at 23:02 +0200, Konrad Hoppe wrote:</FONT><BR>
    <BR>
    <FONT SIZE="2">> Hi list,</FONT> <BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">>  </FONT><BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">> Im still struggling with garch models. My first approach was doing a</FONT> <BR>
    <FONT SIZE="2">> fourier analysis on the series and then try to explain the residuals with an</FONT> <BR>
    <FONT SIZE="2">> ARIMA/GARCH model, but it turns out that this approach doesnt work well</FONT> <BR>
    <FONT SIZE="2">> since the garch model doesnt add many information to the arima model.</FONT> <BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">> Ive found that the differenced series of the DAX, corrected for mean and</FONT> <BR>
    <FONT SIZE="2">> slope has nearly the same residuals as the residuals from the fourier</FONT> <BR>
    <FONT SIZE="2">> residuals, hence Ive littered the fourier approach but now Ive got a</FONT> <BR>
    <FONT SIZE="2">> question concerning pure garch models. </FONT><BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">>  </FONT><BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">> How can I use them to predict the series? I hope you have some pointers to</FONT> <BR>
    <FONT SIZE="2">> literature, or examples for that. To make my actual approach clear, please</FONT> <BR>
    <FONT SIZE="2">> check the following code snippet:</FONT> <BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">>  </FONT><BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">> library(quantmod)</FONT> <BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">> from.dat <- as.Date("01/01/91", format="%m/%d/%y")</FONT> <BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">> to.dat <- as.Date(Sys.Date(), format="%m/%d/%y")</FONT> <BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">> getSymbols("^GDAXI", src="yahoo", from = from.dat, to = to.dat)</FONT> <BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">>  </FONT><BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">> daxTs <- ts(Ad(GDAXI))</FONT> <BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">> time <- c(1:length(daxTs))</FONT> <BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">> tsData <- daxTs - lm(daxTs ~ time)$fitted.values</FONT> <BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">> diffData <- diff(tsData)</FONT> <BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">>  </FONT><BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">> garch.resids <- garch(diffData, order=c(1,1), trace=F)$residuals</FONT> <BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">> garch.resids[which(is.na(garch.resids))] <- 0</FONT> <BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">> plot.ts(garch.resids)</FONT> <BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">>  </FONT><BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">> as you can see in the plot, there is only white noise in the standardized</FONT> <BR>
    <FONT SIZE="2">> residual series, but actually Ive no idea how this information could help</FONT> <BR>
    <FONT SIZE="2">> me to predict the series. So it seems to me that the model works quite well,</FONT> <BR>
    <FONT SIZE="2">> but Ive no clue how this information could help me with the prediction.</FONT> <BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">>  </FONT><BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">> all the best</FONT> <BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">> Konrad</FONT> <BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">>       [[alternative HTML version deleted]]</FONT> <BR>
    <FONT SIZE="2">> </FONT><BR>
    <FONT SIZE="2">> _______________________________________________</FONT> <BR>
    <FONT SIZE="2">> R-SIG-Finance@stat.math.ethz.ch mailing list</FONT> <BR>
    <FONT SIZE="2">> <A HREF="https://stat.ethz.ch/mailman/listinfo/r-sig-finance">https://stat.ethz.ch/mailman/listinfo/r-sig-finance</A></FONT> <BR>
    <FONT SIZE="2">> -- Subscriber-posting only. If you want to post, subscribe first.</FONT> <BR>
    <FONT SIZE="2">> -- Also note that this is not the r-help list where general R questions should go.</FONT><BR>
    <BR>
    <BR>
    <BR>
            <FONT SIZE="2">[[alternative HTML version deleted]]</FONT><BR>
    <BR>
    <FONT SIZE="2">_______________________________________________</FONT> <BR>
    <FONT SIZE="2">R-SIG-Finance@stat.math.ethz.ch mailing list</FONT> <BR>
    <FONT SIZE="2"><A HREF="https://stat.ethz.ch/mailman/listinfo/r-sig-finance">https://stat.ethz.ch/mailman/listinfo/r-sig-finance</A></FONT> <BR>
    <FONT SIZE="2">-- Subscriber-posting only. If you want to post, subscribe first.</FONT> <BR>
    <FONT SIZE="2">-- Also note that this is not the r-help list where general R questions should go.</FONT><BR>
    <BR>
     <BR>
    <BR>
    <BR>
</BLOCKQUOTE>
<BR>
</BODY>
</HTML>