2017-04-07 30 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

相關問題