From murdoch at stats.uwo.ca  Mon Nov 13 17:22:09 2006
From: murdoch at stats.uwo.ca (Duncan Murdoch)
Date: Mon, 13 Nov 2006 11:22:09 -0500
Subject: [Rd] bug in acf (PR#9360)
In-Reply-To: <20061113153014.53F2E572ED@slim.kubism.ku.dk>
References: <20061113153014.53F2E572ED@slim.kubism.ku.dk>
Message-ID: <45589BB1.6050305@stats.uwo.ca>

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.



[Rd] bug in acf (PR#9360)
Duncan Murdoch