手动计算ACF

时间:2017-02-26 12:46:59

标签: r time-series

我有以下计算ACF的等式,我不想在r中使用函数ACF,而是手动计算以下数据,然后使用ggplot2绘制结果

data<-rweibull(168,2,3)
time<-seq(from=as.POSIXct("2014-01-01 00:00"),to=as.POSIXct("2014-01-07  23:00"),by="hour")
df<-data.frame(time,data)

enter image description here

其中k是时滞,μ是时间序列的平均值(,Yt = 1,2,... .N)。此处计算ACF的时间序列,考虑到100小时的时滞。在我的最终输出中,我想要一个包含100个值的向量。在等式中,我不知道如何在R中设置方程的Yt + k部分100个时间滞后。任何帮助,将不胜感激。

现在我有了代码,但我不知道如何设置代码以在一个向量中获得100个滞后结果。

x <- data - mean(data)
sum(x[1:99] * x[2:100]) / sum(x^2)# TIME LAG OF 100

1 个答案:

答案 0 :(得分:2)

如果你想要......你可以试试这个......

data<-rweibull(168,2,3)
time<-seq(from=as.POSIXct("2014-01-01 00:00"),to=as.POSIXct("2014-01-07  23:00"),by="hour")
df<-data.frame(time,data)
x <- data - mean(data)

maxLag<-100
acfResults<- data.frame(k=c(1:maxLag), acf=NA, stringsAsFactors = FALSE)


for (k in 1: maxLag) {
  N <-nrow(df)-k
  acf<- sum(x[1:N]*x[(1+k):(N+k)]) / sum(x^2)
  acfResults[k,1] <-k
  acfResults[k,2] <-acf
}