Formula untuk autokorelasi di R vs. Excel

13

Saya mencoba mencari tahu bagaimana R menghitung autokorelasi lag-k (tampaknya, itu adalah rumus yang sama yang digunakan oleh Minitab dan SAS), sehingga saya dapat membandingkannya dengan menggunakan fungsi CORREL Excel yang diterapkan pada seri dan versi k-lagged-nya. R dan Excel (menggunakan CORREL) memberikan nilai autokorelasi yang sedikit berbeda.

Saya juga tertarik untuk mencari tahu apakah satu perhitungan lebih benar daripada yang lain.

Galit Shmueli
sumber
RFormula selanjutnya dianalisis dan dijelaskan di stats.stackexchange.com/questions/81754/… .
whuber

Jawaban:

17

Persamaan yang tepat diberikan dalam: Venables, WN dan Ripley, BD (2002) Statistik Terapan Modern dengan S. Fourth Edition. Springer-Verlag. Saya akan memberi Anda sebuah contoh:

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

Dan seterusnya (misalnya, res[1:47]dan res[4:50]untuk lag 3).

Wolfgang
sumber
Terima kasih Wolfgang! Inilah yang saya cari. Sekarang saya dapat mencoba dan mereplikasi di Excel (untuk siswa saya yang hanya menggunakan Excel).
Galit Shmueli
11

Cara naif untuk menghitung korelasi otomatis (dan mungkin apa yang digunakan Excel) adalah membuat 2 salinan vektor, kemudian menghapus elemen n pertama dari salinan pertama dan elemen n terakhir dari salinan kedua (di mana n adalah kelambatan yang Anda gunakan). adalah komputasi dari). Kemudian berikan 2 vektor tersebut ke fungsi untuk menghitung korelasi. Metode ini OK dan akan memberikan jawaban yang masuk akal, tetapi mengabaikan fakta bahwa 2 vektor yang dibandingkan benar-benar merupakan ukuran dari hal yang sama.

Versi yang ditingkatkan (seperti yang ditunjukkan oleh Wolfgang) adalah fungsi yang mirip dengan korelasi reguler, kecuali bahwa ia menggunakan seluruh vektor untuk menghitung mean dan varians.

Greg Snow
sumber
3
Perbedaan lainnya adalah faktor 1 / n bukannya 1 / (nk) di mana n adalah panjang seri dan k jumlah lag. Ini untuk memastikan bahwa matriks autokorelasi pasti positif.
Rob Hyndman
1
@Rob: Saya percaya bahwa rumus CORREL Excel memang menggunakan n (bukan nk). Misalnya, untuk lag-1 ACF Anda mendapatkan hasil yang sama (menggunakan notasi Wolfgang) jika Anda menggunakan COVAR (res [1:49], res [2:50]) / (STDEVP (res [1:49]) * STDEVP (res [2:50])) dan fungsi COVAR dan STDEVP adalah statistik "populasi".
Galit Shmueli
@ Galit. Meskipun menggunakan COVAR dan STDEVP, penyebut dalam kode Anda akan menjadi 49, tetapi definisi autokorelasi yang lebih disukai akan menggunakan 50.
Rob Hyndman
1
Poin 1 / n vs 1 / (nk) bagus untuk dipahami selain poin-poin lain di atas. Tetapi untuk angka praktis / yang diamati itu tidak akan menjadi masalah selama itu konsisten, karena istilah itu muncul baik dalam pembilang dan penyebutnya akan dibatalkan. Anda bisa mendapatkan masalah jika fraksi yang berbeda digunakan dalam pembilang dan penyebut.
Greg Snow