From m@ech|er @end|ng |rom @t@t@m@th@ethz@ch  Fri Oct  1 15:45:48 2021
From: m@ech|er @end|ng |rom @t@t@m@th@ethz@ch (Martin Maechler)
Date: Fri, 1 Oct 2021 15:45:48 +0200
Subject: [Rd] R 4.1.x make check fails, stats-Ex.R,
 step factor reduced below minFactor
In-Reply-To: <YVbOc7TQQuUN8tYO@piskorski.com>
References: <YVbOc7TQQuUN8tYO@piskorski.com>
Message-ID: <24919.4364.817651.951991@stat.math.ethz.ch>

>>>>> Andrew Piskorski 
>>>>>     on Fri, 1 Oct 2021 05:01:39 -0400 writes:

    > I recently built R 4.1.1 (Patched) from source, as I have many older
    > versions over the years.  This version, on Ubuntu 18.04.4 LTS:

    > R 4.1.1 (Patched), 2021-09-21, svn.rev 80946, x86_64-pc-linux-gnu

    > Surprisingly, "make check" fails, which I don't recall seeing before.
    > The error is in from stats-Ex.R, which unfortunately terminates all
    > further testing!  This particular error, "step factor ... reduced
    > below 'minFactor'" does not seem very serious, but I can't figure out
    > why it's happening.

    > I installed with "make install install-tests" as usual, which seemed
    > to work fine.  Running the same tests after install, I'm able to get
    > more coverage by using errorsAreFatal=FALSE.  However, it seems the
    > rest of the 'stats' tests after the bad one still do not run.

    > I'm confused about the intent of this particular test.  The comment
    > above it seems to says that it's SUPPOSED to throw this error, yet
    > getting the error still terminates further testing, which seems
    > strange.  What's supposed to happen here?

    > Any ideas on why this error might be occurring, and how I should debug
    > it?  What's the right way for me to disable this one failing test, so
    > the ones after it can run?

    > Thanks for your help!


    > ## "make check" output:
    > make[1]: Entering directory '/home/nobackup/co/R/R-4-1-branch/Build-x86_64/tests'
    > make[2]: Entering directory '/home/nobackup/co/R/R-4-1-branch/Build-x86_64/tests'
    > make[3]: Entering directory '/home/nobackup/co/R/R-4-1-branch/Build-x86_64/tests/Examples'
    > Testing examples for package 'base'
    > Testing examples for package 'tools'
    > comparing 'tools-Ex.Rout' to 'tools-Ex.Rout.save' ... OK
    > Testing examples for package 'utils'
    > Testing examples for package 'grDevices'
    > comparing 'grDevices-Ex.Rout' to 'grDevices-Ex.Rout.save' ... OK
    > Testing examples for package 'graphics'
    > comparing 'graphics-Ex.Rout' to 'graphics-Ex.Rout.save' ... OK
    > Testing examples for package 'stats'
    > Error: testing 'stats' failed
    > Execution halted
    > Makefile:37: recipe for target 'test-Examples-Base' failed
    > make[3]: *** [test-Examples-Base] Error 1
    > make[3]: Leaving directory '/home/nobackup/co/R/R-4-1-branch/Build-x86_64/tests/Examples'
    > ../../tests/Makefile.common:198: recipe for target 'test-Examples' failed
    > make[2]: *** [test-Examples] Error 2
    > make[2]: Leaving directory '/home/nobackup/co/R/R-4-1-branch/Build-x86_64/tests'
    > ../../tests/Makefile.common:184: recipe for target 'test-all-basics' failed
    > make[1]: *** [test-all-basics] Error 1
    > make[1]: Leaving directory '/home/nobackup/co/R/R-4-1-branch/Build-x86_64/tests'
    > Makefile:305: recipe for target 'check-all' failed
    > make: *** [check-all] Error 2


    > ## From file:  tests/Examples/stats-Ex.Rout.fail

    >> ## Here, requiring close convergence, you need to use more accurate numerical
    >> ##  differentiation; this gives Error: "step factor .. reduced below 'minFactor' .."
    >> options(digits = 10) # more accuracy for 'trace'
    >> ## IGNORE_RDIFF_BEGIN
    >> try(nlm1 <- update(nlmod, control = list(tol = 1e-7))) # where central diff. work here:
    > Warning in nls(formula = y ~ Const + A * exp(B * x), algorithm = "default",  :
    > No starting values specified for some parameters.
    > Initializing 'Const', 'A', 'B' to '1.'.
    > Consider specifying 'start' or using a selfStart model

So this did give an error we expected (on some platforms only),
hence used try().

However, the next one "should work" (*)
and failing there, *does* fail the tests :

    >> (nlm2 <- update(nlmod, control = list(tol = 8e-8, nDcentral=TRUE), trace=TRUE))
    > Warning in nls(formula = y ~ Const + A * exp(B * x), algorithm = "default",  :
    > No starting values specified for some parameters.
    > Initializing 'Const', 'A', 'B' to '1.'.
    > Consider specifying 'start' or using a selfStart model
    > 1017460.306    (4.15e+02): par = (1 1 1)
    > 758164.7503    (2.34e+02): par = (13.42031396 1.961485 0.05947543745)
    > 269506.3538    (3.23e+02): par = (51.75719816 -13.09155957 0.8428607709)
    > 68969.21893    (1.03e+02): par = (76.0006985 -1.935226745 1.0190858)
    > 633.3672230    (1.29e+00): par = (100.3761515 8.624648402 5.104490259)
    > 151.4400218    (9.39e+00): par = (100.6344391 4.913490985 0.2849209569)
    > 53.08739850    (7.24e+00): par = (100.6830407 6.899303317 0.4637755074)
    > 1.344478640    (5.97e-01): par = (100.0368306 9.897714142 0.5169294939)
    > 0.9908415909   (1.55e-02): par = (100.0300625 9.9144191 0.5023516843)
    > 0.9906046057   (1.84e-05): par = (100.0288724 9.916224018 0.5025207336)
    > 0.9906046054   (9.95e-08): par = (100.028875 9.916228366 0.50252165)
    > 0.9906046054   (9.93e-08): par = (100.028875 9.916228366 0.50252165)
    > Error in nls(formula = y ~ Const + A * exp(B * x), algorithm = "default",  : 
    > step factor 0.000488281 reduced below 'minFactor' of 0.000976562
    > Calls: update -> update.default -> eval -> eval -> nls
    > Execution halted

On our versions of Linux (and hardware in case it should matter: Intel x64), 
the above has always worked:
e.g.,

> (nlm2 <- update(nlmod, control = list(tol = 8e-8, nDcentral=TRUE), trace=TRUE))
Warning in nls(formula = y ~ Const + A * exp(B * x), algorithm = "default",  :
  No starting values specified for some parameters.
Initializing ?Const?, ?A?, ?B? to '1.'.
Consider specifying 'start' or using a selfStart model
1017460.306    (4.15e+02): par = (1 1 1)
758164.7503    (2.34e+02): par = (13.42031396 1.961485 0.05947543746)
269506.3540    (3.23e+02): par = (51.75719814 -13.09155954 0.8428607699)
68969.21900    (1.03e+02): par = (76.00069849 -1.93522673 1.019085799)
633.3672239    (1.29e+00): par = (100.3761515 8.62464841 5.104490279)
151.4400266    (9.39e+00): par = (100.6344391 4.913490966 0.284920948)
53.08740235    (7.24e+00): par = (100.6830408 6.899303242 0.4637755057)
1.344478691    (5.97e-01): par = (100.0368306 9.89771414 0.5169294949)
0.9908415909   (1.55e-02): par = (100.0300625 9.9144191 0.5023516842)
0.9906046057   (1.84e-05): par = (100.0288724 9.916224018 0.5025207337)
0.9906046054   (9.94e-08): par = (100.028875 9.916228366 0.50252165)
0.9906046054   (5.06e-10): par = (100.028875 9.916228388 0.5025216549)
Nonlinear regression model
  model: y ~ Const + A * exp(B * x)
   data: parent.frame()
      Const           A           B 
100.0288750   9.9162284   0.5025217 
 residual sum-of-squares: 0.9906046

However, we had heard of "strange platforms" where it failed,
--> R's bugzilla PR#18165
and for that reason, in the R-devel version of that source file
 <Rsrc>/src/library/stats/man/nls.Rd

have the code amended to not stop on error on those platforms
only:

o2 <- options(digits = 10) # more accuracy for 'trace'
## central differencing works here typically (PR#18165: not converging on *some*):
ctr2 <- nls.control(nDcentral=TRUE, tol = 8e-8, # <- even smaller than above
   warnOnly = (grepl("^aarch64.*linux", R.version$platform) && grepl("^NixOS", osVersion)
              ))
(nlm2 <- update(nlmod, control = ctr2, trace = TRUE)); options(o2)

... now would that run w/o error on your Ubuntu-installed R ?

First guess: no

Is there anything special (system libraries, compilers, ..)
on your platform?

If not, I do wonder because indeed the

   example(nls)

R code (indeed the full help page) is identical as in R 4.1.1,
and I think we can assume for sure that these examples have run
satisfactorily on most Ubuntu 18.04 LTS, no?



    > ## After install, start R with --vanilla and run tests like this:
    > ## https://cran.r-project.org/doc/manuals/r-patched/R-admin.html#Testing-a-Unix_002dalike-Installation
    > Sys.setenv(LC_COLLATE = "C", LC_TIME = "C", LANGUAGE = "en")
    > pdf("tests.pdf")
    > tools::testInstalledPackages(scope="base", errorsAreFatal=FALSE)

    > -- 
    > Andrew Piskorski <atp at piskorski.com>

    > ______________________________________________
    > R-devel at r-project.org mailing list
    > https://stat.ethz.ch/mailman/listinfo/r-devel



[Rd] R 4.1.x make check fails, stats-Ex.R, step factor reduced below minFactor
Martin Maechler