Как рассчитать p-значения из функции взаимной корреляции в R

Я рассчитал взаимную корреляцию двух временных рядов, используя ccf() в R. Я знаю, как получить доверительные интервалы как:

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-значение? Я искал высоко и низко, но нигде не могу найти хороший ответ.


person struggleBus    schedule 03.07.2016    source источник


Ответы (1)


Получить 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)))

Последующие действия

Это действительно так просто? ccf вычисляет множество корреляций одновременно!

Вы хотите сказать, что ccf вычисляет корреляции с разной задержкой? Что ж, если у вас есть большое количество наблюдений N, стандартное отклонение АКФ при каждой задержке будет одинаковым: 1/sqrt(N). Именно поэтому доверительный интервал представляет собой две горизонтальные линии.

person Zheyuan Li    schedule 03.07.2016
comment
Это действительно так просто? Я думал, что у меня есть какой-то подвох, потому что ccf вычисляет много корреляций одновременно? - person struggleBus; 03.07.2016