Fórmula para la autocorrelación en R vs. Excel

13

Estoy tratando de descubrir cómo R calcula la autocorrelación de lag-k (aparentemente, es la misma fórmula utilizada por Minitab y SAS), para poder compararla con el uso de la función CORREL de Excel aplicada a la serie y su versión k-lag. R y Excel (usando CORREL) dan valores de autocorrelación ligeramente diferentes.

También me interesaría saber si un cálculo es más correcto que el otro.

Galit Shmueli
fuente
RLa fórmula de 'se analiza y explica más a fondo en stats.stackexchange.com/questions/81754/… .
whuber

Respuestas:

17

La ecuación exacta se da en: Venables, WN y Ripley, BD (2002) Modern Applied Statistics con S. Cuarta edición. Springer-Verlag. Te daré un ejemplo:

### simulate some data with AR(1) where rho = .75
xi <- 1:50
yi <- arima.sim(model=list(ar=.75), n=50)

### get residuals
res <- resid(lm(yi ~ xi))

### acf for lags 1 and 2
cor(res[1:49], res[2:50])      ### not quite how this is calculated by R
cor(res[1:48], res[3:50])      ### not quite how this is calculated by R

### how R calculates these
acf(res, lag.max=2, plot=F)

### how this is calculated by R
### note: mean(res) = 0 for this example, so technically not needed here
c0 <- 1/50 * sum( (res[1:50] - mean(res)) * (res[1:50] - mean(res)) ) 
c1 <- 1/50 * sum( (res[1:49] - mean(res)) * (res[2:50] - mean(res)) ) 
c2 <- 1/50 * sum( (res[1:48] - mean(res)) * (res[3:50] - mean(res)) ) 
c1/c0
c2/c0

Y así sucesivamente (por ejemplo, res[1:47]y res[4:50]para el retraso 3).

Wolfgang
fuente
Gracias Wolfgang! Esto es exactamente lo que estaba buscando. Ahora puedo intentarlo y replicarlo en Excel (para mis alumnos que solo usan Excel).
Galit Shmueli
11

La forma ingenua de calcular la correlación automática (y posiblemente lo que usa Excel) es crear 2 copias del vector y luego eliminar los primeros n elementos de la primera copia y los últimos n elementos de la segunda copia (donde n es el retraso que usted están computando desde). Luego pase esos 2 vectores a la función para calcular la correlación. Este método está bien y dará una respuesta razonable, pero ignora el hecho de que los 2 vectores que se comparan son realmente medidas de la misma cosa.

La versión mejorada (como lo muestra Wolfgang) es una función similar a la correlación regular, excepto que usa todo el vector para calcular la media y la varianza.

Greg Snow
fuente
3
La otra diferencia es el factor 1 / n en lugar de 1 / (nk) donde n es la longitud de la serie yk el número de rezagos. Esto es para asegurar que la matriz de autocorrelación sea positiva definida.
Rob Hyndman
1
@Rob: Creo que la fórmula CORREL de Excel usa n (en lugar de nk). Por ejemplo, para el lag-1 ACF obtendrá el mismo resultado (usando la notación de Wolfgang) si usa COVAR (res [1:49], res [2:50]) / (STDEVP (res [1:49]) * STDEVP (res [2:50])) y las funciones COVAR y STDEVP son estadísticas de "población".
Galit Shmueli
@Galit. Incluso usando COVAR y STDEVP, el denominador en su código sería 49, pero la definición preferida de autocorrelación usará 50.
Rob Hyndman
1
El punto 1 / n vs 1 / (nk) es bueno para comprender, además de los otros puntos anteriores. Pero para los números prácticos / observados no va a importar mientras sea consistente, ya que ese término aparece tanto en el numerador como en el denominador, se cancelará. Podría obtener un problema si se usaran diferentes fracciones en el numerador y el denominador.
Greg Snow