Thanks! However, I added the line of code and receive an error during the
optim() procedure:

rror in fn(par, ...) : could not find function "kf"


The update code is here:


tmp <- ts(read.table("http://shazam.econ.ubc.ca/intro/P.txt";,
header=T), start=c(1978,1), frequency=12) * 100
y <- tmp[,1:4] - tmp[,"RKFREE"]
colnames(y) <- colnames(tmp)[1:4]
market <- tmp[,"MARKET"] - tmp[,"RKFREE"]
rm("tmp")
m <- NCOL(y)
k <- m * (m+1) / 2

# 'k' is the number of independent parameters in an m-by-m covariance
# matrix, and two such matrices are estimated (Ht and Qt, both time
# invariant). Hence the unknown parameter theta has length 2k.

Zt <- sapply(seq_along(market), function(i) market[i] %x% diag(m))
dim(Zt) <- c(m, m, length(market))
Rt <- diag(nr = m)
logLik <- function(theta) {
   a <- diag(exp(0.5 * theta[1:m]), nr = m)
   a[upper.tri(a)] <- theta[(m + 1):k]
   Ht <- crossprod(a)
   a <- diag(exp(0.5 * theta[1:m + k]), nr = m)
   a[upper.tri(a)] <- theta[-(1:(k + m))]
   Qt <- crossprod(a)
   lik <- kf(yt = t(y), Zt = Zt, Tt = diag(nr = m), Rt = Rt, Ht = Ht,
   Qt = Qt, a1 = rep(0, m), P1 = matrix(0, m, m),
   P1inf = diag(rep(1, m)), optcal = c(FALSE, FALSE, FALSE, FALSE))
   return(-lik$lik)
  }

fit <- optim(par = rep(0, 2 * k), fn = logLik, method = "BFGS",
control = list(maxit = 500))
fit$conv

# With the MLEs of the unknown parameters one can compute the
smoothing estimates of the
# betas (Figure 11), as the following code illustrates

theta <- fit$par
a <- diag(exp(0.5 * theta[1:m]), nr = m)
a[upper.tri(a)] <- theta[(m+1):k]
Ht <- crossprod(a)
a <- diag(exp(0.5 * theta[1:m + k]), nr = m)
a[upper.tri(a)] <- theta[-(1:(k + m))]
Qt <- crossprod(a)
smoothCAPM <- ks(kf(yt = t(y), Zt = Zt, Tt = diag(nr = m), Rt = Rt,
Ht = Ht, Qt = Qt, a1 = rep(0, m), P1 = matrix(0, m, m),
P1inf = diag(rep(1, m))))
betas <- ts(t(smoothCAPM$ahat), start = start(market),
freq = frequency(market))




On Fri, Aug 26, 2011 at 9:41 AM, Giovanni Petris [via R] <
ml-node+3770873-1409921251-254...@n4.nabble.com> wrote:

>
> Oops..
> You need to add the following line, right after the "m <- NCOL(y)"
> statement:
>
> k <- m * (m+1) / 2
>
> 'k' is the number of independent parameters in an m-by-m covariance
> matrix, and two such matrices are estimated (Ht and Qt, both time
> invariant). Hence the unknown parameter theta has length 2k.
>
> Hope this clarifies the issue.
>
> Best,
> Giovanni Petris
>
> On Thu, 2011-08-25 at 19:30 -0700, quantguy wrote:
>
> > I get the identical error even when applying the sample code from the dlm
>
> > vignette on state space models: http://www.jstatsoft.org/v41/i04/paper
> >
> > The sample code is here:
> >
> > tmp <- ts(read.table("http://shazam.econ.ubc.ca/intro/P.txt";, header=T),
>
> > start=c(1978,1), frequency=12) * 100
> > y <- tmp[,1:4] - tmp[,"RKFREE"]
> > colnames(y) <- colnames(tmp)[1:4]
> > market <- tmp[,"MARKET"] - tmp[,"RKFREE"]
> > rm("tmp")
> > m <- NCOL(y)
> >
> >
> > Zt <- sapply(seq_along(market), function(i) market[i] %x% diag(m))
> > dim(Zt) <- c(m, m, length(market))
> > Rt <- diag(nr = m)
> > logLik <- function(theta) {
> >    a <- diag(exp(0.5 * theta[1:m]), nr = m)
> >    a[upper.tri(a)] <- theta[(m + 1):k]
> >    Ht <- crossprod(a)
> >    a <- diag(exp(0.5 * theta[1:m + k]), nr = m)
> >    a[upper.tri(a)] <- theta[-(1:(k + m))]
> >    Qt <- crossprod(a)
> >    lik <- kf(yt = t(y), Zt = Zt, Tt = diag(nr = m), Rt = Rt, Ht = Ht,
> >    Qt = Qt, a1 = rep(0, m), P1 = matrix(0, m, m),
> >    P1inf = diag(rep(1, m)), optcal = c(FALSE, FALSE, FALSE, FALSE))
> >    return(-lik$lik)
> >   }
> >
> > fit <- optim(par = rep(0, 2 * k), fn = logLik, method = "BFGS", control =
>
> > list(maxit = 500))
> > fit$conv
> >
> > The parameter K is not defined. If I select an arbitrary value of K
> (looks
> > like it is just a parameter to initialize optimization) I get a separate
> > error.
> >
> >
> >
> > --
> > View this message in context:
> http://r.789695.n4.nabble.com/Setting-up-a-State-Space-Model-in-dlm-tp3580664p3769863.html
> > Sent from the R help mailing list archive at Nabble.com.
> >
> > ______________________________________________
> > [hidden email] 
> > <http://user/SendEmail.jtp?type=node&node=3770873&i=0>mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
>
> ______________________________________________
> [hidden email] <http://user/SendEmail.jtp?type=node&node=3770873&i=1>mailing 
> list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
>
> ------------------------------
>  If you reply to this email, your message will be added to the discussion
> below:
>
> http://r.789695.n4.nabble.com/Setting-up-a-State-Space-Model-in-dlm-tp3580664p3770873.html
>  To unsubscribe from Setting up a State Space Model in dlm, click 
> here<http://r.789695.n4.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=3580664&code=cmFobHV3YWxpYUBnbWFpbC5jb218MzU4MDY2NHwtMjAzMjI4MTk2NQ==>.
>
>



-- 
Ram Ahluwalia


--
View this message in context: 
http://r.789695.n4.nabble.com/Setting-up-a-State-Space-Model-in-dlm-tp3580664p3770976.html
Sent from the R help mailing list archive at Nabble.com.
        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to