Hello,

I would be very grateful if somebody more knowledgeable then me could assist
me in the following.

I have two (three actually but for simplicity I will say two) models which I
would like to fit jointly as a state space object. Here are the equations:

(1)
w = a1 + b1*(p) + e1
a1 = a1[t-1] + g1
g1 = g1[t-1] + e2
b1 = b1[t-1] + e3
(2)
d = a2 + b2*(w) + e3
a2 = a2[t-1] + e4
b2 = b2[t-1] + e5

Thus far, I have fitted each of the models individually, and the results
have been good. Therefore, I have tried to extend my state space model to
jointly fit both models using the dlmSum function. However, when I try to
estimate the unknown parameters, via maximum likliehood, I get an error
message stating that the sum of dlm's can only be used in constant models.

Is this true? I have looked a the Petris et al. book, and the dlm vignette
and other related articles and I am struggling to find an answer. Please
find my code below, perhaps there is a mistake which can easily be
rectified.

Kind regards,

Alan

> library(dlm)


> mydata <- read.csv("Data.csv", header=TRUE)> pc <- mydata[,c(2,3,5,22)]> > 
> pc[,1] <- log(pc[,1]/pc[,3]) ; pc[,2] <- log(pc[,2]/pc[,3])> pc[,3] <- 
> log(pc[,3]) ; pc[,4] <- log(100*pc[,4])> lagr <- 
> function(x){return(c(NA,x[1:(length(x)-1)]))}> pc[,5] <- lagr(pc[,4])> 
> names(pc) <- c("b","d","p","w","w1")> pc <- ts(pc, start=1650, frequency=1)> 
> dr <- lm(pc[,4]~pc[,3])> pos <- lm(pc[,2]~pc[,4])> > # set up SS models> ssm1 
> <- function(parm){+   rwdw <- dlmModPoly(order=2, +                      dV = 
> exp(parm[1]), +                      dW = exp(parm[2:3]),+                    
>   m0 = c(coef(dr)[1],0), +                      C0 = diag(2)*10)+   slpw <- 
> dlmModReg(X=pc[,3], +                     addInt = FALSE, +                   
>   dV = exp(parm[4]), +                     dW = exp(parm[5]), +               
>       m0 = c(coef(dr)[2]), +                     C0 = diag(1)*10)             
>       +   w <- rwdw + slpw+   +   rwdd <- dlmModPoly(order=1, +               
>        dV = exp(parm[6!
 ]), +                      dW = exp(parm[7]),+                      m0 = 
c(coef(pos)[1]), +                      C0 = diag(1)*10)+   slpd <- 
dlmModReg(X=pc[,3], +                     addInt = FALSE, +                     
dV = exp(parm[8]), +                     dW = exp(parm[9]), +                   
  m0 = c(coef(pos)[2]), +                     C0 = diag(1)*10)                  
 +   d <- rwdd + slpd+   +   return(dlmSum(w, d))+   }> > > # estimate 
parameters> fit1 <- 
dlmMLE(y=cbind(pc[,4],pc[,2]),parm=c(rep(-2,9)),build=ssm1,hessian=T)Error in 
dlmSum(w, d) :
  Sum of dlm's is only implemented for constant models>








-- 
Alan Fernihough
IRCHSS Scholar
UCD School of Economics

        [[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