You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 18:10:21