[Rd] bug in acf (PR#9360)

Duncan Murdoch murdoch at stats.uwo.ca
Mon Nov 13 21:24:08 CET 2006


On 11/13/2006 2:24 PM, A.I. McLeod wrote:
>> I don't think that's a reasonable expectation.  You've got an empty sum 
>> in the formula for the lag 1 autocovariance:
>> 
>> sum_{i=1}^0 phi_i phi_{i+1}
>> 
>> R is assuming that's not what you meant and is reporting it as an error. 
>>  If it gave you any value, it should be zero, not phi^2.
>> 
> ********************************************
> I agree the empty sum which is the lag 1 autocovariance should be zero but this is the SECOND term in $acf output.
> For the first term,
> 1) if demean=F, it is variance which is phi^2 as I suggested
> 2) if demean=T, it is the variance/variance = 0/0 which I said should best be 1

Okay, I see what you mean now.  Yes, I agree acf should return lag 0 
autocorrelations and autocovariances even for a series of length 1. 
I'll take a look at the code.

Duncan Murdoch

> 
> 
> ----- Original Message ----- 
> From: "Duncan Murdoch" <murdoch at stats.uwo.ca>
> To: <aimcleod at uwo.ca>
> Cc: <r-devel at stat.math.ethz.ch>; <R-bugs at biostat.ku.dk>
> Sent: Monday, November 13, 2006 11:22 AM
> Subject: Re: [Rd] bug in acf (PR#9360)
> 
> 
>> On 11/13/2006 10:30 AM, aimcleod at uwo.ca wrote:
>>> Full_Name: Ian McLeod
>>> Version: 2.3.1
>>> OS: Windows
>>> Submission from: (NULL) (129.100.76.136)
>>> 
>>> 
>>>> There is a simple bug in acf as shown below:
>>>> 
>>>> z <- 1
>>>> acf(z,lag.max=1,plot=FALSE)
>>>> Error in acf(z, lag.max = 1, plot = FALSE) :
>>>>        'lag.max' must be at least 1
>>>> 
>>> This is certainly a bug.
>> 
>> I'd say it's a documentation bug, rather than a code bug.
>>> 
>>> There are two problems:
>>> 
>>> (i) the error message is wrong since lag.max is set to 1.  Perhaps, if the
>>> function acf can not be used for in this situaiton, a different error message
>>> would be more appropriate.  I understand why this might be done but I don't
>>> think it is the best approach.
>> 
>> What happens is that lag.max is reduced to length(z)-1, which is zero in 
>> your case.  This change should be mentioned in the documentation.
>> 
>>> (ii) Please look at the function GetB which is attached.  This is part a
>>> computation for a fast algorithm for exact mle of mean.  Usually phi here are
>>> the coefficients from a high order AR but when I tried for AR(1) I got the error
>>> message.  So the workaround is given.  Notice that I use: 
>>> 
>>> p*as.vector(acf(phi,lag.max=p,type="covariance",demean=FALSE,plot=FALSE)$acf)
>>> 
>>> so what I expect to get when p=length(phi)=1 is just phi^2.  This is what
>>> happens in Mathematica with ListCorrelate[{phi},{phi}].  When you have
>>> acf="correlation" and demean=TRUE then one gets 0/0 which should be defined as 1
>>> in this situation.
>> 
>> I don't think that's a reasonable expectation.  You've got an empty sum 
>> in the formula for the lag 1 autocovariance:
>> 
>> sum_{i=1}^0 phi_i phi_{i+1}
>> 
>> R is assuming that's not what you meant and is reporting it as an error. 
>>  If it gave you any value, it should be zero, not phi^2.
>> 
>> Duncan Murdoch
>> 
>>> 
>>> Probably if the R authors just want to use acf for data analysis they may simply
>>> choose to require length(x)>1 in acf(x,...) although I don't see the harm in my
>>> suggestion either.
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list