找到两个数据向量之间的最佳相关性



我试图在指定范围内找到两个数据列表之间的最佳相关性(即最高的r平方值((即找到与其相应的"y"值具有最佳相关性的"x"值的范围(。基本上,我正在寻找数据中的线性范围。这是我到目前为止所拥有的:

 #Example data - actually have a much more complicated data set
    x <- c(1,2,3,4,5,6,7,8,9)
    y <- c(0.25,1.5,3,4,5,6,6.5,7,7.5)
    data.range <- 0 #create a new variable which will contain the 
    r.sq <- 0
    for (i in 1:length(x)) {
      r.sq[i] <- round(cor(x[i:(i+5)], y[i:(i+5)],4)
      data.range[i] <- paste(x[i], x[i+5], sep = " - ")
      output <- data.frame(na.omit(cbind(data.range, r.sq)))
    }
#Example read out
head(output)
  data.range    r.sq
  1 - 6         0.9963
  2 - 7         0.9906
  3 - 8         0.9885
  4 - 9         0.9839
在这里,我设置了输出,为我提供了一个数据帧,其中包含与关联的"y"相关的"x"数据范围

,以及与该"x"数据范围对应的 cor(( 值。现在,我使用 5 个点(因此是 i+5(预测"x"和"y"之间的相关性,但最终我不想定义"5",因为线性范围可能跨越 6 或 8 个点。因此,我想对"x"和"y"进行所有可能的相关性,并生成具有相应cor((值(r.sq(的数据范围(data.range(列表。

data.range     r.sq        
1 - 4          0.9999
1 - 5          0.9808
1 - 6          0.9805
1 - 7          etc...
1 - 8
1 - 9
2 - 5
2 - 6
2 - 7
2 - 8
etc....

欢迎任何建议!

当然。您有一个从 1 到 length(x)i循环。所以:

for (i in 1:length(x)) {
    for (j in desired_start:desired_finish) {
        r.sq[i] <- cor(x[i:j], y[i:j], n)

剩下的你就明白了。还有更多方法可以做到这一点,但如果你是新手,这是一个非常好的开始,你似乎对循环有很好的掌握。这将首先遍历i,并捕获每个j的每个可能值i

最新更新