With acf
we can make ACF plot
in base R
graph.
x <- lh
acf(x)
The following code can be used to get the ACF plot
in ggplot2
.
conf.level <- 0.95
ciline <- qnorm((1 - conf.level)/2)/sqrt(length(x))
bacf <- acf(x, plot = FALSE)
bacfdf <- with(bacf, data.frame(lag, acf))
library(ggplot2)
q <- ggplot(data=bacfdf, mapping=aes(x=lag, y=acf)) +
geom_bar(stat = "identity", position = "identity")
q
Question
How to get lines rather than bars or how to set the width of bars so that they look like lines? Thanks
You're probably better off plotting with line segments via geom_segment()
library(ggplot2)
set.seed(123)
x <- arima.sim(n = 200, model = list(ar = 0.6))
bacf <- acf(x, plot = FALSE)
bacfdf <- with(bacf, data.frame(lag, acf))
q <- ggplot(data = bacfdf, mapping = aes(x = lag, y = acf)) +
geom_hline(aes(yintercept = 0)) +
geom_segment(mapping = aes(xend = lag, yend = 0))
q
How about using geom_errorbar with width=0?
ggplot(data=bacfdf, aes(x=lag, y=acf)) +
geom_errorbar(aes(x=lag, ymax=acf, ymin=0), width=0)
From the forecast package comes a function ggtsdisplay
that plots both ACF and PACF with ggplot
. x
is the residuals from the model fit ( fit$residuals
).
forecast::ggtsdisplay(x,lag.max=30)
From your answers, I synthesized a ggplot ACF / PACF plotting method :
require(zoo)
require(tseries)
require(ggplot2)
require(cowplot)
ts= zoo(data[[2]]) # data[[2]] because my time series data was the second column
# Plot ACP / ACF with IC
# How to compute IC for ACF and PACF :
# https://stats.stackexchange.com/questions/211628/how-is-the-confidence-interval-calculated-for-the-acf-function
ic_alpha= function(alpha, acf_res){
return(qnorm((1 + (1 - alpha))/2)/sqrt(acf_res$n.used))
}
ggplot_acf_pacf= function(res_, lag, label, alpha= 0.05){
df_= with(res_, data.frame(lag, acf))
# IC alpha
lim1= ic_alpha(alpha, res_)
lim0= -lim1
ggplot(data = df_, mapping = aes(x = lag, y = acf)) +
geom_hline(aes(yintercept = 0)) +
geom_segment(mapping = aes(xend = lag, yend = 0)) +
labs(y= label) +
geom_hline(aes(yintercept = lim1), linetype = 2, color = 'blue') +
geom_hline(aes(yintercept = lim0), linetype = 2, color = 'blue')
}
acf_ts= ggplot_acf_pacf(res_= acf(ts, plot= F)
, 20
, label= "ACF")
pacf_ts= ggplot_acf_pacf(res_= pacf(ts, plot= F)
, 20
, label= "PACF")
# Concat our plots
acf_pacf= plot_grid(acf_ts, pacf_ts, ncol = 2, nrow = 1)
acf_pacf
Results:
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.