Создание симметричной автокорреляционной матрицы - PullRequest
0 голосов
/ 20 февраля 2019

Я выполняю процесс автокорреляции для вектора данных временного ряда.Я пытаюсь создать симметричную матрицу, составленную из автокорреляции для данного временного ряда.

Я использую функцию acf(), чтобы проверить мои значения, и она возвращает:

Автокорреляции ряда 'acfData', по лагу

     0      1      2      3      4      5      6      7      8      9     10     11     12     13 
 1.000 -0.038  0.253  0.266  0.250  0.267 -0.182  0.281 -0.013 -0.067 -0.122 -0.115 -0.023 -0.337 

Чтобы получить матрицу, я затем выполняю изменение data.frame для данных, чтобы позволить мне скользить значения по любой указанной задержке:

dataF <- data.frame("data" = acfData)
names(dataF)[1] <- "acfData"
dataLag <- slide(dataF, "acfData", slideBy = -1)

Дляgive:

> head(dataLag)
  acfData acfData-1
1      -7        NA
2       5        -7
3       4         5
4     -17         4
5       6       -17
6     -10         6

Это дает правильную матрицу 2x2, когда я просто выполняю функцию cor():

> cor(na.omit(dataLag))
              acfData   acfData-1
acfData    1.00000000 -0.03842146
acfData-1 -0.03842146  1.00000000

Однако расширение этой матрицы до второй временной задержки приводит к предыдущим значениямменяется.

    dataLag <- cbind(dataLag, slide(dataF, "acfData", slideBy = -2)[2])
> head(dataLag)
      acfData acfData-1 acfData-2
    1      -7        NA        NA
    2       5        -7        NA
    3       4         5        -7
    4     -17         4         5
    5       6       -17         4
    6     -10         6       -17

Повторное выполнение функции cor() приводит к:

> cor(na.omit(dataLag))
              acfData   acfData-1   acfData-2
acfData    1.00000000 -0.03156163  0.27502462
acfData-1 -0.03156163  1.00000000 -0.07361449
acfData-2  0.27502462 -0.07361449  1.00000000

Как вы можете видеть, корреляция данных с запаздыванием на 1 шаг изменилась.Я предполагаю, что это из-за na.omit(), возможно, удаления целых первых двух строк из-за вступления второго лага, дающего два NA с, но я не уверен, как правильно их опустить для вычисления первого лага.

1 Ответ

0 голосов
/ 20 февраля 2019

Как упомянул Бен Болкер в комментариях, простое добавление аргумента 'use' в 'pairwise.complete.obs' дает правильное пропускание NA.

Новое возвращение для функции:

> cor(dataLag, use="pairwise.complete.obs")
              acfData   acfData-1   acfData-2
acfData    1.00000000 -0.03842146  0.27502462
acfData-1 -0.03842146  1.00000000 -0.07361449
acfData-2  0.27502462 -0.07361449  1.00000000
...