如何计算多个系列的 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 日创建
我需要进行 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 日创建