Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 查找互相关为最大ccf()的滞后时间_R_Time Series_Correlation - Fatal编程技术网

R 查找互相关为最大ccf()的滞后时间

R 查找互相关为最大ccf()的滞后时间,r,time-series,correlation,R,Time Series,Correlation,我有两个时间序列,我正在使用ccf查找它们之间的互相关。 ccf(ts1、ts2)列出所有时间滞后的互相关。我如何才能在不手动查看数据的情况下找到导致最大相关性的延迟?发布答案 Find_Max_CCF我想我应该重做上面的函数,但是让它找到返回原始相关性(正相关性或负相关性)的绝对最大相关性。我还最大限度地(几乎)消除了滞后的数量 Find_Abs_Max_CCF<- function(a,b) { d <- ccf(a, b, plot = FALSE, lag.max = le

我有两个时间序列,我正在使用
ccf
查找它们之间的互相关。
ccf(ts1、ts2)
列出所有时间滞后的互相关。我如何才能在不手动查看数据的情况下找到导致最大相关性的延迟?

发布答案


Find_Max_CCF我想我应该重做上面的函数,但是让它找到返回原始相关性(正相关性或负相关性)的绝对最大相关性。我还最大限度地(几乎)消除了滞后的数量

Find_Abs_Max_CCF<- function(a,b)
{
 d <- ccf(a, b, plot = FALSE, lag.max = length(a)-5)
 cor = d$acf[,,1]
 abscor = abs(d$acf[,,1])
 lag = d$lag[,,1]
 res = data.frame(cor,lag)
 absres = data.frame(abscor,lag)
 absres_max = res[which.max(absres$abscor),]
 return(absres_max)
}

Find_Abs_Max_CCF我也修改了原始解决方案,以便在函数上循环并输出与索引(x)的字符向量对应的值:


因为3大于4,所以我也尝试过修改此函数,这次是通过实现以下想法:


ccfmax Ok在这里找到了答案,为什么不将其作为答案,并将其归功于R帮助邮件列表中的海报?是的,我会这样做,但我没有足够的信誉点来回答我自己的问题。有了答案后,请重新访问该问题。:)@你也可以把自己的答案标记为正确答案。而且,除了这个链接,我个人认为总结一下答案是什么很好,这样可以节省Stackoverflowers的额外点击。(我已经编辑了你的答案来说明我的意思;如果你想重新编辑它,请不要冒犯:-)为什么在cor=c$acf[,1]和lag中使用两个逗号?你能告诉我为什么在提取acf d$acf[,1]时使用两个逗号吗?谢谢。这是一个三维阵列,正如cor所解释的。
Find_Abs_Max_CCF<- function(a,b)
{
 d <- ccf(a, b, plot = FALSE, lag.max = length(a)-5)
 cor = d$acf[,,1]
 abscor = abs(d$acf[,,1])
 lag = d$lag[,,1]
 res = data.frame(cor,lag)
 absres = data.frame(abscor,lag)
 absres_max = res[which.max(absres$abscor),]
 return(absres_max)
}
abs.max.ccf <- function(x,a,b) {
  d <- ccf(a, b, plot=FALSE, lag.max=length(a)-5)
  cor <- d$acf[,,1]
  abscor <- abs(d$acf[,,1])
  lag <- d$lag[,,1]
  abs.cor.max <- abscor[which.max(abscor)]
  abs.cor.max.lag <- lag[which.max(abscor)]
  return(c(x, abs.cor.max, abs.cor.max.lag))
}
max.ccf <- lapply(colnames(df), function(x) unlist(abs.max.ccf(x, df$y, df[x])))
max.ccf <- data.frame(do.call(rbind, max.ccf))
colnames(max.ccf) <- c('Index','Cor','Lag')
ccfmax <- function(a, b, e=0)
{
 d <- ccf(a, b, plot = FALSE, lag.max = length(a)/2)
 cor = d$acf[,,1]
 abscor = abs(d$acf[,,1])
 lag = d$lag[,,1]
 res = data.frame(cor, lag)
 absres = data.frame(abscor, lag)
 maxcor = max(absres$abscor)
 absres_max = res[which(absres$abscor >= maxcor-maxcor*e &
                        absres$abscor <= maxcor+maxcor*e),]
 return(absres_max)
}
ayy <- jitter(cos((1:360)/5), 100)
bee <- jitter(sin((1:360)/5), 100)

ccfmax(ayy, bee, 0.02)
           cor lag
348  0.9778319  -8
349  0.9670333  -7
363 -0.9650827   7
364 -0.9763180   8