如何计算多个系列的 ACF 并一次绘制它们?

How to calculate ACF for multiple series and plot them all at once?

我需要进行 AR 测试并为许多系列绘制 ​​acf。我可以一个一个做,

library(dplyr)
library(feasts)
library(tsibble)
data1 <- rnorm(70, 5, 2)
data2 <- rnorm(70, 3, 1)
data3 <- rnorm(70, 8, 3)
MONTH <- seq(as.Date("2010-01-01"), by = "day", length.out = 70)
tstable <- data.frame(MONTH, data1,data2,data3)
tstable%>%as_tsibble(index = MONTH)%>%ACF(data1,lag_max = 7)%>%autoplot()
tstable%>%as_tsibble(index = MONTH)%>%ACF(data2,lag_max = 7)%>%autoplot()
tstable%>%as_tsibble(index = MONTH)%>%ACF(data3,lag_max = 7)%>%autoplot()

这是太多的重复性工作。有没有办法同时进行 acf 测试和绘制系列?它们是否在同一张图上并不重要。但是,如果可以标记不同的系列,那就太好了。 谢谢

以下仅使用基数 R:

1) acf 可以处理多个系列:

d <- data.frame(data1, data2, data3)
acf(d, lag.max = 7)

(图后续)

2) 使用 (1) 中的 d,如果我们不想要 ccf,我们可以像这样只生成 (1) 的对角线:

opar <- par(mfrow = c(ncol(d), 1))
for(nm in names(d)) acf(d[[nm]], lag.max = 7, main = nm)
par(opar)

这个怎么样:

plotACF <- function(data, vars, time_index, lag_max=7, rows=NULL){
  if(is.null(rows))rows <- ceiling(sqrt(length(vars)))
  glist <- list()
  for(i in 1:length(vars)){
    glist[[i]] <- data%>%
      as_tsibble(index = .data[[time_index]])%>%
      ACF(.data[[vars[i]]],lag_max = lag_max)%>%
      autoplot() + ggtitle(vars[i])
  }
  glist[["nrow"]] = rows
  do.call(cowplot::plot_grid, glist)
}

plotACF(tstable, c("data1", "data2", "data3"), "MONTH")

您用来计算和绘制 ACF 的 {feasts} 包适用于多个时间序列。在 {tsibble} 包中,多个时间序列应该以长格式存储,并使用键变量标识。您可以通过在此处旋转更长的时间来正确格式化数据:

library(dplyr)
library(feasts)
library(tsibble)
data1 <- rnorm(70, 5, 2)
data2 <- rnorm(70, 3, 1)
data3 <- rnorm(70, 8, 3)
MONTH <- seq(as.Date("2010-01-01"), by = "day", length.out = 70)
tstable <- data.frame(MONTH, data1,data2,data3)
tstable <- tstable %>%
  as_tsibble(index = MONTH) %>% 
  tidyr::pivot_longer(starts_with("data")) 
tstable
#> # A tsibble: 210 x 3 [1D]
#> # Key:       name [3]
#>    MONTH      name  value
#>    <date>     <chr> <dbl>
#>  1 2010-01-01 data1  5.15
#>  2 2010-01-01 data2  1.89
#>  3 2010-01-01 data3 10.9 
#>  4 2010-01-02 data1  3.31
#>  5 2010-01-02 data2  5.90
#>  6 2010-01-02 data3  3.21
#>  7 2010-01-03 data1  4.58
#>  8 2010-01-03 data2  2.49
#>  9 2010-01-03 data3  1.58
#> 10 2010-01-04 data1  4.47
#> # … with 200 more rows

reprex package (v0.3.0)

于 2021 年 3 月 13 日创建

请注意“键:”行现在如何提到数据集中有 [3] 个系列。


一旦你的 tsibble 结构正确,你就可以估计和绘制 ACF:

tstable %>% 
  ACF(lag_max = 7)
#> Response variable not specified, automatically selected `var = value`
#> # A tsibble: 21 x 3 [1D]
#> # Key:       name [3]
#>    name    lag     acf
#>    <chr> <lag>   <dbl>
#>  1 data1    1D -0.192 
#>  2 data1    2D -0.330 
#>  3 data1    3D  0.0213
#>  4 data1    4D  0.0786
#>  5 data1    5D  0.253 
#>  6 data1    6D -0.253 
#>  7 data1    7D  0.0152
#>  8 data2    1D -0.0116
#>  9 data2    2D  0.0959
#> 10 data2    3D -0.145 
#> # … with 11 more rows

tstable %>% 
  ACF(lag_max = 7) %>% 
  autoplot()
#> Response variable not specified, automatically selected `var = value`

reprex package (v0.3.0)

于 2021 年 3 月 13 日创建