R ve Excel'de otokorelasyon formülü


13

R'nin lag-k otokorelasyonunu nasıl hesapladığını anlamaya çalışıyorum (görünüşe göre, Minitab ve SAS tarafından kullanılan formülle aynıdır), böylece seriye uygulanan KORREL işlevini ve k gecikmeli versiyonunu kullanarak karşılaştırabilirim. R ve Excel (CORREL kullanarak) biraz farklı otokorelasyon değerleri verir.

Ayrıca, bir hesaplamanın diğerinden daha doğru olup olmadığını öğrenmek isterim.


Rformülü daha da analiz edilir ve stats.stackexchange.com/questions/81754/… adresinde açıklanır .
whuber

Yanıtlar:


17

Tam denklem şurada verilmiştir: Venables, WN ve Ripley, BD (2002) S. Fourth Edition ile Modern Uygulamalı İstatistik. Springer-Verlag. Size bir örnek vereceğim:

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

Ve böyle devam (örn res[1:47]ve res[4:50]gecikme 3).


Teşekkürler Wolfgang! Tam da aradığım şey buydu. Şimdi bunu Excel'de çoğaltmayı deneyebilirim (yalnızca Excel kullanan öğrencilerim için).
Galit Shmueli

11

Otomatik korelasyonu (ve muhtemelen Excel'in kullandığı) hesaplamanın naif yolu, vektörün 2 kopyasını oluşturmak sonra ilk kopyadaki 1. n öğeyi ve ikinci kopyadaki son n öğeyi (burada n, hesaplanıyor). Sonra korelasyonu hesaplamak için bu 2 vektörü fonksiyona aktarın. Bu yöntem uygundur ve makul bir cevap verecektir, ancak karşılaştırılan 2 vektörün aynı şeyin ölçümleri olduğu gerçeğini göz ardı eder.

Geliştirilmiş sürüm (Wolfgang tarafından gösterildiği gibi), ortalama ve varyansı hesaplamak için tüm vektörü kullanması dışında normal korelasyona benzer bir işlevdir.


3
Diğer fark 1 / (nk) yerine 1 / n faktörüdür, burada n serilerin uzunluğu ve k gecikme sayısıdır. Bu, otokorelasyon matrisinin pozitif tanımlanmış olmasını sağlamak içindir.
Rob Hyndman

1
@Rob: Excel'in CORREL formülünün n (nk yerine) kullandığına inanıyorum. Örneğin, gecikme-1 ACF için COVAR (res [1:49], res [2:50]) / (STDEVP (res [1:49]) * STDEVP kullanıyorsanız aynı sonucu alırsınız (Wolfgang'ın gösterimini kullanarak) * STDEVP (res [2:50])) ve COVAR ve STDEVP işlevleri "nüfus" istatistikleridir.
Galit Shmueli

@Galit. COVAR ve STDEVP kullanıldığında bile, kodunuzdaki payda 49 olur, ancak otokorelasyonun tercih edilen tanımı 50 kullanır.
Rob Hyndman

1
1 / n ve 1 / (nk) noktası, yukarıdaki diğer noktalara ek olarak anlaşılması için iyidir. Ancak pratik / gözlemlenen sayılar için tutarlı olduğu sürece önemli olmayacaktır, çünkü bu terim hem payda hem de paydada görüneceği için iptal edecektir. Payda ve paydada farklı kesirler kullanılmışsa sorun yaşayabilirsiniz.
Greg Snow
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.