napps22
2011-Dec-17 14:21 UTC
[R] time-varying parameters kalman filter estimation problem using FKF package
Dear R users, I am trying to carry out MLE of the time-varying CAPM using the FKF package. My approach so far has been to try and adapt the example given in the help file found using ?fkf which demonstrates the MLE of an ARMA(2,1) model. When I attempt to run my R code (given below) I get the following error: Error in fkf(a0 = sp$a0, P0 = sp$P0, dt = sp$dt, ct = sp$ct, Tt = sp$Tt, : Some of dim(dt)[2], dim(ct)[2], dim(Tt)[3], dim(Zt)[3], dim(HHt)[3], dim(GGt)[3] or dim(yt)[2] is/are neither equal to 1 nor equal to 'n'! Here is the R code that generated this error # Fitting time-varying parameter CAPM to BP stock # let rt denote adjusted daily returns on a stock # let rmt denote daily returns on the appropriate benchmark e.g. SP500 # rt = alphat + betat * rmt + et # alphat = alphat_1 + n1t # betat = betat_1 + n2t # where et ~ N(0,H) # (n1t,n2t) ~ N(0,Q) #load required packages library(tseries) library(FKF) # load data FTSE100 <- get.hist.quote(instrument = "^FTSE", start = "2007-01-01", quote = "Close", retclass = "zoo", quiet = TRUE) BP <- get.hist.quote(instrument = "BP", start = "2007-01-01", quote "AdjClose", retclass = "zoo", quiet = TRUE) # calulate continuously compounded daily returns FTSE100.ret <- lag(log(FTSE100), k = -1) - log(FTSE100) BP.ret <- lag(log(BP), k = -1) - log(BP) # collect data data <- merge(BP.ret,FTSE100.ret, all = FALSE) index <- index(data) # create data matrix Z <- cbind(1, as.vector(data[,2])) y <- as.matrix(data[,1],nrow = 1, ncol = length(y)) # format Z into an array Zt <- array(NA,c(1,2,nrow(Z))) for(i in 1:nrow(Z)) { Zt[,,i] <- Z[i,] } # specify state-space form of the time-varying capm capm.ss <- function(alpha,beta,sigma_e,sigma_n1,sigma_n2) { Tt <- diag(1,2) Zt <- Zt ct <- matrix(0) dt <- matrix(0,nrow = 2, ncol = 1) GGt <- matrix(sigma_e^2) HHt <- diag(c(sigma_n1^2,sigma_n2^2),2) a0 <- c(0,0) P0 <- diag(10^6,2) return(list(a0 = a0, P0 = P0, ct = ct, dt = dt, Zt = Zt, Tt = Tt, GGt GGt, HHt = HHt)) } # now define the loss function loss.fn <- function(theta,yt) { sp <- capm.ss(theta["alpha"], theta["beta"], theta["sigma_e"],theta["sigma_n1"], theta["sigma_n2"]) ans <- fkf(a0 = sp$a0, P0 = sp$P0, dt = sp$dt, ct = sp$ct, Tt = sp$Tt, Zt sp$Zt, HHt = sp$HHt, GGt = sp$GGt, yt = yt) return(-ans$logLik) } start_val <- runif(5) fit <- optim(start_val, loss.fn, hessian = TRUE, yt = y) -- View this message in context: http://r.789695.n4.nabble.com/time-varying-parameters-kalman-filter-estimation-problem-using-FKF-package-tp4208364p4208364.html Sent from the R help mailing list archive at Nabble.com.