[R] acf and ccf

arun smartpink111 at yahoo.com
Tue Jul 30 23:15:15 CEST 2013


I use R 3.0.1.

#I do have that line after  ` lag[lower.tri(lag)] <- -1`

 acf <- .Call(C_acf, x, lag.max, type == "correlation")
    lag <- outer(0:lag.max, lag/x.freq)
    acf.out <- structure(list(acf = acf, type = type, n.used = sampleT, 
        lag = lag, series = series, snames = colnames(x)), class = "acf")


Check this link:
http://stackoverflow.com/questions/14035506/how-to-see-the-source-code-of-r-internal-or-primitive-function

A.K.

________________________________
From: Cathy Lee Gierke <leegi001 at umn.edu>
To: arun <smartpink111 at yahoo.com> 
Sent: Tuesday, July 30, 2013 5:04 PM
Subject: Re: [R] acf and ccf



You must have a different version of R?  But you do have a line:      acf <- .Call(C_acf, x, lag.max, type == "correlation")
That is quite similar.  It is a call to a function that does the actual math.


Here is what I get:

function (x, lag.max = NULL, type = c("correlation", "covariance", 
    "partial"), plot = TRUE, na.action = na.fail, demean = TRUE, 
    ...) 
{
    type <- match.arg(type)
    if (type == "partial") {
        m <- match.call()
        m[[1L]] <- as.name("pacf")
        m$type <- NULL
        return(eval(m, parent.frame()))
    }
    series <- deparse(substitute(x))
    x <- na.action(as.ts(x))
    x.freq <- frequency(x)
    x <- as.matrix(x)
    if (!is.numeric(x)) 
        stop("'x' must be numeric")
    sampleT <- as.integer(nrow(x))
    nser <- as.integer(ncol(x))
    if (is.na(sampleT) || is.na(nser)) 
        stop("sampleT and nser must be ints", domain = NA)
    if (is.null(lag.max)) 
        lag.max <- floor(10 * (log10(sampleT) - log10(nser)))
    lag.max <- as.integer(min(lag.max, sampleT - 1L))
    if (is.na(lag.max) || lag.max < 0) 
        stop("'lag.max' must be at least 0")
    if (demean) 
        x <- sweep(x, 2, colMeans(x, na.rm = TRUE), check.margin = FALSE)
    lag <- matrix(1, nser, nser)
    lag[lower.tri(lag)] <- -1
    acf <- array(.C(C_acf, as.double(x), sampleT, nser, lag.max, 
        as.integer(type == "correlation"), acf = double((lag.max + 
            1L) * nser * nser), NAOK = TRUE)$acf, c(lag.max + 
        1L, nser, nser))
    lag <- outer(0:lag.max, lag/x.freq)
    acf.out <- structure(.Data = list(acf = acf, type = type, 
        n.used = sampleT, lag = lag, series = series, snames = colnames(x)), 
        class = "acf")
    if (plot) {
        plot.acf(acf.out, ...)
        return(invisible(acf.out))
    }
    else return(acf.out)
}
<bytecode: 0x7f8e04f34ea8>
<environment: namespace:stats>


Cathy Lee Gierke


On Tue, Jul 30, 2013 at 3:57 PM, arun <smartpink111 at yahoo.com> wrote:

Hi,
>When I type 'acf', I get this:
>
>
>function (x, lag.max = NULL, type = c("correlation", "covariance",
>    "partial"), plot = TRUE, na.action = na.fail, demean = TRUE,
>    ...)
>{
>    type <- match.arg(type)
>    if (type == "partial") {
>        m <- match.call()
>        m[[1L]] <- as.name("pacf")
>        m$type <- NULL
>        return(eval(m, parent.frame()))
>    }
>    series <- deparse(substitute(x))
>    x <- na.action(as.ts(x))
>    x.freq <- frequency(x)
>    x <- as.matrix(x)
>    if (!is.numeric(x))
>        stop("'x' must be numeric")
>    sampleT <- as.integer(nrow(x))
>    nser <- as.integer(ncol(x))
>    if (is.na(sampleT) || is.na(nser))
>        stop("'sampleT' and 'nser' must be integer")
>    if (is.null(lag.max))
>        lag.max <- floor(10 * (log10(sampleT) - log10(nser)))
>    lag.max <- as.integer(min(lag.max, sampleT - 1L))
>    if (is.na(lag.max) || lag.max < 0)
>        stop("'lag.max' must be at least 0")
>    if (demean)
>        x <- sweep(x, 2, colMeans(x, na.rm = TRUE), check.margin = FALSE)
>    lag <- matrix(1, nser, nser)
>    lag[lower.tri(lag)] <- -1
>    acf <- .Call(C_acf, x, lag.max, type == "correlation")
>    lag <- outer(0:lag.max, lag/x.freq)
>    acf.out <- structure(list(acf = acf, type = type, n.used = sampleT,
>        lag = lag, series = series, snames = colnames(x)), class = "acf")
>    if (plot) {
>        plot.acf(acf.out, ...)
>        invisible(acf.out)
>    }
>    else acf.out
>}
>
>
>
>I couldn't get:
>
>array(.C(C_acf, as.double(x), sampleT, nser, lag.max, 
>        as.integer(type == "correlation"), acf = double((lag.max + 
>            1L) * nser * nser), NAOK = TRUE)$acf, c(lag.max + 
>        1L, nser, nser))
>
>
>________________________________
>
>From: Cathy Lee Gierke <leegi001 at umn.edu>
>To: arun <smartpink111 at yahoo.com>
>Sent: Tuesday, July 30, 2013 4:49 PM
>
>Subject: Re: [R] acf and ccf
>
>
>
>
>Thank you.  Yes, I supposed that does give you the function.  However, most of the meaningful code is inside another compiled function:
>
> acf <- array(.C(C_acf, as.double(x), sampleT, nser, lag.max, 
>        as.integer(type == "correlation"), acf = double((lag.max + 
>            1L) * nser * nser), NAOK = TRUE)$acf, c(lag.max + 
>        1L, nser, nser))
>
>Any idea how to see that?
>
>
>Cathy Lee Gierke
>
>
>On Tue, Jul 30, 2013 at 3:28 PM, arun <smartpink111 at yahoo.com> wrote:
>
>Just type
>>acf
>>ccf
>>on R prompt
>>A.K.
>>
>>
>>
>>
>>
>>
>>----- Original Message -----
>>From: Cathy Lee Gierke <leegi001 at umn.edu>
>>To: r-help at r-project.org; r-core-owner at r-project.org
>>Cc:
>>Sent: Tuesday, July 30, 2013 4:02 PM
>>Subject: [R] acf and ccf
>>
>>Greetings,
>>
>>Is it possible to see the source code for the acf and ccf functions?  I
>>want to understand the exact formula used.
>>
>>It may be in this book, but I am hoping I can find it elsewhere, as the
>>book is quite expensive.
>>Venables, W. N. and Ripley, B. D. (2002) *Modern Applied Statistics with S*.
>>
>>Fourth Edition. Springer-Verlag.
>>
>>
>>Sincere thanks,
>>Cathy Lee Gierke
>>
>>    [[alternative HTML version deleted]]
>>
>>______________________________________________
>>R-help at r-project.org mailing list
>>https://stat.ethz.ch/mailman/listinfo/r-help
>>PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>>and provide commented, minimal, self-contained, reproducible code.
>>
>>
>



More information about the R-help mailing list