2016-11-24 106 views
1

我想擴展問題R: filtering data and calculating correlation的答案。R:計算Pearson相關性和組的R平方

爲了獲得一年中每個月的溫度和溼度的相關性(1 = 1月),我們必須每個月都做同樣的事情(12次)。

cor(airquality[airquality$Month == 1, c("Temp", "Humidity")]) 

有沒有辦法自動每個月做?

在我的情況下,我有超過30組(不是幾個月,但物種),我想測試相關性,我只想知道是否有一個更快的方法,而不是一個接一個地做。

謝謝!

回答

1
cor(airquality[airquality$Month == 1, c("Temp", "Humidity")]) 

給你一個2 * 2協方差矩陣,而不是一個數字。我敢打賭,你要爲每個Month單數,所以用

## cor(Temp, Humidity | Month) 
with(airquality, mapply(cor, split(Temp, Month), split(Humidity, Month))) 

,你會得到一個載體。

請仔細閱讀?split?mapply;它們對於「小組」操作非常有用,儘管它們不是唯一的選擇。周圍也?cor閱讀,

之間
a <- rnorm(10) 
b <- rnorm(10) 
cor(a, b) 
cor(cbind(a, b)) 

你在你的問題鏈接的答案是做類似的東西cor(cbind(a, b))比較差。


重複的例子,

airquality數據集R沒有Humidity列,所以我會用Wind來進行測試:

## cor(Temp, Wind | Month) 
x <- with(airquality, mapply(cor, split(Temp, Month), split(Wind, Month))) 

#   5   6   7   8   9 
#-0.3732760 -0.1210353 -0.3052355 -0.5076146 -0.5704701 

我們得到了一個名爲向量,其中names(x)Monthunname(x)給出了相關性。


非常感謝您!它的工作非常完美!我試圖找出如何獲得每個關聯的R^2矢量,但我不能......任何想法?

cor(x, y)是像擬合標準化線性迴歸模型:

coef(lm(scale(y) ~ scale(x) - 1)) ## remember to drop intercept 

R平方在這個簡單的線性迴歸是斜率的只是平方。以前我們有x存儲相關每組,現在R平方只是x^2

+0

非常感謝!它的工作非常完美!我試圖弄清楚如何獲得每種相關性的R^2矢量,但我不能......任何想法? – JSH