2019. 1. 18. 06:17ㆍR/R데이터분석기초
R을 이용한 상관계수 및 산점도 그래프 그리기
연봉 데이터를이용하여 상관계수 및 산점도 그래프에 대한 내용을 정리해보자.
경력과 연봉의 데이터셋
경력 |
연봉 |
0 |
1700 |
1 |
2000 |
2 |
2400 |
3 |
2900 |
4 |
3500 |
5 |
4100 |
6 |
4500 |
7 |
5100 |
8. | 5700 |
10 | 6500 |
12 | 7500 |
14 | 7800 |
15 | 8000 |
산점도 그래프
# 연봉 예측데이터 불러오기
data = read.csv('data/salary.csv', fileEncoding='UTF-8')
# 경력 기준 정렬
data[order(data$experience),]
# 산점도와 보조선 그리기
plot(data, pch=16, xlab="Experience", ylab="Salary", col="dodgerblue")
# 평균선 그리기
abline(v=mean(data$experience), lty=2)
abline(h=mean(data$salary),lty=2)
실행결과 아래와 같은 산점도 그래프가 만들어진다.
▩ 각 사분면 관측치의 특성
사분면 |
첫번째변수 |
두번째변 수 |
1 |
평균이상 |
평균이상 |
2 |
평균이상 |
평균이하 |
3 |
평균이하 |
평균이하 |
4 |
평균이상 |
평균이하 |
- 위의 데이터는 2,4사분면 데이터가 없지만 데이터가 있는경우는 위의 특성을 나타낸다.
공분산을 활용하여 변수 관계 확인하기
공분산(covariance)
- 0에 가까울수록 관련이 없음
- 큰 양수가 나올 수록 두 변수가 양의 상관을 가짐
- 큰 음수가 나올 수록 두 변수가 음의 상관을 가짐
▩ 공분산의 계산 예제
경력(x)과 연봉(y)의 공분산
경력 |
연봉 |
|
|
X(곱) |
0 |
1700 |
-7 |
-3046 |
21322 |
1 |
2000 |
-6 |
-2746 |
16476 |
2 |
2400 |
-5 |
-2346 |
11730 |
3 |
2900 |
-4 |
-1846 |
7384 |
4 |
3500 |
-3 |
-1246 |
3738 |
5 |
4100 |
-2 |
-646 |
1292 |
6 |
4500 |
-1 |
-246 |
246 |
7 |
5100 |
0 |
354 |
0 |
8 |
5700 |
1 |
954 |
954 |
10 |
6500 |
3 |
1754 |
5262 |
12 |
7500 |
5 |
2754 |
13770 |
14 |
7800 |
7 |
3054 |
21378 |
15 |
8000 |
8 |
3254 |
26032 |
위의 식을 대입하여 계산한 결과는 아래와 같다.
공분산의 한계와 대체방안
공분산의 특성과 한계
- 두변수의 관계에 대한 절대적인 요약 값
- 단위 문제 발생:
- scale : 경력과 연봉의 분포에 비해 단위가 큰 숫자로 계산된 공분산
- unit : 경력과 점수의 공분산의 단위는 "경력x연봉"
문제 해결을 위해 상관계수의 활용
상관계수의활용
피어슨상관계수(Pearson's correlation coefficient)
- 표준화된 두 수치형 변수로 계산된 공분산
- 공분산의 단위(scale/unit)의 문제를 해결
상관계수 계산의 예제
경력(x)과 연봉(y)의 상관계수
- 상관계수와 공분산, 두변수의 표준편차의 관계를 활용
지금까지 직접 상관계수 값을 구해 보았다.
R에서구하는 방법을 알아보자
# 연봉 예측데이터 불러오기 data = read.csv('data/salary.csv', fileEncoding='UTF-8') # 경력 기준 정렬 data[order(data$experience),] # 산점도와 보조선 그리기 plot(data, pch=16, xlab="Experience", ylab="Salary", col="dodgerblue") # 평균선 그리기 abline(v=mean(data$experience), lty=2) abline(h=mean(data$salary),lty=2) # 상관계수 계산하기 r_xy = cor(data$experience, data$salary) r_xy
실행결과는 아래와 같다.
> r_xy [1] 0.9931051
"계산결과는 1에 가까운 양의 값이므로 경력과 연봉은 양의상관관계를 가지고 있다고 볼수 있다."
R을 이용한다면 몇줄의 코드로 구할 수 있겠지만 과정을 아는 것이 중요한듯 하다.