Формула для автокореляції в R проти Excel


13

Я намагаюся з'ясувати, як R обчислює автокореляцію lag-k (мабуть, це та сама формула, яку застосовують Minitab та SAS), так що я можу порівняти її з використанням функції CORREL Excel, застосованої до серії та її k-відсталої версії. R і Excel (за допомогою CORREL) дають дещо інші значення автокореляції.

Мені також було б цікаво дізнатись, чи є одне обчислення більш правильним, ніж інше.


RДалі формула формули аналізується та пояснюється на сайті stats.stackexchange.com/questions/81754/… .
whuber

Відповіді:


17

Точне рівняння наведено у: Venables, WN and Ripley, BD (2002) Сучасна прикладна статистика з S. Fourth Edition. Спрингер-Верлаг. Я надам вам приклад:

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

І так далі (наприклад, res[1:47]і res[4:50]для відставання 3).


Дякую Вольфганг! Це саме те, що я шукав. Тепер я можу спробувати і повторити його в Excel (для моїх студентів, які використовують лише Excel).
Галіт Шмуелі

11

Наївний спосіб обчислити автоматичну кореляцію (і, можливо, те, що використовує Excel) - створити 2 копії вектора, потім видалити 1-й n елементів з першої копії та останні n елементів з другої копії (де n - відставання, яке ви обчислюються з). Потім передайте ці 2 вектори функції, щоб обчислити кореляцію. Цей метод є нормальним і дасть розумну відповідь, але він ігнорує той факт, що два вектори, які порівнюються, насправді є мірою того самого.

Удосконалена версія (як показав Вольфганг) є функцією, аналогічною звичайній кореляції, за винятком того, що вона використовує весь вектор для обчислення середнього та дисперсії.


3
Інша відмінність - коефіцієнт 1 / n замість 1 / (nk), де n - довжина ряду, а k - кількість лагів. Це потрібно для того, щоб матриця автокореляції була позитивно визначеною.
Роб Хайндман

1
@Rob: Я вважаю, що формула CORREL Excel використовує n (а не nk). Наприклад, для lag-1 ACF ви отримуєте такий же результат (використовуючи позначення Вольфганга), якщо ви використовуєте COVAR (res [1:49], res [2:50]) / (STDEVP (res [1:49]) * STDEVP (res [2:50])), а функції COVAR і STDEVP - це "популяційна" статистика.
Галіт Шмуелі

@Galit. Навіть використовуючи COVAR і STDEVP, знаменником у вашому коді буде 49, але кращим визначенням автокореляції буде використання 50.
Rob Hyndman

1
Точка 1 / n проти 1 / (nk) корисна для розуміння, крім інших вищезазначених пунктів. Але для практичних / спостережуваних чисел це не матиме значення, поки воно є послідовним, оскільки цей термін відображається як у чисельнику, так і в знаменнику, він скасує. Ви можете отримати проблему, якщо в чисельнику та знаменнику були використані різні дроби.
Грег Сніг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.