2016-11-24 9 views
1

R: filtering data and calculating correlation 질문의 대답을 연장하려고합니다.R : 그룹 별 피어슨 상관 관계 및 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 주위를 읽고, 당신은 귀하의 질문에 링크 된 대답은 cor(cbind(a, b))과 비슷한 일을하고있다

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

사이를의 차이를 비교한다.


재현 예를

R의 airquality 데이터 세트는 Humidity 열이없는, 그래서 테스트를 위해 Wind를 사용합니다 : names(x)주는 곳

## 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 

우리는, 명명 된 벡터를 얻을 수 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