1

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

任何帮助是极大的赞赏!

4

0 回答 0