tests/extras/nlme-stall.R

## Taken from https://stat.ethz.ch/pipermail/r-devel/2018-January/075459.html

## Hung with x86_64 Linux/gcc 7.3 but not i686 Linux nor x86_64 macOS
## in early 2018.  Resolved by nlme 3.1-136.

## Optional since it used to hang, on one platform only AFAWK.
## gfortran with -fbounds-check detected a problem on one x86_64
## Fedora 26 system (but not another) and on one of winbuilder's
## subarchs.

dat <- data.frame(
    x = rep(c(3.69, 3, 2.3, 1.61, 0.92, 0.22, -0.47, -1.86), each=12),
    y = c(0.35, 0.69,  0.57, 1.48,  6.08, -0.34,  0.53, 1.66,  0.02, 4.4, 8.42, 3.3,
          2.32, -2.3,  7.52, -2.12, 3.41, -4.76, 7.9,  5.04,10.26, -1.42, 7.85, -1.88,
          3.81, -2.59, 4.32, 5.7,   1.18, -1.74, 1.81, 6.16,  4.2, -0.39, 1.55, -1.4,
          1.76, -4.14, -2.36, -0.24, 4.8, -7.07, 1.34, 1.98, 0.86, -3.96, -0.61, 2.68,
          -1.65, -2.06, 3.67, -0.19, 2.33, 3.78, 2.16, 0.35,  -5.6, 1.32, 2.99, 4.21,
          -0.9,   4.32, -4.01, 2.03, 0.9, -0.74, -5.78, 5.76, 0.52, 1.37, -0.9, -4.06,
          -0.49, -2.39, -2.67,-0.71, -0.4, 2.55, 0.97, 1.96, 8.13, -5.93, 4.01, 0.79,
          -5.61, 0.29, 4.92, -2.89, -3.24, -3.06, -0.23, 0.71, 0.75, 4.6, 1.35, -3.35),
    f.block = rep(1:4, 24),
    id = paste0("a", rep(c(2,1,3), each = 4)))

dd <- dat
set.seed(33)
dd$y <- dat$y + rnorm(nrow(dat), mean = 0, sd = 0.1)

library(nlme)
fpl.B.range <- function(lx,A,B,C,D) A/(1+exp(-B*(lx-C))) + D


INIT <- c(A.a1=1, A.a2=0, A.a3=0,
          B = 1,  B.a2=0, B.a3=0,
          C = 0,  C.a2=0, C.a3=0,
          D = 1,  D.a2=0, D.a3=0)

## Typically this will fail with a singularity, but it should not hang.
try(nlme(y ~ fpl.B.range(x,A,B,C,D), data = dd,
         fixed = list(A ~ id, B ~ id, C ~ id, D ~ id),
         random = list(f.block = pdSymm(A+B+C+D ~ 1)),
         start = INIT,
#     control= nlmeControl(## NB: msMaxIter=200, ## gives singularity error at iter.55
#         msVerbose=TRUE), #==> passed as 'trace' to nlminb()
         verbose = TRUE)) -> res
## now (2021-09-23) ends in
## Error in contr.treatment(n = 0L) : not enough degrees of freedom to define contrasts


## it stalls, I need to kill the R process
## --  [on lynne Fedora 26 (4.14.11-200.fc26.x86_64), Jan.2018]
## in R 3.4.3 and R 3.4.3 patched with nlme 3.1.131
##                    and R-devel with nlme 3.1.135

summary(warnings())# mostly  "Singular precision matrix in level -1, block *"

Try the nlme package in your browser

Any scripts or data that you put into this service are public.

nlme documentation built on Nov. 27, 2023, 5:09 p.m.