티스토리 뷰
두 변수 간의 통계적인 관계 측정 방식으로 사용하는 상관관계 측정으로 피어슨 상관계수, 스피어만 상관계수 등이 있다고 합니다.
피어슨 상관계수는 두 변수 X와 Y가 함께 변하는지와 따로 변하는지의 비율로 계산하는 것으로 가장 많이 사용된다고 합니다.
X와 Y가 완전히 동일하면 +1, 완전히 다르면 0, 반대방향으로 동일하면 -1 값을 가진다고 하네요.
스피어만 상관계수는 자료의 값 대신 순위(랭킹)을 기준으로 상관관계를 계산하는 방식이라고 합니다.
이 값은 -1과 1 사이의 값을 가지는데, 두 변수의 순위가 완전히 일치하면 +1, 완전히 반대면 -1이 된다고 합니다.
스피어만 상관계수와 같이 순위를 기준으로 값을 측정하는 캔달의 타우도 있다고 하네요.
이번에 살펴볼 R 예제는 기온과 기압과 같은 시계열 벡터 x, y에 대해 각 값이 증가하고 감소하는 것에 대한 상관관계를 살펴보는 것입니다.
먼저 코드를 살펴보도록 하죠.
findud는 시계열 벡터 v에 대해 뒤에 값에서 바로 앞의 값을 뺀 값을 계산하고,
그 값이 증가하고 있으면 1, 감소하고 있으면 0을 리턴하는 함수입니다.
연속된 값의 차이를 계산하기 위해 v[-1]으로 맨 앞의 값을 제거한 벡터를 먼저 구하고,
v[-length(v)]으로 맨 뒤의 값을 제거한 벡터를 구한 다음, 두 값을 빼서 계산한 것을 확인할 수 있습니다.
udcorr 함수에서는 상관관계 계수를 정하기 위해서 x 벡터와 y 벡터의 증감이 동일한지 먼저 비교합니다.
증감이 동일하다면 1이 나올 것이고, 다르면 0이 나올 것이므로
그 평균을 구하면 증감이 동일한 상관관계의 비율이 나오게 되는 것이죠.
실제 값을 넣고 테스트를 해 봤습니다.
그런데 책에서는 udcorr 함수를 다음과 같이 계산했습니다.
lapply()함수를 사용한 것이고 결과는 동일하게 나옵니다.
findud를 두번 호출하지 않는 장점이 있어, 코드를 짧고 명확하게 작성하는데 도움이 된다고 하는데요.
저는 첫번째 방식이 보다 직관적이고 읽기 쉬울 것 같다는 생각이 들었습니다.
어쨌든 lapply()를 통해 리스트에 있는 벡터에 대해 동일한 함수를 호출할 수 있다는 점은 기억해 둬야 겠네요.
마지막으로 R은 다양한 고급 함수를 제공하고 있습니다.
연속된 값의 차이를 구해주는 diff() 함수와
현재 값이 양수인지, 0인지, 음수인지에 따라 1, 0, -1을 리턴하는 sign() 함수를 사용할 수도 있다고 합니다.
정말 소스가 간단해 지는군요.. ^^
하지만 코드가 더 읽기 힘들어질 수도 있으므로 개인적으로는 첫번째 방식을 가장 추천합니다.
미니의 R 주요 강좌...
R의 lapply, sapply, vapply를 이해하자~
'Cloud&BigData > R' 카테고리의 다른 글
R 예제: 데이터 세트에서 관계 확인하기 (0) | 2015.02.25 |
---|---|
우분투에서 R 패키지 설치 (0) | 2013.11.07 |
R 예제: 이산적 시계열값 예측하기 (0) | 2013.08.28 |
R 예제: 1이 연속으로 나오는 부분 찾기 (0) | 2013.08.14 |
R 데이터 구조에 대한 정리 (0) | 2013.08.09 |