如何从 R 中的互相关函数计算 p 值

How to calculate p-values from cross-correlation function in R

我使用 R 中的 ccf() 计算了两个时间序列的互相关。我知道如何得出置信限度:

ccf1 <- ccf(x=x,y=y,lag.max=5,na.action=na.pass, plot=F)
upperCI <- qnorm((1+0.95)/2)/sqrt(ccf1$n.used)
lowerCI <- -qnorm((1+0.95)/2)/sqrt(ccf1$n.used)

但我真正需要的是最大相关的p值。

ind.max <- which(abs(ccf1$acf[1:11])==max(abs(ccf1$acf[1:11])))
max.cor <- ccf1$acf[ind.max]
lag.opt <- ccf1$lag[ind.max] 

如何计算这个 p 值?我到处搜索,但找不到好的答案。

获取 p 值很简单。

在相关为 0 的零假设下,它服从正态分布:

Z ~ N(0, 1/sqrt(ccf1$n.used))

因此,对于您观察到的最大相关性 max.cor,其 p 值就是概率 Pr(Z > |max.cor|),可以通过以下方式计算:

2 * (1 - pnorm(abs(max.cor), mean = 0, sd = 1/sqrt(ccf1$n.used)))

跟进

Is it really that simple? The ccf is computing many correlations at once!

你是说 ccf 是在计算不同滞后的相关性?好吧,如果你有大量的观测值 N,ACF 在每个滞后的标准差是相同的:1/sqrt(N)。这就是置信区间为两条水平线的原因。