如何从ccf提取置信线并添加至ggplot2绘图中?
在ggplot2互相关图中添加显著性水平虚线
示例数据与基础绘图
首先是示例数据和原生ccf函数的绘图:
# 修正示例数据(原写法runif(61:120)不规范,改为runif(60)保证数据框列数一致) big = runif(60); mangum = runif(60) df = data.frame(big, mangum)
用原生函数绘制的互相关图会自动显示两条显著性虚线:
ccf(df$big, df$mangum) ## 可见两条水平虚线
需求与现有代码
你希望在自己的ggplot2绘图中添加这两条判断相关性是否显著的水平虚线,现有ggplot2代码如下:
df_x <- eval(substitute(big), df) df_y <- eval(substitute(mangum), df) ccf.object <- ccf(df_x, df_y, plot = FALSE) output_table <- cbind(lag = ccf.object$lag, x.corr = ccf.object$acf) %>% as_tibble() %>% mutate(cat = ifelse(x.corr > 0, "green", "red")) output_table %>% ggplot(aes(x = lag, y = x.corr)) + geom_bar(stat = "identity", aes(fill = cat))
解决方案:添加显著性虚线
要添加这两条虚线,核心是计算95%置信水平的临界值,公式为 $\pm 1.96/\sqrt{n}$($n$取两个序列中较短的长度)。修改后的代码如下:
library(tidyverse) # 示例数据 big = runif(60); mangum = runif(60) df = data.frame(big, mangum) df_x <- eval(substitute(big), df) df_y <- eval(substitute(mangum), df) ccf.object <- ccf(df_x, df_y, plot = FALSE) # 计算95%置信临界值 n <- min(length(df_x), length(df_y)) crit_val <- 1.96 / sqrt(n) output_table <- cbind(lag = ccf.object$lag, x.corr = ccf.object$acf) %>% as_tibble() %>% mutate(cat = ifelse(x.corr > 0, "green", "red")) # 绘制带显著性虚线的图 output_table %>% ggplot(aes(x = lag, y = x.corr)) + geom_bar(stat = "identity", aes(fill = cat)) + # 添加两条水平虚线 geom_hline(yintercept = c(crit_val, -crit_val), linetype = "dashed", color = "darkgray")
说明
- 默认的95%置信水平对应临界值系数1.96,如果需要99%置信水平,替换为2.576即可。
geom_hline的linetype = "dashed"和color = "darkgray"参数可以还原原生ccf图的虚线样式,你也可以根据需求调整颜色和线型。
内容的提问来源于stack exchange,提问作者bic ton
相关产品推荐
相关产品推荐

