[Rd] Windows crash in confint() with nls fit (PR#8428)

murdoch@stats.uwo.ca murdoch at stats.uwo.ca
Thu Dec 22 20:51:24 CET 2005


I've found the problem, but someone who knows more about nls() will have 
to fix it.

The problem is that in the demo code below, n1 ends up being an nls 
object, but n1$call$control is NULL.  profiler.nls() assumed that the 
nls object passed to it has a non-NULL element there, and doesn't check.

I've fixed the code so now it doesn't crash, but it now dies with this 
error instead:

 > confint(n1)  ## boom
Waiting for profiling to be done...
Error in prof$getProfile() : 'control$maxiter' absent

I'll commmit my change to R-devel and R-patched shortly.

Duncan Murdoch





On 12/22/2005 1:23 PM, bolker at zoo.ufl.edu wrote:
> Full_Name: Ben Bolker
> Version: 2.2.1
> OS: Windows XP and 2000
> Submission from: (NULL) (128.227.60.124)
> 
> 
>   The following code, using confint() to try
> to get confidence intervals on an nls object
> that has been fitted with algorithm="port"
> reliably crashes R 2.2.0 and 2.2.1 with the
> latest version of MASS on a Windows 2000 and
> a Windows XP machine here.  I *think* earlier
> versions of MASS may not have crashed, but
> I have now updated the versions on most of
> my machines and don't have a test version handy.
> 
>  On XP, I get an error-report-do-you-want-
> to-send-this-to-Microsoft dialog box.  On 2000
> I get a "Rgui has generated errors ..." dialog box.
> 
>   I can get this far:
> 
> debug: profiledModel <- .Call("nls_iter", fittedModel, ctrl, trace, 
>     PACKAGE = "stats")
> 
> Browse[1]> where
> where 1: prof$getProfile()
> where 2: profile.nls(object, which = parm, alphamax = (1 - level)/4)
> where 3: profile(object, which = parm, alphamax = (1 - level)/4)
> where 4: confint.nls(n1)
> where 5: confint(n1)
> 
>   I'm not set up to debug compiled code on Windows, and I haven't
> been able to reproduce the problem on Linux.
> 
> set.seed(1001)
> x = runif(200)
> a =1
> b = 1
> c = -0.1
> y = a+b*x+c*x^2+rnorm(200,sd=0.05)
> plot(x,y)
> curve(a+b*x+c*x^2,add=TRUE)
> n1 = nls(y~a+b*x+c*I(x^2),start=c(a=1,b=1,c=0.1),algorithm="port")
> confint(n1)  ## boom
> 
>   N.B.: It only crashes if algorithm="port" is specified.
> 
> ## [1] "Windows 2000 Professional (build 2195) Service Pack 4.0"
> ## 
> ## > R.version
> ##          _              
> ## platform i386-pc-mingw32
> ## arch     i386           
> ## os       mingw32        
> ## system   i386, mingw32  
> ## status                  
> ## major    2              
> ## minor    2.0            
> ## year     2005           
> ## month    10             
> ## day      06             
> ## svn rev  35749          
> ## language R        
> ##    
> ## MASS 
> ##                      
> ## Version:             7.2-23
> ## Date:                2005-12-08
> ## 
> ##  
> 
> ##  "Windows XP Professional (build 2600) Service Pack 2.0"
>       ##               _              
> ##platform i386-pc-mingw32
> ##arch     i386           
> ##os       mingw32        
> ##system   i386, mingw32  
> ##status                  
> ##major    2              
> ##minor    2.0            
> ##year     2005           
> ##month    10             
> ##day      06             
> ##svn rev  35749          
> ##language R        
> 
> ##
> ##Version:             7.2-23
> ##Date:                2005-12-08      ## CRASH
>    
> ##> R.version
> ##         _              
> ##platform i386-pc-mingw32
> ##arch     i386           
> ##os       mingw32        
> ##system   i386, mingw32  
> ##status                  
> ##major    2              
> ##minor    2.1            
> ##year     2005           
> ##month    12             
> ##day      20             
> ##svn rev  36812          
> ##language R         
> ## CRASH
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list