[Rd] Bug in package stats function ar() (PR#10459)

Martin Maechler maechler at stat.math.ethz.ch
Sat Nov 24 22:41:56 CET 2007


>>>>> "DM" == Duncan Murdoch <murdoch at stats.uwo.ca>
>>>>>     on Sat, 24 Nov 2007 16:08:31 -0500 writes:

    DM> On 24/11/2007 11:45 AM, Ben Bolker wrote:
    >> 
    >> 
    >> Steven McKinney wrote:
    >>> Full_Name: Steven McKinney Version: 2.6.0 OS: OS X
    >>> Submission from: (NULL) (142.103.207.10)
    >>> 
    >>> 
    >>> 
    >>> Function ar() in package "stats" is showing a quirky
    >>> bug.  Some calls to ar() run to completion, others throw
    >>> an error.
    >>> 
    >>> The bug is reproducible by several people on different
    >>> machines, however, the ar() function itself ends up
    >>> throwing the error sporadically.  Several calls to ar()
    >>> may be necessary to trip the error condition.
    >>> 
    >>> Code to reproduce:
    >>> 
    >>> x<-ts(c(-0.2052083,-0.3764986,-0.3762448,0.3740089,0.2737568,2.8235722,-1.7783313,0.2728676,-0.3273164),start=c(1978,3),frequency=4,end=c(1980,3))
    >>> # ar function res.ar<-ar(x,aic=TRUE,demean=F) # call
    >>> "ar" again and ............
    >>> res.ar<-ar(x,aic=TRUE,demean=F)
    >>> 
    >>> 
    >>> Example output: (Note that on this attempt the first
    >>> call to ar() tripped the error.)
    >>> 
    >>>> x<-ts(c(-0.2052083,-0.3764986,-0.3762448,0.3740089,0.2737568,2.8235722,-
    >>> +
    >>> 1.7783313,0.2728676,-0.3273164),start=c(1978,3),frequency=4,end=c(1980,3))
    >> 
    >> Slightly more detail: in the "eureka" function, in
    >> stats/src/eureka.f, the last element of "vars" in the
    >> return list is bogus and varies among calls; if it comes
    >> out to NaN or NA it triggers the bug.
    >> 
    >> Haven't spent any more time yet tracking this down, but
    >> hope that will save someone a few minutes.

    DM> Thanks, I'll take a look.

I did too.
It seems pretty obvious that we have to require  

      order.max < n.used
i.e.  order.max <= n.used-1
whereas in the current example, order.max == n.used == 9

I have a small fix which solves the problem and seems to pass
make check...

Martin



More information about the R-devel mailing list