----- 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
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.