On 9 February 2011 16:21, Philipp Grueber <philipp.grueber at ebs.edu>
wrote:> I am still relatively new to R & currently working with a large set of
> (intraday) financial data (about 3.3m observ.). I wish to estimate a vector
> error correction model similar to the following:
>
> ? ? ? ? ?r = a_0 + a1*r_(t-1) + a2*r_(t-2) + a3*s_(t-1) + a4*s_(t-2) +
> a5*c_(t-1) + e
> ? ? ? ? ?s = a_0 + a1*s_(t-1) + a2*s_(t-2) + a3*r_(t-1) + a4*r_(t-2) +
> a5*c_(t-1) + e
> (where c=s-r)
>
> Estimating both equations of the VECM individually using OLS, I discovered
> ARCH effects in my errors. Thus, I wish to include a GARCH term. I tried to
> work with the fGarch package which, as far as I could see, is pretty
> inflexible in terms of model specification and, in particular, unable to
> consider exogenous variables ?(i.e. my error correction term or, at a later
> stage, a transition function etc.). I have read about the rgarch package
but
> have not found a way to specify the model I need.
>
> Thus, a colleague and I tried to write our own code using maxLik() -- but
we
> ran into some problems.
>
> PROBLEM:
> The code below does not work, with the error being: ?Return code 100:
> Initial value out of range.? We have tried various (more or less realistic)
> starting values and manipulated the loglik-function but the error has
> persisted. In addition, in our attempts we used a for-loop to estimate
sig2.
> However, for my dataset, I prefer a solution without such loops because I
> assume they would take a lot of time.
>
> QUESTION:
> Does anybody know how to fix the code? Any hints what the problem might be?
> Maybe someone has already found an alternative way to estimate such a GARCH
> model using R?
>
> The following data has exactly the same format as the data I am working
> with:
>
> ?library(maxLik)
> ?library(fGarch)
> ?lag<-function(x,k){
> ?c(rep(NA,k),x[1:(length(x)-k)])
> ?}
> ?r<- as.vector(garchSim(garchSpec(rseed = 1985), n = 102)[,1]) [3:102]
> ?r_1<- lag(r,1)[3:102]
> ?r_2<-lag(r,2) [3:102]
> ?s<-rnorm(102)[3:102]
> ?s_1<- lag(s,1)[3:102]
> ?s_2<-lag(s,2) [3:102]
> ?c_1<-lag(s-r,1) [3:102]
> ?data<-as.matrix(cbind(r,r_1,r_2,s_1,s_2,c_1))
>
> As in my original dataset, I lag every parameter individually -- even
though
> I know that in many situations, there is an easier way to lag the data. In
> my original dataset, this is the result of lagging the time series on a
> per-day basis. In other words: My dataset comprises multiple days of data
> but I do not want to link the first observation of each day with the last
> observation of the previous day. Therefore, it would be helpful if any
> possible solution would refer to the above data format.
>
> ?loglik <- function(param) {
> ?res <- param[1]
> ?a0 <- param[2]
> ?a1 <- param[3]
> ?a2 <- param[4]
> ?a3 <- param[5]
> ?a4 <- param[6]
> ?a5 <- param[7]
> ?omega <- param[8]
> ?alpha <- param[9]
> ?beta <- param[10]
> ?res <- r?a0?a1*r_1?a2*r_2?a3*s_1?a4*s_2-a5*c_1
> ?sig2 <- numeric(100)
> ?ll <- numeric(100)
> ?sig2[1] <- 0
> ?for (i in 2:100) {
> ?sig2[i] <- omega + alpha*res[i-1]^2 + beta*sig2[i-1]
> ?ll[i] <- -1/2*log(2*pi*sig2[i]) - 1/2*res[i]^2/sig2[i]
> ?}
> ?ll
> ?}
> ?est <- maxLik(loglik, start=c(.5,.5,.5,.5,.5,.5,.5,.5,.5,.5))
> ?summary(est)
It is because, your loglik() function returns NAs with the initial values:
> loglik(c(.5,.5,.5,.5,.5,.5,.5,.5,.5,.5))
[1] 0.000000 -1.281288 -1.129472 -1.897470 -2.009189 -1.603896 -1.422840
[8] -1.295774 -1.372789 -1.386749 -1.180154 -2.296334 -1.497573 -1.304747
[15] -1.728566 -2.013113 -1.550148 -1.331233 -1.619898 -1.474260 -1.257694
[22] -2.639963 -1.551604 -1.729651 -1.439579 -2.336881 -2.140721 -1.789380
[29] -1.589067 -1.366046 -1.237783 -1.122181 -1.047587 -1.426377 -1.202710
[36] -1.300351 -1.298771 -1.217437 -1.096333 -3.968950 -1.889532 -1.914252
[43] -1.647921 -1.792587 -2.206678 -1.812484 -1.637345 -1.847598 -1.793146
[50] -1.492001 -1.289086 -1.210335 -1.824306 -1.580044 -1.350120 -3.977663
[57] -2.213723 -2.022477 -1.704629 -1.599071 -1.789774 -1.421933 -2.004710
[64] -1.645671 -1.544476 -1.371070 -2.947443 -1.845836 -1.840481 -1.664951
[71] -1.564801 -1.327754 -1.463221 -1.230692 -1.099063 -2.188419 -1.395483
[78] -3.801520 -1.934664 -1.641021 -1.508269 -1.670946 -1.762663 -1.496547
[85] -1.836904 -1.855429 -1.850838 -1.883408 -1.808358 -1.487548 -1.893714
[92] -1.794318 -1.552698 -1.367103 -1.223706 -1.152354 -1.145350 -2.550406
[99] NA NA
Best wishes from Copenhagen,
Arne
--
Arne Henningsen
http://www.arne-henningsen.name