Dear all:

I want to modify the 'StructTS' function from the 'stats' package. First, I am 
writing a working copy of the original version and got some problems.

I have two versions of the function plus the original one. The first version is 
the same code as the 'StructTS' function:

StructTS.v1 <- function (x, type = c("level", "trend", "BSM"), init = NULL, 
    fixed = NULL, optim.control = NULL) 
{
    KalmanLike2 <- function(y, mod, nit = 0) {
        x <- .Call(R_KalmanLike, y, mod$Z, mod$a, mod$P, mod$T, 
            mod$V, mod$h, mod$Pn, as.integer(nit), FALSE, fast = TRUE)
        0.5 * sum(x)/length(y)
    }
#...
#... above and remaining code is the same as the original code in StructTS
#...
}

Running this version gives the following error:

R> StructTS.v1(log(AirPassengers), type = "BSM")
Error in KalmanLike2(y, Z, -1) : object 'R_KalmanLike' not found

In the second version I modify the internal function 'KalmanLike2'
using the function 'KalmanLike' instead of calling 'R_KalmanLike'.

StructTS.v2 <- function (x, type = c("level", "trend", "BSM"), init = NULL, 
    fixed = NULL, optim.control = NULL) 
{
    KalmanLike2 <- function(y, mod, nit = 0) {
      KalmanLike(y = y, mod = mod, nit = as.integer(nit), fast = TRUE)$Lik 
    }
    makeLevel <- function(x) {
        T <- matrix(1, 1L, 1L)
#...
#... remaining code is the same as the original code in StructTS
#...
}

With this version the previous error is avoided but it yields results different 
from the original version. The fitted components are similar but the parameter 
estimates are different, so something is wrong with the second version.

R> v0 <- StructTS(log(AirPassengers), type = "BSM")
R> v2 <- StructTS.v2(log(AirPassengers), type = "BSM")
R> identical(v0$coef, v2$coef)
[1] FALSE

As I want to try some changes in the original function, I need a working copy 
of it. That is, I don't want just renaming the function like this:

R> StructTS.v1 <- StructTS  # this is not the idea

How can I call to 'R_KalmanLike', should I load something via dyn.load()?

Thanks

javi





______________________________________________
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