Formel für die Autokorrelation in R vs. Excel

13

Ich versuche herauszufinden, wie R die Lag-K-Autokorrelation berechnet (anscheinend ist es dieselbe Formel, die von Minitab und SAS verwendet wird), damit ich sie mit der CORREL-Funktion von Excel vergleichen kann, die auf die Serie und ihre k-lagged-Version angewendet wird. R und Excel (mit CORREL) ergeben leicht unterschiedliche Autokorrelationswerte.

Mich würde auch interessieren, ob eine Berechnung korrekter ist als die andere.

Galit Shmueli
quelle
RDie Formel von wird unter stats.stackexchange.com/questions/81754/… weiter analysiert und erläutert .
Whuber

Antworten:

17

Die genaue Gleichung findet sich in: Venables, WN und Ripley, BD (2002) Modern Applied Statistics with S. Fourth Edition. Springer-Verlag. Ich gebe Ihnen ein Beispiel:

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

Und so weiter (zB res[1:47]und res[4:50]für Lag 3).

Wolfgang
quelle
Danke Wolfgang! Genau das habe ich gesucht. Jetzt kann ich versuchen, es in Excel zu replizieren (für meine Schüler, die nur Excel verwenden).
Galit Shmueli
11

Die naive Methode zur Berechnung der Autokorrelation (und möglicherweise der von Excel verwendeten) besteht darin, 2 Kopien des Vektors zu erstellen und dann die ersten n Elemente aus der ersten und die letzten n Elemente aus der zweiten Kopie zu entfernen (wobei n die Verzögerung ist, die Sie haben rechnen ab). Übergeben Sie dann diese beiden Vektoren an die Funktion, um die Korrelation zu berechnen. Diese Methode ist in Ordnung und gibt eine vernünftige Antwort, ignoriert jedoch die Tatsache, dass die beiden verglichenen Vektoren tatsächlich ein Maß für dasselbe sind.

Die verbesserte Version (wie von Wolfgang gezeigt) ähnelt der regulären Korrelation, verwendet jedoch den gesamten Vektor zur Berechnung des Mittelwerts und der Varianz.

Greg Snow
quelle
3
Der andere Unterschied ist der Faktor 1 / n anstelle von 1 / (nk), wobei n die Länge der Reihe und k die Anzahl der Verzögerungen ist. Dies soll sicherstellen, dass die Autokorrelationsmatrix positiv definit ist.
Rob Hyndman
1
@Rob: Ich glaube, dass die CORREL-Formel von Excel n (und nicht nk) verwendet. Beispielsweise erhalten Sie für Lag-1-ACF dasselbe Ergebnis (unter Verwendung der Wolfgang-Notation), wenn Sie COVAR (res [1:49], res [2:50]) / (STDEVP (res [1:49]) * STDEVP verwenden (res [2:50])) und die Funktionen COVAR und STDEVP sind "Populations" -Statistiken.
Galit Shmueli
@Galit. Selbst unter Verwendung von COVAR und STDEVP wäre der Nenner in Ihrem Code 49, aber die bevorzugte Definition der Autokorrelation verwendet 50.
Rob Hyndman
1
Der Punkt 1 / n vs 1 / (nk) ist zusätzlich zu den anderen obigen Punkten zum Verständnis gut. Bei praktischen / beobachteten Zahlen spielt es jedoch keine Rolle, solange sie konsistent sind, da dieser Begriff sowohl im Zähler als auch im Nenner angezeigt wird, den er aufhebt. Sie könnten ein Problem bekommen, wenn im Zähler und Nenner unterschiedliche Brüche verwendet würden.
Greg Snow