2017-04-07 5 views
1

私は、指定された範囲内の2つのデータリスト間で最良の相関(すなわち、最高r 2乗値)を見出そうとしています対応する「y」値を持つ)。基本的に私はデータの線形範囲を探しています。ここでデータの2つのベクトルの間に最良の相関関係を見つける

#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を与えるように設定している(これは私がこれまで持っているものです)値に対応する。今は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

すでにループを使用しています。範囲内の2番目の値にネストループを使用しないのはなぜですか? – jwells

+0

私はそれが解決策だと思っていますが、私はコードを動作させるように見えません。私はRにはかなり新しいです、あなたは私にそれがどのように見えるかの考えを与えてもらえますか? – Dorton

答えて

0

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

+0

さて、ここで問題となるのは、開始と終了を定義する方法です。上記のコードでは、cor(cor(x [i:(i + 5)]、y [i:(i + 5)] 'を使用して、1 - 6、2 - 7、3 - 私は最初のループが1 - 2、1 - 3、1 - 4などで循環することを望んでいます。そして、2番目のループで、2 - 4,2 - 5,2 - 6などを循環させたい...そして3 - 6、3 - 7、3 - 8など...私は '' seq(1、length(x):length(x)) 'を使うことはできません。エラー "数値式に##要素があります:最初に使われたものだけです" - 間違った方法でこれをやろうとしていますか? 'apply'を使う方法はありますか? – Dorton

関連する問題