与滑动窗口

时间:2018-03-12 17:26:09

标签: r correlation sliding-window

我想用滑动窗口(窗口= 1)计算两个向量(每个四个元素)之间的皮尔逊相关性并保持最佳结果:

list1 <- read.table(text= "20 
                           34
                           89
                           35")

list2 <- read.table(text= "22
                          99 
                          313 
                          13 
                          71 
                          200")

比较将是一个循环:

cor(x=c(20,34,89,35),y=c(22,99,313,13), method = "pearson")  
cor(x=c(20,34,89,35),y=c(99,313,13,71), method = "pearson")
cor(x=c(20,34,89,35),y=c(313,13,71,200), method = "pearson")

结果将包含得分和给出最高相关性得分的向量。在这种情况下,它将是:x=c(20,34,89,35) and y=c(22,99,313,13)0.9588095

2 个答案:

答案 0 :(得分:1)

使用y计算相关性,找到最大值的索引并从中导出x及其与library(zoo) x <- list1$V1 w <- length(x) ix <- which.max(rollapply(list2$V1, w, cor, x)) y <- list2$V1[seq(ix, length = w)] y ## [1] 22 99 313 13 cor(x, y) ## [1] 0.9588095 的相关性。

rollapply

以上的变化是从r <- rollapply(list2$V1, length(x), function(y) c(cor(x, y), y)) ix <- which.max(r[, 1]) r[ix, 1] ## [1] 0.9588095 r[ix, -1] ## [1] 22 99 313 13

返回相关性和y向量
{{1}}

答案 1 :(得分:0)

R基础解决方案

out <- list(NULL)
j <- 1
ind <- 0
while(ind[length(ind)]<length(list2$V1)){ 
  ind <- j:(j+3);
  out[[j]] <- list(Vector1=list1$V1, 
                Vector2=list2$V1[ind],
                Cor=cor(list1$V1, list2$V1[ind]));
  out
  j <- j+1
}

out[[which.max(unlist(sapply(out, "[", "Cor")))]]

产生:

$Vector1
[1] 20 34 89 35

$Vector2
[1]  22  99 313  13

$Cor
[1] 0.9588095