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.