[Rd] DUP=T/F

Paul Gilbert pgilbert@bank-banque-canada.ca
Mon, 19 Mar 2001 10:45:52 -0500


In some tests I am getting a difference in the 7th or 8th significant digit depending
on whether I set DUP=T or DUP=F in the .Fortran call below. While this is not a huge
error it is bigger than I would expect and may be a symptom of another problem. Any
comments or suggestions? (R1.2.2 on Solaris.)

Paul Gilbert
_______

genD.ARMA <- function(model, data, d=0.01, eps=1e-4, r=6, warn=F){
   n <-length(c(output.data(data))) # this has the same length as the residual
   sampleT <-periods(data)
   ps <-dim(model$A)[3]
      ms <-dim(model$C)[3]
      ns <-ps  # this could be 1 except z0 is used for TREND and F, Q and R for
scratch
     loc   <- match(model$location,       c("A","B","C","t"))
     cloc  <- match(model$const.location, c("A","B","C","t"))
   if(is.null(ms))
     {ms<-0
      C<-array(0,c(1,ns,1)) # can't call compiled with 0 length arrays
      u <- matrix(0,sampleT,1)
      G <- matrix(0,ns,1)
     }
   else
     {C <-model$C
      u <- input.data(data)
      G <- matrix(0,ns,ms)
     }
   x <-model$parms
   h0 <- abs(d*x)+eps*(x==0.0)
   D <- matrix(1e20, n,(length(x)*(length(x) + 3))/2)
   Daprox <-  matrix(0,n,r)
   Hdiag  <-  matrix(0,n,length(x))
   Haprox <-  matrix(0,n,r)
   storage.mode(D)     <-"double"
   storage.mode(Daprox)<-"double"
   storage.mode(Haprox)<-"double"
   storage.mode(Hdiag )<-"double"
   D <-.Fortran("gend",
            D=D,
            as.integer(is.ARMA(model)),
            p=as.integer(length(x)),
            x=as.double(x),
            as.double(h0),
            as.integer(n),    #6
            as.integer((length(x)*(length(x)+ 3))/2), #cols of D
            f0=double(n),
            r=as.integer(r),
            #                       work space for GEND
            Haprox=Haprox,     #10
            Hdiag=Hdiag,
            Daprox=Daprox,
            x=double(length(x)),
            delta=double(length(x)),
            f1=double(n),
            f2=double(n),
            #                   work space for ARMAp / KFp
         #     cov=matrix(1e20,ps,ps),
            # pred is f0,f1,f2 passed above
            as.integer(ms),     #  input dimension m  #17
            as.integer(ps),     # output dimension p
            as.integer(sampleT),
            as.integer(periods(data)),
            u=as.double(u),
            y=as.double(output.data(data)),
            as.integer(loc),   #as.character(model$location), #23
            as.integer(model$i),
            as.integer(model$j),
            as.integer(length(model$const)),
            const=as.double(model$const),
            as.integer(cloc),  #as.character(model$const.location),
            as.integer(model$const.i ),
            as.integer(model$const.j),
        #  for ARMA models:
            as.integer(model$l),       #31
            as.integer(model$const.l),
            as.integer( dim(model$A)[1]),#1+order of A
            as.integer( dim(model$B)[1]),#1+order of B
            as.integer( dim(C)[1]),#1+order of C
            A=model$A,
            B=model$B,
            C=C,
        #  for state space models:
            as.integer(ns),  # state dim.  #39
        #    state=as.double(matrix(0,sampleT,ns)),
        #    track=as.double(array(0,c(sampleT,ns,ns))),
            z0=as.double(rep(0,ps)), # note: this is TREND for ARMA
            P0=as.double(diag(0,ps)),
            F=as.double(matrix(0,ns,ns)),
            G=as.double(G),
            H=as.double(matrix(0,ps,ns)),
            K=as.double(matrix(0,ns,ps)),
            Q=as.double(matrix(0,ns,ns)),
            R=as.double(matrix(0,ps,ps)),
            gain=as.integer(F),   #48
            DUP=T)[c("D","p","f0", "x", "r")]
   D$d   <- d
   D$eps <- eps
   D$f0 <- l(model, data, result="pred") - c(output.data(data))
   invisible(classed(D,"Darray")) #constructor
}


-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._