[R] acf Significance

David Scott d.scott at auckland.ac.nz
Thu Aug 6 10:48:16 CEST 2009

Steve Jones wrote:
> Thanks for the pointer to the str function - very handy!
> The output for the acf object is below - it doesn't seem to contain
> anything that might tell me the significance level.
> List of 6
>  $ acf   : num [1:27, 1, 1] 1 0.6309 0.2989 0.0612 -0.2105 ...
>  $ type  : chr "correlation"
>  $ n.used: int 27
>  $ lag   : num [1:27, 1, 1] 0 1 2 3 4 5 6 7 8 9 ...
>  $ series: chr "time_series"
>  $ snames: NULL
>  - attr(*, "class")= chr "acf"
> Does anyone have any more ideas?

Well, yes, but it is kind of a long story.

I assume you want the limits as are plotted by the acf function, usually 
in blue. Possibly you actually want the p-value for a given observed 
autocorrelation, but you will have to get that yourself working from my 

The short answer to your question that the confidence limits are not 
returned by the acf function, they are in fact calculated in plot.acf. 
You have to look at the actual code. The beauty of R is that you can 
look at the code and hopefully in doing so, learn more about programming 
  in R.

First up, you decide to look in the obvious place, the code of acf.
Print that out and have a look at it and you find that the plotting is 
done by plot.acf. When you try to print out plot.acf you get
 > plot.acf
Error: object "plot.acf" not found
The reason is this function is non-visible as seen by
 > methods("plot")
  [1] plot.acf*           plot.data.frame*    plot.Date*
  [4] plot.decomposed.ts* plot.default        plot.dendrogram*
  [7] plot.density        plot.ecdf           plot.factor*
[10] plot.formula*       plot.hclust*        plot.histogram*
[13] plot.HoltWinters*   plot.isoreg*        plot.lm
[16] plot.medpolish*     plot.mlm            plot.POSIXct*
[19] plot.POSIXlt*       plot.ppr*           plot.prcomp*
[22] plot.princomp*      plot.profile.nls*   plot.spec
[25] plot.spec.coherency plot.spec.phase     plot.stepfun
[28] plot.stl*           plot.table*         plot.ts
[31] plot.tskernel*      plot.TukeyHSD

    Non-visible functions are asterisked
You can get it with getAnywhere(plot.acf) however.

So look through plot.acf. You will need to look at the help for it to 
see that it allows for two different types of limit, one assuming white 
noise and one assuming an MA model. Most likely you want the white noise 

The place where the confidence limit is calculated is not too hard to 
find, it is
     clim0 <- if (with.ci)
         qnorm((1 + ci)/2)/sqrt(x$n.used)
This where x is an object of class acf with structure you saw when you 
used str.

So that is it. If your acf is called x, and your confidence level is ci, 
then the limit is given by
qnorm((1 + ci)/2)/sqrt(x$n.used)

The steps needed to access R code including underlying C and Fortran are 
explained in the article by Uwe Ligges:
Uwe Ligges. R Help Desk: Accessing the sources. R News, 6(4):43-45, 
October 2006.
This article is essential reading for anyone contemplating much use of R.

David Scott
David Scott	Department of Statistics
		The University of Auckland, PB 92019
		Auckland 1142,    NEW ZEALAND
Phone: +64 9 923 5055, or +64 9 373 7599 ext 85055
Email:	d.scott at auckland.ac.nz,  Fax: +64 9 373 7018

Director of Consulting, Department of Statistics

More information about the R-help mailing list