[RsR] lmrob: lmrob.S()-Warning is not in the result returned

Locher René (lor) |or @end|ng |rom zhw|n@ch
Fri Jun 8 11:21:56 CEST 2007


Ciao Martin

I had started R freshly to run my example. Here the full output (without start-up message):

> options(STERM='iESS', editor='gnuclient.exe')
> library(robustbase)
> test <- data.frame(lconc = log(c(29.5, 40.1, 21.1, 25.3, 27.3, 25.2,
+                                  26.9, 19.1, 16.4)),
+                    dist  = c(520, 1480, 1780, 740, 540, 1050, 1100,
+                              1640, 1860))
> 
> res <- lmrob(lconc~dist, dat=test)
Warning messages:
1: rwls(): not converged in 1000 lambda iterations 
2: rwls(): not converged in 1000 lambda iterations 
3: rwls(): not converged in 1000 lambda iterations 
4: rwls(): not converged in 1000 lambda iterations 
> 


And her my sessionInfo right afterwards:
> sessionInfo()
R version 2.5.0 (2007-04-23) 
i386-pc-mingw32 

locale:
LC_COLLATE=German_Switzerland.1252;LC_CTYPE=German_Switzerland.1252;LC_MONETARY=German_Switzerland.1252;LC_NUMERIC=C;LC_TIME=German_Switzerland.1252

attached base packages:
[1] "stats"     "graphics"  "grDevices" "utils"     "datasets"  "methods"  
[7] "base"     

other attached packages:
robustbase 
   "0.2-7" 

And here is the output in debugging mode. I hope this helps.

debug(lmrob)
debug(lmrob.fit.MM)
debug(lmrob.MM)

## first level
lmrob(lconc~dist, dat=test)
Browse[1]>c

## second level
z <- lmrob.fit.MM(x, y, control = control)
Browse[1]>c

## third level
final.MM <- lmrob.MM(x = x, y = y, beta.initial = iCoef, scale = init.S$scale, 
    control = control)

Browse[1]>n  ## repeated until call to .C()

## arguments just before the call to fourth level
Browse[1]> x
  (Intercept) dist
1           1  520
2           1 1480
3           1 1780
4           1  740
5           1  540
6           1 1050
7           1 1100
8           1 1640
9           1 1860
attr(,"assign")
[1] 0 1
Browse[1]> y
       1        2        3        4        5        6        7        8 
3.384390 3.691376 3.049273 3.230804 3.306887 3.226844 3.292126 2.949688 
       9 
2.797281 
Browse[1]> print(n)
[1] 9
Browse[1]> p
[1] 2
Browse[1]> control$max.it
[1] 50
Browse[1]> c.psi
[1] 4.685061
Browse[1]> c

## fourth level
b <- .C("R_lmrob_MM", x = as.double(x), y = as.double(y), n = as.integer(n), 
    p = as.integer(p), beta.initial = as.double(beta.initial), 
    scale = as.double(scale), coef = double(p), iter = as.integer(control$max.it), 
    c.psi = c.psi, converged = logical(1), PACKAGE = "robustbase")[c("coef", 
    "scale", "converged", "iter")]
Warning messages:
1: rwls(): not converged in 1000 lambda iterations 
2: rwls(): not converged in 1000 lambda iterations 
3: rwls(): not converged in 1000 lambda iterations 
4: rwls(): not converged in 1000 lambda iterations 

Everything works fine with my R, except that I cannot use successfully the package debug since I have updated R to version 2.5.0. Since then, mtrace(fun) exits with the error message "Error in all.levs[[j]] : subscript out of bounds" with functions I have tested in former versions of R without any problems! But that's another story. By the way: Before I update R, I remove all the packages installed and install the latest versions after updating R. 

I hope this helps. I am afraid that my problem is platform dependent.

Kind regards 

René

René Locher                                   E-Mail: rene.locher using zhwin.ch
Institut für Datenanalyse und Prozessdesign   Tel:    052/ 267 7810
Zürcher Hochschule Winterthur                 Fax:    052/ 268 7810
Technopark / Jägerstrasse 2                   
Postfach
CH-8400 Winterthur                            http://www.idp.zhwin.ch
 
 


|-----Original Message-----
|From: Martin Maechler [mailto:maechler using stat.math.ethz.ch] 
|Sent: Friday, June 08, 2007 9:01 AM
|To: Matias Salibian-Barrera
|Cc: r-sig-robust using r-project.org; Locher René (lor); Martin Maechler
|Subject: Re: [RsR] lmrob: lmrob.S()-Warning is not in the 
|result returned
|
|
|  MS> However, *I can't* reproduce Rene's second warning: "rwls(): not
|  MS> converged in 1000 lambda iterations" warning. I will 
|look into it a bit
|  MS> further.
|
|indeed, and I can't either - carefully checking a 2nd time.
|
|Rene, maybe you can try to use  debug(.) and 
|see the exact lmrob.S(.) call which leads to the lambda
|iteration warnings.
|
|  MS> Matias
|  MS> 
|  MS> > version
|  MS>                _
|  MS> platform       i686-pc-linux-gnu
|  MS> arch           i686
|  MS> os             linux-gnu
|  MS> system         i686, linux-gnu
|  MS> status
|  MS> major          2
|  MS> minor          3.1
|  MS> year           2006
|  MS> month          06
|  MS> day            01
|  MS> svn rev        38247
|  MS> language       R
|  MS> version.string Version 2.3.1 (2006-06-01)
|  MS> > library(robustbase)
|  MS> > test <- data.frame(lconc=c(3.081910,3.165475,2.501436,3.650658,
|  MS> + 3.044522,3.660994),
|  MS> + dist=c(100,180,280,30,220,6))
|  MS> > res <- lmrob(lconc~dist, dat=test)
|  MS> Warning messages:
|  MS> 1: lmrob.S(): refinements did not converge (to 
|tol=1e-07) in 200 iterations
|  MS> 2: lmrob.S(): refinements did not converge (to 
|tol=1e-07) in 200 iterations
|  MS> > my.ctrl <- lmrob.control(refine.tol=1e-5)
|  MS> > res2 <- lmrob(lconc~dist, dat=test, control=my.ctrl)
|  MS> > res
|  MS> 
|  MS> Call:
|  MS> lmrob(formula = lconc ~ dist, data = test)
|  MS> 
|  MS> Coefficients:
|  MS> (Intercept)         dist
|  MS>    3.690387    -0.003707
|  MS> 
|  MS> > res2
|  MS> 
|  MS> Call:
|  MS> lmrob(formula = lconc ~ dist, data = test, control = my.ctrl)
|  MS> 
|  MS> Coefficients:
|  MS> (Intercept)         dist
|  MS>    3.690387    -0.003707
|  MS> 
|  MS> > res$scale
|  MS> [1] 0.2506454
|  MS> > res2$scale
|  MS> [1] 0.2506544
|
| Martin Maechler wrote:
| >>>>>> "ReneL" == Locher René (lor) <lor using zhwin.ch>
| >>>>>>     on Tue, 5 Jun 2007 18:24:47 +0200 writes:
| > 
| >     ReneL> Dear Matias When I run the following code I get 2
| >     ReneL> warnings: 
| > 
| >     ReneL> lmrob.S(): refinements did not converge 
|(tol=1e-07) in 200 iterations
| > 
| >      library(robustbase)
| >      test <- data.frame(lconc=c(3.081910,3.165475,2.501436,3.650658,
| > 				3.044522,3.660994),
| >                         dist=c(100,180,280,30,220,6))
| >      res <- lmrob(lconc~dist, dat=test)
| > 
| >     ReneL> res$converged gives TRUE as the IRWLS iterations 
|after the lmrob.S() have converged.
| > 
| >     ReneL> It would be nice to have also the convergence 
|status of lmrob.S() in the result object of lmrob().
| > 
| > I agree. 
| > 
| > HOWEVER, I cannot see / reproduce the convergence warnings
| > problems you mention, neither the above, nor the one you sent
| > yesterday.
| > 
| > Are you *REALLY* sure, you are not using an older version of
| > "robustbase" or mixing versions of robustbase,
| > or are using 'lmrob' (there was a package of that name) and
| > 'robustbase' simultaneously?
| > 
| > Note: For such reports, do use sessionInfo(). 
| > 
| > Regards,
| > Martin
| > 
| >     ReneL> Kind regards
| > 
| >     ReneL> René
| > 
| >  
| >     ReneL> René Locher                                   
|E-Mail: rene.locher using zhwin.ch
| >     ReneL> Institut für Datenanalyse und Prozessdesign   
|Tel:    052/ 267 7810
| >     ReneL> Zürcher Hochschule Winterthur                 
|Fax:    052/ 268 7810
| >     ReneL> Technopark / Jägerstrasse 2                   
| >     ReneL> Postfach
| >     ReneL> CH-8400 Winterthur                            
|http://www.idp.zhwin.ch
| >  
| >     ReneL> P.S.
| > 
| >     ReneL> Here is the version of my system on which I have 
|tested the example:
| > 
| >     ReneL> version              _                           
| >     ReneL> ## platform       i386-pc-mingw32             
| >     ReneL> ## arch           i386                        
| >     ReneL> ## os             mingw32                     
| >     ReneL> ## system         i386, mingw32               
| >     ReneL> ## status                                     
| >     ReneL> ## major          2                           
| >     ReneL> ## minor          5.0                         
| >     ReneL> ## year           2007                        
| >     ReneL> ## month          04                          
| >     ReneL> ## day            23                          
| >     ReneL> ## svn rev        41293                       
| >     ReneL> ## language       R                           
| >     ReneL> ## version.string R version 2.5.0 (2007-04-23)
| > 
| >     ReneL> library(help=robustbase)  
| >     ReneL> ## Version:       0.2-7
|
| 
| 
| -- 
| _____________________________________________________
| Matias Salibian-Barrera - Department of Statistics
| The University of British Columbia
| Phone: (604) 822-3410 - Fax: (604) 822-6960
| "The plural of anecdote is not data" (George Stigler?)
|
| 
| 
| >>>>> ">>" == Matias Salibian-Barrera <matias using stat.ubc.ca>
| >>>>>     on Thu, 07 Jun 2007 09:35:46 -0700 writes:
| 
|     >>> Thanks Rene for pointing these problems out.
| 
|     >>> I can reproduce the first warning (produced by
|     >>> lmrob.S()) -- I'm copying my output below. Of course,
|     >>> the warning disappears if you weaken the convergence
|     >>> criteria a little:
| 
|     >>> my.ctrl <- lmrob.control(refine.tol=1e-5) res2 <-
|     >>> lmrob(lconc~dist, dat=test, control=my.ctrl)
| 
|     >>> However, *I can't* reproduce Rene's second warning:
|     >>> "rwls(): not converged in 1000 lambda iterations"
|     >>> warning. I will look into it a bit further.
| 
|     >>> Matias
| 
| 
| 
|     >> version
|     >>>                _ platform i686-pc-linux-gnu arch i686 os
|     >>> linux-gnu system i686, linux-gnu status major 2 minor
|     >>> 3.1 year 2006 month 06 day 01 svn rev 38247 language R
|     >>> version.string Version 2.3.1 (2006-06-01)
|     >> library(robustbase) test <-
|     >> data.frame(lconc=c(3.081910,3.165475,2.501436,3.650658,
|     >>> + 3.044522,3.660994), + dist=c(100,180,280,30,220,6))
|     >> res <- lmrob(lconc~dist, dat=test)
|     >>> Warning messages: 1: lmrob.S(): refinements did not
|     >>> converge (to tol=1e-07) in 200 iterations 2: lmrob.S():
|     >>> refinements did not converge (to tol=1e-07) in 200
|     >>> iterations
|     >> my.ctrl <- lmrob.control(refine.tol=1e-5) res2 <-
|     >> lmrob(lconc~dist, dat=test, control=my.ctrl) res
| 
|     >>> Call: lmrob(formula = lconc ~ dist, data = test)
| 
|     >>> Coefficients: (Intercept) dist 3.690387 -0.003707
| 
|     >> res2
| 
|     >>> Call: lmrob(formula = lconc ~ dist, data = test, control
|     >>> = my.ctrl)
| 
|     >>> Coefficients: (Intercept) dist 3.690387 -0.003707
| 
|     >> res$scale
|     >>> [1] 0.2506454
|     >> res2$scale
|     >>> [1] 0.2506544
| 
| 
| 
|     >>> Martin Maechler wrote:
|     >>>>>>> "ReneL" == Locher René (lor) <lor using zhwin.ch> on Tue,
|     >>>>>>> 5 Jun 2007 18:24:47 +0200 writes:
|     >> 
|     ReneL> Dear Matias When I run the following code I get 2
|     ReneL> warnings:
|     >> 
|     ReneL> lmrob.S(): refinements did not converge (tol=1e-07)
|     ReneL> in 200 iterations
|     >> 
|     >> library(robustbase) test <-
|     >> data.frame(lconc=c(3.081910,3.165475,2.501436,3.650658,
|     >> 3.044522,3.660994), dist=c(100,180,280,30,220,6)) res <-
|     >> lmrob(lconc~dist, dat=test)
|     >> 
|     ReneL> res$converged gives TRUE as the IRWLS iterations
|     ReneL> after the lmrob.S() have converged.
|     >> 
|     ReneL> It would be nice to have also the convergence status
|     ReneL> of lmrob.S() in the result object of lmrob().
|     >> 
|     >> I agree.
|     >> 
|     >> HOWEVER, I cannot see / reproduce the convergence
|     >> warnings problems you mention, neither the above, nor the
|     >> one you sent yesterday.
|     >> 
|     >> Are you *REALLY* sure, you are not using an older version
|     >> of "robustbase" or mixing versions of robustbase, or are
|     >> using 'lmrob' (there was a package of that name) and
|     >> 'robustbase' simultaneously?
|     >> 
|     >> Note: For such reports, do use sessionInfo().
|
|




More information about the R-SIG-Robust mailing list