19.통계데이터분석 - 상관분석 - 상관관계.Rmd
0.02MB
19.통계데이터분석---상관분석---상관관계.html
2.22MB

 

 

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보다 좀 더 많은 데이터 표본을 이용할 수 있는 장점이 있음
        • 반면, 상관계수를 계산하는 변수쌍마다 사용되는 케이스의 갯수가 다를 수 있다는 단점도 가짐

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%인 상황에서의 가설을 검증할 수가 있음
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 사이의 적절한 색상이 적용됨

+ Recent posts