在ggplot2中绘制ACF时添加置信区间

3
我打算为模拟时间序列构建自定义的ACFPACF图。
ts <- arima.sim(n=5300,list(order=c(2,0,1), ar=c(0.4,0.3), ma=-0.2))

以下是我编写的代码,通过ggplot2生成图表:

library(gridExtra)    
theme_setting <- theme(
  panel.background = element_blank(),
  panel.grid.major.y = element_line(color="grey90", size=0.5),
  panel.grid.major.x = element_blank(),
  panel.border = element_rect(fill=NA, color="grey20"),
  axis.text = element_text(family="Times"),
  axis.title = element_text(family="Times"),
  plot.title = element_text(size=10, hjust=0.5, family="Times"))

acf_ver_conf <- acf(ts, plot=FALSE)$acf %>% 
  as_tibble() %>% mutate(lags = 1:n()) %>% 
  ggplot(aes(x=lags, y = V1)) + scale_x_continuous(breaks=seq(0,41,4)) +
  labs(y="Autocorrelations", x="Lag", title= "Time Series, ACF") +
  geom_segment(aes(xend=lags, yend=0)) +geom_point() + theme_setting

pacf_ver_conf <- pacf(ts, main=NULL,plot=FALSE)$acf %>% 
  as_tibble() %>% mutate(lags = 1:n()) %>%
  ggplot(aes(x=lags, y = V1)) + 
  geom_segment(aes(xend=lags, yend=0)) +geom_point() + theme_setting + 
  scale_x_continuous(breaks=seq(0,41,4))+ 
  labs(y="Partial Autocorrelations", x="Lag", title= "Time Series, PACF")

grid.arrange(acf_ver_conf, pacf_ver_conf, ncol=2)

自相关和偏自相关图示例

虽然这正是我想要的,但我不确定如何在acf(ts)pacf(ts)中生成置信区间:

ACF TS

所以,我的问题有两个部分:

  • 如何在R中从统计上推导出自相关函数和偏自相关函数的上下置信区间?
  • 您将如何将其绘制到第一张图上? 我正在考虑geom_ribbon,但非常感谢任何其他建议!

对于第二部分,您可以使用 geom_hlinegeom_rect - yeedle
1个回答

3

这个可能有效(置信区间的公式来自于这里https://stats.stackexchange.com/questions/211628/how-is-the-confidence-interval-calculated-for-the-acf-function,可能需要微调):

ts.acf <- acf(ts, plot=TRUE)

enter image description here

alpha <- 0.95
conf.lims <- c(-1,1)*qnorm((1 + alpha)/2)/sqrt(ts.acf$n.used)

ts.acf$acf %>% 
  as_tibble() %>% mutate(lags = 1:n()) %>% 
  ggplot(aes(x=lags, y = V1)) + scale_x_continuous(breaks=seq(0,41,4)) +
  geom_hline(yintercept=conf.lims, lty=2, col='blue') +
  labs(y="Autocorrelations", x="Lag", title= "Time Series, ACF") +
  geom_segment(aes(xend=lags, yend=0)) +geom_point() + theme_setting

enter image description here

ts.pacf <- pacf(ts, main=NULL,plot=TRUE)

enter image description here

alpha <- 0.95
conf.lims <- c(-1,1)*qnorm((1 + alpha)/2)/sqrt(ts.pacf$n.used)

ts.pacf$acf %>% 
  as_tibble() %>% mutate(lags = 1:n()) %>%
  ggplot(aes(x=lags, y = V1)) + 
  geom_segment(aes(xend=lags, yend=0)) +geom_point() + theme_setting + 
  scale_x_continuous(breaks=seq(0,41,4))+ 
  geom_hline(yintercept=conf.lims, lty=2, col='blue') +
  labs(y="Partial Autocorrelations", x="Lag", title= "Time Series, PACF")

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接