Я делаю очень грязную версию функции автокорреляции в 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
Любая помощь с благодарностью!