【问题标题】:Calculate ACF manually手动计算 ACF
【发布时间】:2017-07-17 01:26:08
【问题描述】:

我有以下计算 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)

其中 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

【问题讨论】:

  • 为什么要手动操作?到目前为止,您尝试了什么?
  • 对函数进行一些修改,然后比较结果。用不同的步骤设置时间延迟 Yt+k。
  • 首先您可以查看dplyr 包中提供的lag 函数。您将(可能)必须循环说 1:100 的滞后大小
  • 你检查过acf函数的源代码吗?

标签: r time-series


【解决方案1】:

如果你愿意,你可以试试这个......

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
}

【讨论】:

  • 感谢您的努力,但不清楚如何在 k 上存储 acf
  • 以上回复已根据您的评论更新。 (但是一旦你完成了你的测试,你会非常希望看到你使用上面 cmets 中引用的现有函数。
  • 感谢您的努力
猜你喜欢
  • 2014-07-17
  • 2018-12-21
  • 2015-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-26
  • 2021-04-05
  • 1970-01-01
相关资源
最近更新 更多