我想用滑动窗口(窗口= 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
。
答案 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
:
{{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