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

str*_*Bus 2 r time-series cross-correlation p-value

我使用 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)
Run Code Online (Sandbox Code Playgroud)

但我真正需要的是最大相关性的 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] 
Run Code Online (Sandbox Code Playgroud)

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

李哲源*_*李哲源 5

获取 p 值很简单。

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

Z ~ N(0, 1/sqrt(ccf1$n.used))
Run Code Online (Sandbox Code Playgroud)

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

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

跟进

真的有那么简单吗?它ccf同时计算许多相关性!

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