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

Я делаю очень грязную версию функции автокорреляции в R.

У меня есть цикл, который работает до заданного максимального лага, а затем возвращает все корреляции в виде матрицы, как acf ().

Идея состоит в том, чтобы скопировать выходные данные функции acf (), как показано:

Autocorrelations of series ‘acfData’, by lag

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

На данный момент у меня есть ввод данных, указанный максимальный лаги затем код работает над диапазоном, сдвигая фрейм данных обратно на требуемую величину, а затем выполняя вычисления ковариации и стандартного отклонения по необходимому диапазону матриц данных.Это повторяется в диапазоне задержек, а затем добавляется в матрицы, как показано, я также включил функцию cor () с фреймами данных, созданными для тестирования.

Моя проблема в том, что код возвращает правильное значение дляпервый цикл или слайд, а затем возвращает немного неправильные значения с тех пор.

myAcf <- function(dat, lg){

  dataF <- data.frame("data" = dat)
  names(dataF)[1] <- "acfData"
  lagMat <- c()
  testMat <- c()
  for(i in 0:lg){
    dataLag <- slide(dataF, "acfData", slideBy = -i)

    covacf <- cov(dataLag[(1+i):nrow(dataLag[1]), 1], dataLag[(1+i):nrow(dataLag[1]), 2])
    sd1 <- sd(dataLag[(1+i):nrow(dataLag[1]), 1])
    sd2 <- sd(dataLag[(1+i):nrow(dataLag[1]), 2])

    corrCalc <- covacf/(sd1 * sd2)
    lagMat <- c(lagMat, corrCalc)

    a <- cor(dataLag[(1+i):nrow(dataLag[1]), 1], dataLag[(1+i):nrow(dataLag[1]), 2])
    testMat <- c(testMat, a)
  }
  plot(lagMat)
  return(list(lagMat, testMat))
  }

Мой код затем возвращает те же данные, что и вход функции acf ():

[[1]]
 [1]  1.00000000 -0.03786539  0.27700596  0.30197418  0.31009956
 [6]  0.37123797 -0.19520518  0.44399863  0.05684766  0.02063488
[11] -0.03724332

[[2]]
 [1]  1.00000000 -0.03842146  0.27502462  0.29292583  0.35052131
 [6]  0.40931426 -0.23637159  0.52320559  0.07270497  0.02555461
[11] -0.04524035

Любая помощь с благодарностью!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...