Hi Uwe,

I downloaded R 2.11.0 and the latest version of nlme. I am still getting the
problem. I should also note that I got a message from Viechtbauer Wolfgang
saying that he had experienced a similar problem using nlme.

I have pasted the code below. (The data is generated in the first ~15
lines). I have bunch of debug() statements, which may or may not be useful.
The code is not as elegant as it could be since I have been constantly
editing it to try to track down the bug (I replaced the corMatrix C routine
with R code). FYI, the objective of the code is to simultaneously fit
temporal and spatial correlation (adding one corExp matrix plus another)
where the nuggets are constrained to add to 1.

I really hope you have a chance to look at this. Thanks so much!!

## BEGIN

N <- 100
x <- round(sin(rep(1:23/2,length.out=N)),digits=2)+1:N*2/N
y <- round(cos(rep(1:23/2,length.out=N)),digits=2)+1:N*2/N
g <- rep(1:5,each=N/5)
a <- round(runif(N,0,10))
t <- 1:N
r <- runif(N,0,5)
e <- 5*sin(4*x) +
     5*cos(4*y) +
     5*sin(t) +
     2*g +
     a +
     r
e <- round(e)

df <- data.frame(x,y,g,a,t,r,e)
df <- df[-c(22,23,67),]

library(nlme)

corSPT <- function(a,b) {
  object <- list("time"=a,"space"=b)
  class(object)  <-  c("corSPT","corSpatial","corStruct")
  attr(object, "formula") <- formula(object)
  attr(object, "nugget") <- attr(object[["time"]], "nugget")
  attr(object, "metric") <- attr(object[["time"]], "metric")
  attr(object, "fixed") <- attr(object[["time"]], "fixed")
  return(object)
}

coef.corSPT <- function(object,...) {

c("time"=coef(object[["time"]],...),"space"=coef(object[["space"]],...)[1])
}

"coef<-.corSPT" <- function (object, ..., value) {
    value <- as.numeric(value)
    if (length(value) != 3) {
        stop("Cannot change the length of the parameter of a corSPT object")
    }
    object[["time"]][] <- value[1:2]
    object[["space"]][] <- c(value[3],-value[2]) # nugget for space is
determined by the nugget for time
    attr(object, "factor") <- NULL
    attr(object, "factor") <- corFactor(object)
    attr(object, "logDet") <- NULL
    attr(object, "logDet") <- logDet(object)
    object
}

Initialize.corSPT <- function (object, data, ...) {
    if (!is.null(attr(object[["time"]], "minD"))) {
        return(object)
    }
    object[["time"]] <-
getS3method("Initialize","corStruct")(object[["time"]], data)
    object[["space"]] <-
getS3method("Initialize","corStruct")(object[["space"]], data)
    object[["time"]][1] <- log(object[["time"]][1])
    object[["space"]][1] <- log(object[["space"]][1])
    object[["time"]][2] <- log(object[["time"]][2]/(1 -
object[["time"]][2]))
    object[["space"]][2] <- -object[["time"]][2]
    attr(object,"groups") <- attr(object[["time"]],"groups")
    attr(object,"Dim") <- attr(object[["time"]],"Dim")
    attr(object,"covariate") <- NULL
    attr(object, "nugget") <- attr(object[["time"]], "nugget")
    attr(object[["time"]],"minD") <- min(unlist(attr(object[["time"]],
"covariate")))
    attr(object[["space"]],"minD") <- min(unlist(attr(object[["space"]],
"covariate")))
    attr(object, "minD") <- NULL
    ###
    corD <- Dim(object[["time"]])
    attr(object[["time"]],"covariate") <- lapply(seq(corD$M),function(M) {
      x <- attr(object[["time"]],"covariate")[[M]]
      l <- corD$len[M]
      g <- rep(seq(l),(l-1):0)
      mat <- do.call(rbind,lapply(seq(l),function(G) {c(rep(0,G),x[g==G])}))
      mat <- mat + t(mat)
    })
    attr(object[["space"]],"covariate") <- lapply(seq(corD$M),function(M) {
      x <- attr(object[["space"]],"covariate")[[M]]
      l <- corD$len[M]
      g <- rep(seq(l),(l-1):0)
      mat <- do.call(rbind,lapply(seq(l),function(G) {c(rep(0,G),x[g==G])}))
      mat <- mat + t(mat)
    })
    ###
    attr(object, "factor") <- corFactor(object)
    attr(object, "logDet") <- -attr(attr(object, "factor"), "logDet")
    object
}

corMatrix.corSPT <- function(object,covariate = NULL,corr=TRUE, ...) {
  if (corr) {
    temp <- coef(object[["time"]],unconstrained=FALSE)
    cat(temp)
    time.rng <- temp[1]
    time.nug <- temp[2]
    temp <- coef(object[["space"]],unconstrained=FALSE)
    space.rng <- temp[1]
    space.nug <- temp[2]
    cor.time <- lapply(attr(object[["time"]],"covariate"),function(mat)
(1-time.nug)*exp(-mat/time.rng))
    cor.space <- lapply(attr(object[["space"]],"covariate"),function(mat)
(1-space.nug)*exp(-mat/space.rng))
    x <- lapply(seq(length(cor.time)),function(mat)
round(cor.time[[mat]]+cor.space[[mat]],4))
    attr(x, "logDet") <- NULL
  } else {
    d <- Dim(object)
    gg <- rep(seq(d$M),each=d$len^2)
    cf <- corFactor(object)
    lD <- attr(cf, "logDet")
    x <- lapply(seq(d$M),function(mm) {mat <- cf[gg==mm];
matrix(mat,nrow=d$len[mm])})
    attr(x,"logDet") <- lD
  }
  return(x)
}

corFactor.corSPT <- getS3method("corFactor","corStruct")
logDet.corSPT <- getS3method("logDet","corStruct")
recalc.corSPT <- getS3method("recalc","corStruct")

formula.corSPT <- function(object,...) {
  a <- as.character(formula(object[["time"]]))
  b <- as.character(formula(object[["space"]]))
  a <- strsplit(a[2],split="|",fixed=TRUE)[[1]]
  b <- strsplit(b[2],split="|",fixed=TRUE)[[1]]
  as.formula(paste("~",a[1],"+",b[1],"|",a[2]))
}

Dim.corSPT <- function(object,...) {
  Dim(object[["time"]],...)
}

debug(corSPT)
debug(getS3method("recalc","corSpatial"))
debug(getS3method("recalc","corStruct"))
debug(getS3method("Initialize","corSPT"))
debug(getS3method("coef<-","corSPT"))
debug(getS3method("coef","corSPT"))
debug(getS3method("corFactor","corSPT"))
debug(getS3method("logDet","corStruct"))
debug(getS3method("logLik","lmeStruct"))
debug(getS3method("recalc","modelStruct"))
debug(getS3method("recalc","corStruct"))
debug(getS3method("corMatrix","corSPT"))
debug(getS3method("coef<-","reStruct"))
debug(getS3method("coef<-","modelStruct"))
debug(getS3method("corMatrix","corSpatial"))
debug(getS3method("Initialize","corSpatial"))
debug(getS3method("Initialize","corStruct"))

mymodel <- lme(fixed = e ~ a,random= ~ 1 |
g,data=df,correlation=corSPT(corExp(c(1,.5),form = ~ t |
g,nugget=TRUE),corExp(c(1,.5),form= ~ x + y | g,
nugget=TRUE)),control=list(msVerbose=TRUE,opt="nlminb"))

## End


2010/4/21 Uwe Ligges <lig...@statistik.tu-dortmund.de>

>
>
> On 21.04.2010 18:19, Michael Steven Rooney wrote:
>
>> The R version is 2.9.2.
>>
>
> Please try with R-2.11.0 RC (release candidate) to be released tomorrow as
> well as a recent version of nlme.
>
> If its still fails, please send code (and data, if you do not generate them
> in the code) that reproduces the problem.
>
> Uwe Ligges
>
>
>
>
>
>  nlme version is 3.1-93
>> The OS is Windows XP.
>> This is for my work computer but I get the same behavior at home using
>> Vista.
>> ---------- Forwarded message ----------
>> From: Sarah Goslee<sarah.gos...@gmail.com>
>> Date: Wed, Apr 21, 2010 at 11:50 AM
>> Subject: Re: [R] R crashing oddly
>> To: Michael Steven Rooney<michael.s.roo...@gmail.com>
>>
>>
>> You definitely need to provide the information requested in the posting
>> guide,
>> specifically OS, R version, package version (and update to the newest if
>> you
>> haven't yet).
>>
>> Sarah
>>
>> On Wed, Apr 21, 2010 at 11:41 AM, Michael Steven Rooney
>> <michael.s.roo...@gmail.com>  wrote:
>>
>>> Hi,
>>>
>>> I am working with the package nlme, and I tried creating a new
>>> correlation
>>> class (which, according to the help pages, is possible if you write a few
>>> new method functions). Anyways, I think I am 99% of the way there, but I
>>> have a recurring problem with R crashing on seemingly innocuous
>>> statements
>>> (I have set debug() on nearly every function, so I can see where it is
>>> failing).
>>>
>>>  --
>> Sarah Goslee
>> http://www.functionaldiversity.org
>>
>>        [[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.
>>
>

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