19.통계데이터분석 - 상관분석 - 상관관계.Rmd
0.02MB
19.통계데이터분석---상관분석---상관관계.html
2.22MB
19.통계데이터분석 - 상관분석 - 상관관계
2022-08-06
https://www.youtube.com/watch?v=DkHNZBJg0p4&list=PLY0OaF78qqGAxKX91WuRigHpwBU0C2SB_&index=20
1. 상관관계(correlation)와 상관분석(correlation analysis)
- 적합성검정의 특징
- 어떤 두 사건 간의 연관성에 관심을 가질 때, 아래와 같은 경우가 있음
- 기업의 연구개발 투자비와 신제품 출시 비율 간의 관계
- 광고비 지출 과 매출액간의 관계
- 한 국가의 1인당 GDP와 국민의 기대수명 간의 관계
- 상관: 여기서 두 사건 간의 선형적 관계를 상관이라고 함
- 상관분석: 이러한 관계에 대한 분석을 상관분석이라고 함
- 연속형 변수를 가정: 두 사건에 대응되는 두 변수는 일반적으로 연속형 변수를 가정함
- 어떤 두 사건 간의 연관성에 관심을 가질 때, 아래와 같은 경우가 있음
2. 상관분석 수행하는 절차
2-1. cats데이터셋 설명
https://youtu.be/DkHNZBJg0p4?list=PLY0OaF78qqGAxKX91WuRigHpwBU0C2SB_&t=53
- cats데이터셋 설명
- 고양이의 성별에 따른 몸무게와 심장무게가 기록
- 모두 144개의 관측값으로 구성되어 있고 3개의 변수 포함
- 고양이 성별은 Sex변수이고, 암컷은 f, 수컷은 m으로 코딩 되어 있음
- 고양이의 몸무게는 Bwt변수의 저장이 되어 있고 kg단위로 측정 되었음
- 고양이의 심장무게는 Hwt변수에 저장이 되어있고 g단위로 측정 되었음
library(MASS)
str(cats)
## 'data.frame': 144 obs. of 3 variables:
## $ Sex: Factor w/ 2 levels "F","M": 1 1 1 1 1 1 1 1 1 1 ...
## $ Bwt: num 2 2 2 2.1 2.1 2.1 2.1 2.1 2.1 2.1 ...
## $ Hwt: num 7 7.4 9.5 7.2 7.3 7.6 8.1 8.2 8.3 8.5 ...
2-2. plot() - 산점도로 대략적인 상관관계 확인
- 상관분석을 수행 전 먼저 고양이의 몸무게와 심장무게 간 대략적인 관계를 산점도로 확인
- 산점도 생성 방법
- 방법1: x 축과 y 축에 위치할 변수를 차례대로 지정
- 방법2: 포물러 형식으로 지정
- 이 경우, 틸다 왼쪽에 y 축에 위치할 변수, 오른쪽에 x 축에 위치할 변수 지정
- 여기서는 포물러 형식 사용하여 y 축에 고양이 심장무게, x축에 고양이 몸무게 배치
- (포뮬러 외) 인수설명
- col: 산점도 상 점의 색상 지정
- pch: 산점도에 점으로 사용될 심볼 지정. 여기서는 19를 지정해 동그라미로 표현
- xlab, ylab: x축과 y 축에 제목 지정
- main: 그래프의 제목 지정
# windows(width=10, height=10)
plot(cats$Hwt ~ cats$Bwt,
col="forestgreen", pch=19,
xlab="Body weight (kg)", ylab="Heart weight (g)",
main="Body weight and Heart weight of Cats"
)
- 도표해석
- x축에 고양이 몸무게가 배치, y축에 고양이 심장무게가 배치됨
- 고양이 몸무게가 증가할수록 심장무게의 역시 증가하는 패턴을 보이고 있음
- 상관분석에서 산점도의 장단점
- 장점: 산점도를 통해 변수 간 관계와 패턴을 위와 같이 쉽게 이해 할 수 있음
- 단점: 하지만 선형관계의 강도를 객관적으로 파악할 수는 없음
2-3. 상관계수(correlation coefficient)
- 고양이의 몸무게와 심장무게가 내는 선형적으로 비례하는 관계가 있는 것처럼 보이지만 그 관계의 강도가 어느 정도인지 수치로 객관화해서 표현할 수는 없음
- 상관계수: 이때 이 두 변수 간의 선형관계의 강도를 측정한 지표를 상관계수라고 함
- 상관계수는 - 1~+1 사이 값을 가지며, 0일 경우 두 변수 간 상관관계가 없다는 것을 뜻함
- - 상관계수는 부의 선형관계, + 상관계수는 정의 선형관계를 나타냄
- -1은 완전한 부의 상관관계,+1은 완전한 정의 상관관계를 나타냄
- 두 변수의 상관계수가 - 1 또는 +1이라면 하나의 변수로부터 나머지 하나의 변수를 완벽하게 예측할 수 있다는 것을 의미함
- 상관계수의 특징
- 상관계수는 서로 대칭임
- 예) 두 변수 x와 y의 상관계수는 y와 x의 상관계수와 일치함
- 상관계수는 선형변환에 의해서 영향 받지 않음
- 변수값에 일정 상수를 더하거나 빼거나 곱하거나 나누는 이러한 선형변환을 해도 상관계수값에는 변함이 없음
- 즉, 관측값이 어떤 단위로 측정 되었든 간에 변수 사이의 상관계수는 항상 일정하다는 것을 의미함
- 예) 키와 몸무게 간의 상관계수를 구할때, 인치와 파운드로 측정된 키와 몸무게 간 상관계수나, cm 와 kg으로 측정된 두 변수 간의 상관계수는 서로 일치함
- 상관계수는 서로 대칭임
2-4. cor() - 두 변수간의 상관계수 측정
- 고양이의 몸무게와 심장무게 간의 관계를 보여주는 상관계수 측정
- 인수설명
- 1st, 2nd: 상관계수를 계산하고자 하는 두 변수를 차례대로 지정함
cor(cats$Bwt, cats$Hwt)
## [1] 0.8041274
- 결과해석
- 상관계수값 0.8이 산출 됨
- 상관계수는 - 1에서 +1 사이 값을 갖기 때문에 0.8은 꽤 높은 수준의 연관성을 보여주는 수치라고 볼 수가 있음
- 그래서 “고양이의 몸무게와 고양이의 심장무게 간에는 꽤 밀접한 관련이 있다”라고 결론을 내릴 수가 있음
- with() 함수로 데이터셋 이름을 앞에 한 번만 적을 수 있는 방식으로 인수를 지정할 수 있기 때문에 cor()함수의 내부를 단순한 방식으로 표현 가능하고 결과는 동일함
with(cats, cor(Bwt, Hwt))
## [1] 0.8041274
- 추가인수 지정하기
- method: 상관계수의 종류를 지정(“pearson”, “kendall”, “spearman”)
- pearson(기본값): 일반적인 연속형 변수에 대해 사용되는 pearson상관계수를 계산
- kendall 또는 spearman: 데이터셋이 서열척도로 측정된 경우 지정가능. 그러면 서열척도로 측정된 데이터에 등위상관계수를 계산
- 일반적으는 연속형 변수엔 pearson, 서열척도로 측정된 데이터에는 spearman 상관계수를 많이 사용함
- use: 데이터셋에 결측값이 포함돼 있을 때 use인수를 지정해 상관계수 계산 방법 결정가능
- everything(기본값): 결측값 포함돼 있을 경우, na 값을 출력해 줌
- complete.obs: 하나라도 결측값 포함하는 케이스는 상관계수 계산 시 제외
- 그래서 여기저기 결측값이 포함된 경우, 포함된 행이 모두 삭제되기 때문에 분석에 사용할 수 있는 표본 크기가 줄어드는 단점이 있을 수 있음
- pairwise.complete.obs: 분석에 사용되는 변수에 대해서만 결측값이 존재할 때 해당 케이스를 분석에서 제외
- 상관계수는 어떤 두 변수간의 관계를 분석을 하는 것이기 때문에 그 두 변수 내 결측값이 포함이 안돼 있으면 모든 데이터셋을 다 이용할 수 있 음
- 반면, 어떤 두 변수의 상관계수를 계산할 때 결측값이 포함돼 있을 때는 결측값이 있는 행만 삭제해 계산해 줌
- 그래서 complete.obs보다 좀 더 많은 데이터 표본을 이용할 수 있는 장점이 있음
- 반면, 상관계수를 계산하는 변수쌍마다 사용되는 케이스의 갯수가 다를 수 있다는 단점도 가짐
- method: 상관계수의 종류를 지정(“pearson”, “kendall”, “spearman”)
2-4-1. pearson 상관계수 vs. spearman 상관계수
- pearson 상관계수는 정규성의 가정을 필요로 함. 즉, 상관관계를 측정하고자 하는 두 변수는 정규분포를 따라야 함
- 정규성 가정을 충족하지 못할 때는 데이터값을 순위로 대체해 상관계수를 계산할 수 있음
- spearman 상관계수는 정규성 가정을 충족하지 못하는 서열척도의 데이터를 바탕으로 계산됨
- spearman 상관계수는 순위데이터를 바탕으로 계산되기 때문에 이상점에 비교적 덜 민감함
- 따라서 pearson 상관계수에 영향을 미칠 것으로 예상되는 이상점이 데이터에 포함되어 있을 때 spearman 상관계수가 대안으로 고려 될 수 있음
- 만일, pearson 상관계수와 spearman 상관계수가 많이 다르다면 pearson 상관계수에 큰 영향을 미치는 이상점이 데이터에 포함돼 있을 가능성이 있음
- 이 경우,
- 해당되는 이상점을 찾아 제거한 후,
- 다시 pearson 상관계수를 계산하면
- 이상점 제외한 나머지 데이터간 연관성을 pearson 상관계수로 비교적 잘 나타낼 수 있음
2-5. cor.test() - 상관계수에 대한 유의성 검정
2-5-1. 상관계수에 대한 유의성 검정
- cor()은 상관계수를 계산 해 주긴 하지만 상관계수에 대한 유의성 검정을 하지 않음
- 상관계수에 대한 유의성 검정은 cor.test()를 이용해 검정할 수 있음
- 모집단에서의 상관계수가 0이라는 귀무가설을 검정함
- cor() 함수에서 사용했던 것과 동일한 방식으로 인수로 지정함
- 상관관계를 측정하고자 하는 두 변수의 데이터 벡터를 차례대로 인수로 지정
cor.test(cats$Bwt, cats$Hwt)
##
## Pearson's product-moment correlation
##
## data: cats$Bwt and cats$Hwt
## t = 16.119, df = 142, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.7375682 0.8552122
## sample estimates:
## cor
## 0.8041274
- 결과해석
- p 값이 2.2e-16(2.2 곱하기 10의 - 16승)으로 거의 0에 가까움
- 검정결과, p 값이 유의수준 0.05 에 비해서 매우 작기 때문에 귀무가설을 기각 할 수 있음
2-5-2. 추가인수 지정하기
- 추가인수 지정하기: 분석 목적에 따라서 몇 가지 인수를 추가로 지정 할 수 있음
- alternative: 단측검정을 수행 할 수 있음. “greater” 또는 “less”를 지정할 수 있음
- “greater” 지정 시: 귀무가설이 “모집단에서의 상관계수가 0보다 작다”라는 것을 검증함. 그래서 대립가설은 “모집단에서의 상관계수가 0보다 크다”가 됨
- conf.level: 신뢰구간에 신뢰수준을 진행할 수가 있음. 0.99를 지정하면 신뢰구간의 신뢰수준이 99%인 상황에서의 가설을 검증할 수가 있음
- alternative: 단측검정을 수행 할 수 있음. “greater” 또는 “less”를 지정할 수 있음
cor.test(cats$Bwt, cats$Hwt, alternative="greater", conf.level=0.99)
##
## Pearson's product-moment correlation
##
## data: cats$Bwt and cats$Hwt
## t = 16.119, df = 142, p-value < 2.2e-16
## alternative hypothesis: true correlation is greater than 0
## 99 percent confidence interval:
## 0.7231755 1.0000000
## sample estimates:
## cor
## 0.8041274
- 결과해석
- 대립가설은 “모집단에서의 상관계수가 0보다 크다”가 되는 것이고,
- 귀무가설은 “모집단에서의 상관계수가 0보다 작거나 같다”가 됨
- 실제로 관측된 상관계수가 0.80이고 그에 대응되는 p값이 2.2 곱하기 -10의 16승(2.2e-16)이기 때문에
- “상관계수가 0보다 작거나 같다”는 가정 하에서는
- 이렇게 큰 양수의 상관계수가 나올 가능성이 거의 0에 가까울 정도로 희박하기 때문에
- 귀무가설을 기각하고 대립가설을 채택함
- “따라서 고양이의 몸무게와 심장무게 간에는 0보다 큰 상관계수가 존재한다”라고 결론을 내릴 수가 있음
2-5-3. 포뮬러 형식을 사용하여 상관계수에 대한 유의성 검정
- 인수설명
- 포뮬러 형식: 틸다 뒤에 검정하려는 두 변수를 +연산자 이용해 지정 가능
- data: 사용하고자 하는 데이터셋을 추가로 지정
cor.test(~ Bwt + Hwt, data=cats)
##
## Pearson's product-moment correlation
##
## data: Bwt and Hwt
## t = 16.119, df = 142, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.7375682 0.8552122
## sample estimates:
## cor
## 0.8041274
- 결과해석
- 앞서 따로따로 벡터를 지정한 것과 동일한 결과를 산출함
2-5-4. 포뮬러 형식을 사용하여 서브셋별로 함수 지정하기
- 이렇게 포뮬러 형식을 이용하면 서브셋별로 함수 적용이 가능한 장점이 있음
- 예) 암컷고양이에 대해서만 상관계수의 유의성 검정을 하려는 경우
- 포뮬러 형식으로 두 변수 간 인수를 지정 후
- 추가로 subset 인수에 추출하고자 하는 subset 조건 지정
- 암컷고양이에 대해서만 상관계수를 계산해 검정할 것이기 때문에 subset인수에 Sex==“F”인 데이 데이터만을 추출함함
cor.test(~Bwt + Hwt, data=cats, subset=(Sex=="F"))
##
## Pearson's product-moment correlation
##
## data: Bwt and Hwt
## t = 4.2152, df = 45, p-value = 0.0001186
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.2890452 0.7106399
## sample estimates:
## cor
## 0.5320497
- 결과해석
- 상관계수 0.53, 그에 대응되는 유의확률 0.0001186으로 계산됨
- 그래서 암컷고양이에 대한 검정결과도 귀무가설을 기각하고 대립가설을 채택
- “암컷고양이에 대해서도 고양이의 몸무게와 심장무게 간 유의한 상관관계가 존재한다”라고 결론을 내릴 수가 있음
2-6. cor() - 상관계수 행렬 생성과 인덱싱
2-6-1. 숫자벡터 데이터를 사용한 상관계수 행렬 생성
- 데이터셋에 2개를 초과하는 숫자 벡터가 포함돼 있으면 cor() 함수는 상관계수 행렬을 생성함
str(iris)
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
- iris데이터셋 설명
- 다섯번째 열이 iris꽃의 종류를 나타내기 때문에 숫자데이터가 아님
- 숫자데이터로 구성된 앞 4개 변수에 대해서만 cor()함수 적용 해 네 변수 간 상관계수 행렬 계산함
cor(iris[-5])
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Sepal.Length 1.0000000 -0.1175698 0.8717538 0.8179411
## Sepal.Width -0.1175698 1.0000000 -0.4284401 -0.3661259
## Petal.Length 0.8717538 -0.4284401 1.0000000 0.9628654
## Petal.Width 0.8179411 -0.3661259 0.9628654 1.0000000
- 결과해석: 네 개의 변수 간의 상관계수 행렬이 산출됨
2-6-2. 행렬 인덱싱을 이용한 상관계수 추출
- cor() 함수의 수행결과는 행렬 형식임
iris.cor <- cor(iris[-5])
class(iris.cor)
## [1] "matrix" "array"
- 결과해석: 클래스가 행렬 형식임을 볼 수 있음
- 이러한 행렬로부터 임의의 두 변수 간 상관계수를 행렬인덱싱으로 추출가능
- 예) Petal.Width와 Petal.Length 간의 상관계수는 행과 열의 이름을 직접 지정해 추출가능
iris.cor["Petal.Width", "Petal.Length"]
## [1] 0.9628654
- 결과해석: Petal.Width와 Petal.Length의 상관계수가 이 상관계수 행렬에서 직접 추출됨
2-7. corr.test() - 2개를 초과하는 변수 간 상관계수 계산
- cor() 함수는 2개의 변수 간 뿐만 아니라 2개를 초과하는 세 개 이상의 변수 간 상관계수도 계산해서 상관계수 행렬 형태로 출력 해 줌
- 하지만 이 변수들 간 상관계수가 통계적으로 유의한 지는 알려주지 않음
- 또한 상관계수의 통계적 유의성 검정을 위해서 사용한 cor.test()함수는 두 변수 간의 상관계수 유의성 검정에만 사용할 수 있는 한계가 있음
- 2개를 초과하는 세 개 이상의 변수 간에는 변수 간 상관계수에 대한 통계적 유의성 검정을 할 수 없음
- 그래서 cor() 나 cor.test() 로는 2개를 초과하는 변수 간의 상관계수와 그에 대한 유의성 검정을 동시에 수행 하기가 어려움
- psych 패키지 corr.test() 함수를 이용하면 2개를 초과하는 변수 간의 상관계수의 유의성 검정과 상관계수를 동시에 출력할 수 있음
- corr.test() 함수는 행렬이나 데이터 프레임을 인수로 받아서 상관계수 행렬과 그에 대응되는 유의확률 행렬을 반환함
2-7-1. 네 개의 변수 간 상관계수 행렬 생성
- iris데이터셋의 네 개의 변수 간 상관계수와 그에 대한 유의성 검정 결과를 corr.test()함수로 수행
library(psych)
corr.test(iris[-5])
## Call:corr.test(x = iris[-5])
## Correlation matrix
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Sepal.Length 1.00 -0.12 0.87 0.82
## Sepal.Width -0.12 1.00 -0.43 -0.37
## Petal.Length 0.87 -0.43 1.00 0.96
## Petal.Width 0.82 -0.37 0.96 1.00
## Sample Size
## [1] 150
## Probability values (Entries above the diagonal are adjusted for multiple tests.)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Sepal.Length 0.00 0.15 0 0
## Sepal.Width 0.15 0.00 0 0
## Petal.Length 0.00 0.00 0 0
## Petal.Width 0.00 0.00 0 0
##
## To see confidence intervals of the correlations, print with the short=FALSE option
- 결과해석
- 처음에 상관계수 행렬이 출력됨
- 뒤 이어서 그 상관계수 행렬에 대응되는 유의확률 행렬이 출력 됨
- Sepal.Length와 Sepal.Width 간 상관계수를 보면 -0.12, 그에 대응되는 유의확률은 0.15 임
- 유의수준 0.05에서 0.15는 유의수준 보다 크기 때문에 귀무가설을 기각하지 못하고 채택을 하게 됨
- 즉, “표본으로부터 계산된 -0.12라는 상관계수는 유의수준 0.05에서 통계적으로 유의하지 않다”라고 결론을 내릴 수 있음
- 다시 말해, “모집단에서 Sepal.Length와 Sepal.Width 간의 관계는 상관계수가 0일 수도 있다” 라는 얘기를 할 수가 있음
2-7-2. 네 개 변수 간 상관계수 행렬 생성 후 상관계수의 95% 신뢰구간 출력
- 추가적으로 상관계수의 95% 신뢰구간을 출력할 수 있음
- corr.test() 함수 출력결과를 print()함수로 출력하면서 추가로 short=FALSE 지정
print(corr.test(iris[-5]), short=FALSE)
## Call:corr.test(x = iris[-5])
## Correlation matrix
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Sepal.Length 1.00 -0.12 0.87 0.82
## Sepal.Width -0.12 1.00 -0.43 -0.37
## Petal.Length 0.87 -0.43 1.00 0.96
## Petal.Width 0.82 -0.37 0.96 1.00
## Sample Size
## [1] 150
## Probability values (Entries above the diagonal are adjusted for multiple tests.)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Sepal.Length 0.00 0.15 0 0
## Sepal.Width 0.15 0.00 0 0
## Petal.Length 0.00 0.00 0 0
## Petal.Width 0.00 0.00 0 0
##
## Confidence intervals based upon normal theory. To get bootstrapped values, try cor.ci
## raw.lower raw.r raw.upper raw.p lower.adj upper.adj
## Spl.L-Spl.W -0.27 -0.12 0.04 0.15 -0.27 0.04
## Spl.L-Ptl.L 0.83 0.87 0.91 0.00 0.81 0.91
## Spl.L-Ptl.W 0.76 0.82 0.86 0.00 0.74 0.88
## Spl.W-Ptl.L -0.55 -0.43 -0.29 0.00 -0.58 -0.25
## Spl.W-Ptl.W -0.50 -0.37 -0.22 0.00 -0.51 -0.20
## Ptl.L-Ptl.W 0.95 0.96 0.97 0.00 0.94 0.98
- 결과해석
- 앞에서 봤던 출력결과에 이어서 마지막 구간의 95% 신뢰구간이 출력됨
- 1행: Sepal.Length와 Sepal.Width 간 상관계수와 95% 신뢰구간 정보가 출력됨
- raw.r(-0.12): 표본으로부터 계산된 상관계수 출력
- raw.lower / raw.upper(-0.27, 0.04): 그 왼쪽과 오른쪽 95% 신뢰구간의 하한값과 상한값 출력됨. 그래서 95% 신뢰구간에 0이 포함 돼 있음
- 따라서 이를 통해서도 귀무가설을 기각하지 못하고 모집단에서 상관계수가 0일 수도 있다는 귀무가설을 채택하게 됨
2-7-3. 세 개 이상의 변수간 상관계수를 보여주는 상관계수 행렬 시각화 - pairs.panels()
- state.x77 데이터셋 설명
- state.x77은 미국 50개 주에 대한 정보가 8개의 변수에 저장 돼 있음.
str(state.x77)
## num [1:50, 1:8] 3615 365 2212 2110 21198 ...
## - attr(*, "dimnames")=List of 2
## ..$ : chr [1:50] "Alabama" "Alaska" "Arizona" "Arkansas" ...
## ..$ : chr [1:8] "Population" "Income" "Illiteracy" "Life Exp" ...
- 그래프를 그리기 위해 먼저 이들 변수 간 상관계수 계산
cor(state.x77) # Population 부터 시작 해 Area까지 8개 변수 간의 상관계수가 출력됨
## Population Income Illiteracy Life Exp Murder
## Population 1.00000000 0.2082276 0.10762237 -0.06805195 0.3436428
## Income 0.20822756 1.0000000 -0.43707519 0.34025534 -0.2300776
## Illiteracy 0.10762237 -0.4370752 1.00000000 -0.58847793 0.7029752
## Life Exp -0.06805195 0.3402553 -0.58847793 1.00000000 -0.7808458
## Murder 0.34364275 -0.2300776 0.70297520 -0.78084575 1.0000000
## HS Grad -0.09848975 0.6199323 -0.65718861 0.58221620 -0.4879710
## Frost -0.33215245 0.2262822 -0.67194697 0.26206801 -0.5388834
## Area 0.02254384 0.3633154 0.07726113 -0.10733194 0.2283902
## HS Grad Frost Area
## Population -0.09848975 -0.3321525 0.02254384
## Income 0.61993232 0.2262822 0.36331544
## Illiteracy -0.65718861 -0.6719470 0.07726113
## Life Exp 0.58221620 0.2620680 -0.10733194
## Murder -0.48797102 -0.5388834 0.22839021
## HS Grad 1.00000000 0.3667797 0.33354187
## Frost 0.36677970 1.0000000 0.05922910
## Area 0.33354187 0.0592291 1.00000000
- 이 상관계수 행렬을 그래프로 표현하기 위해 pairs.panels() 함수 이용
- pairs.panels() 함수는 산점도, 히스토그램, 상관계수를 동시에 보여 줌
- 데이터셋을 인수로 지정 함
pairs.panels(state.x77)
- 도표해석
- 대각선엔 히스토그램
- 대각선 아래쪽엔 산점도
- 대각선 위쪽엔 변수쌍 간 상관계수 출력
- 추가적인 인수 지정
- pch: 산점도의 점모양 지정. 21은 동그라미이고 내용과 테두리색을 따로 지정 가능
- bg: 내용색 (red) / 테두리색 : (기본값인 검은색) - 까만 테두리 빨간 색으로 채워진 점
- hist.col: 히스토그램 색 지정
- main: 그래프의 제목 지정
pairs.panels(state.x77, pch = 21, bg="red", hist.col = "gold",
main="Correlation Plot of US States Data")
- 도표해석
- 산점도의 점모양이 동그라미
- 동그라미 테두리는 까만색으로 안에 색깔은 빨간색
- 히스토그램은 골드 색상
- 그래프의 제목도 표현됨
2-7-4. 세 개 이상의 변수간 상관계수를 보여주는 상관계수 행렬 시각화 - corrgram()
- corrgram() 함수 특징1: 변수 간 상관관계를 좀 더 풍부하게 시각화를 해줌
- state.x77 데이터셋의 8개 변수 간 상관관계를 corrgram() 함수 그래프로 시각화
library(corrgram)
corrgram(state.x77)
- 도표해석
- 대각선에 변수명 출력
- 대각선을 중심으로 위와 아래에 색깔과 사선으로 표현돼 있는 상관관계가 표현됨
- 정의 상관관계: 파란색과 왼쪽 아래에서 오른쪽 위로 향하는 사선셀
- 부의 상관관계: 빨간색과 왼쪽 위에서 오른쪽 아래로 향하는 사선셀
- 색상이 짙을수록 큰 상관관계를 의미함
- 대각선을 중심으로 위아래는 현재 통일한 정보를 표현 해주고 있음
- corrgram() 함수 특징2: 여러 가지 다양한 옵션을 제공함
- 옵션 지정으로 여러 다양한 정보를 담고 있는 풍부한 그래프 생성 가능
- 아래는 추가 옵션 지정으로 기본 그래프 개선
- 추가 인수
- 대각선 중심으로 아래 / 위 패널에 각각 다른 형태로 상관관계 표현 가능
- lower.panel: 대각선 아래 패널에 대한 표현 형태 지정. panel.shade를 지정하면 색깔과 사선으로 구분되는 상관관계를 볼 수 있음
- upper.panel: 대각선 위쪽 패널의 출력형태 지정가능. panel.pie로 지정 해 원도표 형태로 상관관계를 표현 함
- text.panel: 대각선 옵션 지정. panel.txt를 지정하면 변수명이 출력됨
- order: TRUE 지정. 이는 유사한 상관관계 패턴을 갖는 변수끼리 함께 모여 있도록 주성분 분석을 이용해 행과 열에 변수 순서를 재정렬해 줌
- main: 그래프의 제목 지정
corrgram(state.x77, lower.panel=panel.shade,
upper.panel=panel.pie, text.panel=panel.txt,
order=TRUE, main="Corrgram of US States Data")
- 도표해석
- **대각선 아래쪽**: 기본 그래프와 같이 사선으로 표현된 상관관계가 표현됨
- **대각선 위쪽**
- 원도표 형태로 상관관계가 표현됨
- 대각선 아래와 마찬가지로 파란색은 정의 상관관계, 빨간색은 부의 상관관계를 나타냄.
- 상관관계 크기는 조각의 크기로 표현됨
- 정의 상관관계는 12시부터 시작해서 시계방향으로 조각의 색상이 채워짐
- 부의 상관관계는 반대로 12시부터 시작해서 시계반대방향으로 조각의 색상이 채워짐
2-7-5. 세 개 이상의 변수간 상관계수를 보여주는 상관계수 행렬 시각화(색상을 이용한 상관계수 표현) - corrgram() / colorRampPalette()
- corrgram() 함수 옵션을 변경해 조금 다른 형태의 상관관계 도표 생성
- 대각선 위쪽: 상관계수와 신뢰구간 출력
- 대각선 아래쪽: 원도표 출력
- 원도표 색상 변경
- lower.panel: 대각선 아래패널에 원도표를 출력하기 때문에 panel.pie 지정
- upper.panel: 대각선 위패널에 상관계수와 신뢰구간 출력하기 때문에 panel.conf 지정
- text.panel: 대각선에는 변수명을 취할 것이기 때문에 panel.txt 그대로 지정
- order: FALSE 지정해 원래 변수명 순서대로 대각선에 출력되도록 함
- col.regions: 대각사 아래패널 원도표 조각 색상 변경
- colorRampPalette() 함수 - 주어진 색상을 바탕으로 일련의 연속된 색상을 생성함
- red부터 시작 해, pink, green 색상을 거쳐 blue 색상의 이르는 일련의 연속된 색상을 조금씩 변화되는 형태로 만들어서 생성해 줌
- 색상을 이용해서 상관계수를 표현 해 줌
- 상관계수에 colorRampPalette()로 생성된 색상을 적용한다면,
- ‘-’ 인 가장 낮은 상관계수는 red색상, ’+’인 가장 높은 상관계수는 blue색상으로 표현됨
- 그 사이의 상관계수는 red부터 pink, green, blue까지 조금씩 변해가는 색상으로 표현됨
cols <- colorRampPalette(c("red", "pink", "green", "blue")) # 변경할 색상을 생성해 cols변수에 저장
corrgram(state.x77, col.regions=cols,
lower.panel=panel.pie,
upper.panel=panel.conf, text.panel=panel.txt,
order=FALSE, main="Corrgram of US States Data")
- 도표해석
- 대각선 위쪽: 상관계수와 신뢰구간 출력
- 대각선 아래쪽: 원도표가 출력됐고, 원도표 조각 색상은 colorRampPalette()함수로 생성한그 색상이 적용됨
- ‘-’ 상관계수 중 큰 값들은 빨간색, ‘+’ 상관계수 중 큰 값은 파란색으로 표시됨
- 그 사이의 상관계수는 red와 pink, pink와 green과 blue 사이의 적절한 색상이 적용됨