2017-04-07 89 views
1

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

#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”数据范围内的数据框,以及COR( )值对应于'x'数据的范围。现在,我使用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.... 

任何意见是值得欢迎的!

+0

您已经在使用循环,为什么不对范围中的第二个值使用嵌套循环? – jwells

+0

我觉得这就是解决方案,但我似乎无法让代码工作。我对R很新,你能介绍一下它的外观吗? – Dorton

回答

0

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

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

+0

好的,现在的问题是如何定义所需的开始和结束。在上面的代码中,我使用了cor(cor(x [i:(i + 5)],y [i:(i + 5)]',给我1 - 6,2 - 7,3 - 8。我想要的是第一个循环通过1 - 2,1 - 3,1 - 4等循环...然后在第二个循环中,我想要循环2 - 4,2 - 5,2 - 6等...然后3 - 6,3 - 7,3 - 8等...我不能使用[for(j,在seq(1,length(x):length(x))'因为我得到错误“数值表达式有##元素:只有第一次使用” - 我是否试图以错误的方式执行此操作?有没有办法使用'apply'?谢谢!@jwells – Dorton

相关问题