52 lines
2.2 KiB
R
Raw Normal View History

2025-01-12 00:52:51 +08:00
## 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 = factor(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
## 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 *"