从头开始创建自相关矩阵-R

时间:2019-02-14 17:24:36

标签: r lag autocorrelation

我在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

非常感谢您的帮助!

0 个答案:

没有答案