13.7 상관계수 행렬 그래프

다수의 변수간 상관관계(숫자형 변수)를 파악하려고 할 때, 회귀분석에서 종속변수(y)독립변수(x)간 선형관계를 파악하거나 독립변수간 다중공선성을 파악하려고 할 때 사용하는 분석 기법이 상관계수 행렬이며, 시각화 방법이 산포도 행렬상관계수 행렬 Plot (correlation matrix plot) 입니다.

이번 절에서는 상관계수 행렬 을 중심으로 해서 corrplot 패키지 사용법을 알아보겠습니다.

13.7.1 패키지 불러오기

상관계수 행렬을 시각화하기 위해 corrplot 패키지를 불러온다.

# install.packages("corrplot")

library(corrplot)
## Warning: package 'corrplot' was built under R version 4.0.5
## corrplot 0.89 loaded

13.7.2 데이터 세트 생성하기

13.7.2.1 숫자형 컬럼 만 추출하기

Cars93 데이터 세트 중 숫자형 컬럼만을 선택하여 새로운 데이터 세트 Cars.num를 생성한다.

이를 위해

  1. sapply() 함수를 이용하여 Cars93 데이터 세트의 각 컬럼에 대하여 is.numeric() 함수를 이용하여 숫자형 여부를 확인하면 된다. 그 결과를 num.col 변수에 대입하게 되면, num.col 은 논리형 벡터가 된다.
  2. 이제 이 논리형 벡터 num.colCars93 데이터 세트의 색인으로 이용하여 서브세팅을 해준다(컬럼의 선택).19
library(MASS)

## Cars93의 각 컬럼에 대하여 numeric 형 여부 확인
num.col <- sapply(Cars93, is.numeric)
num.col
##       Manufacturer              Model               Type          Min.Price 
##              FALSE              FALSE              FALSE               TRUE 
##              Price          Max.Price           MPG.city        MPG.highway 
##               TRUE               TRUE               TRUE               TRUE 
##            AirBags         DriveTrain          Cylinders         EngineSize 
##              FALSE              FALSE              FALSE               TRUE 
##         Horsepower                RPM       Rev.per.mile    Man.trans.avail 
##               TRUE               TRUE               TRUE              FALSE 
## Fuel.tank.capacity         Passengers             Length          Wheelbase 
##               TRUE               TRUE               TRUE               TRUE 
##              Width        Turn.circle     Rear.seat.room       Luggage.room 
##               TRUE               TRUE               TRUE               TRUE 
##             Weight             Origin               Make 
##               TRUE              FALSE              FALSE
## Cars93에서 numeric 형 컬럼만 선택하기
Cars.num <- Cars93[num.col]
str(Cars.num)
## 'data.frame':    93 obs. of  18 variables:
##  $ Min.Price         : num  12.9 29.2 25.9 30.8 23.7 14.2 19.9 22.6 26.3 33 ...
##  $ Price             : num  15.9 33.9 29.1 37.7 30 15.7 20.8 23.7 26.3 34.7 ...
##  $ Max.Price         : num  18.8 38.7 32.3 44.6 36.2 17.3 21.7 24.9 26.3 36.3 ...
##  $ MPG.city          : int  25 18 20 19 22 22 19 16 19 16 ...
##  $ MPG.highway       : int  31 25 26 26 30 31 28 25 27 25 ...
##  $ EngineSize        : num  1.8 3.2 2.8 2.8 3.5 2.2 3.8 5.7 3.8 4.9 ...
##  $ Horsepower        : int  140 200 172 172 208 110 170 180 170 200 ...
##  $ RPM               : int  6300 5500 5500 5500 5700 5200 4800 4000 4800 4100 ...
##  $ Rev.per.mile      : int  2890 2335 2280 2535 2545 2565 1570 1320 1690 1510 ...
##  $ Fuel.tank.capacity: num  13.2 18 16.9 21.1 21.1 16.4 18 23 18.8 18 ...
##  $ Passengers        : int  5 5 5 6 4 6 6 6 5 6 ...
##  $ Length            : int  177 195 180 193 186 189 200 216 198 206 ...
##  $ Wheelbase         : int  102 115 102 106 109 105 111 116 108 114 ...
##  $ Width             : int  68 71 67 70 69 69 74 78 73 73 ...
##  $ Turn.circle       : int  37 38 37 37 39 41 42 45 41 43 ...
##  $ Rear.seat.room    : num  26.5 30 28 31 27 28 30.5 30.5 26.5 35 ...
##  $ Luggage.room      : int  11 15 14 17 13 16 17 21 14 18 ...
##  $ Weight            : int  2705 3560 3375 3405 3640 2880 3470 4105 3495 3620 ...

Go Top

13.7.3 산포도 행렬 그래프

산포도 행렬 그래프(scatter matrix plot)로 Cars.num 데이터 세트에 있는 데이터 들의 산포도를 시각화하여 데이터 세트 내의 컬럼 사시의 관련성을 시각화하여 확인할 수 있습니다.

기본적으로 plot() 함수를 이용하며, 이 함수의 기본 모수로는 데이터 세트 Cars.num을 입력해 줍니다. 여기서는 Cars.num 데이터 세트에 대하여 Cars.num[ , 1:4]를 이용하여 처음 4개의 컬럼만 시각화해 보겠습니다.

# scatter plot matrix 
plot(Cars.num[, 1:4], main = "산포도 행렬 그래프")
변수간 관련성 : 산포도 행렬 그래프

Figure 13.61: 변수간 관련성 : 산포도 행렬 그래프

13.7.4 상관계수 행렬 구하기

이제는 Cars.num 데이터 세트에 대하여 cor() 함수를 이용하여 상관계수 행렬을 구해 보겠습니다.

cor(Cars.num)
##                    Min.Price  Price Max.Price MPG.city MPG.highway EngineSize
## Min.Price              1.000  0.971     0.907    -0.62       -0.58       0.65
## Price                  0.971  1.000     0.982    -0.59       -0.56       0.60
## Max.Price              0.907  0.982     1.000    -0.55       -0.52       0.54
## MPG.city              -0.623 -0.595    -0.548     1.00        0.94      -0.71
## MPG.highway           -0.580 -0.561    -0.523     0.94        1.00      -0.63
## EngineSize             0.645  0.597     0.535    -0.71       -0.63       1.00
## Horsepower             0.802  0.788     0.744    -0.67       -0.62       0.73
## RPM                   -0.043 -0.005     0.025     0.36        0.31      -0.55
## Rev.per.mile          -0.470 -0.426    -0.374     0.70        0.59      -0.82
## Fuel.tank.capacity     0.635  0.619     0.581    -0.81       -0.79       0.76
## Passengers             0.061  0.058     0.053    -0.42       -0.47       0.37
## Length                 0.554  0.504     0.443    -0.67       -0.54       0.78
## Wheelbase              0.517  0.501     0.468    -0.67       -0.62       0.73
## Width                  0.493  0.456     0.408    -0.72       -0.64       0.87
## Turn.circle            0.429  0.393     0.348    -0.67       -0.59       0.78
## Rear.seat.room            NA     NA        NA       NA          NA         NA
## Luggage.room              NA     NA        NA       NA          NA         NA
## Weight                 0.667  0.647     0.605    -0.84       -0.81       0.85
##                    Horsepower    RPM Rev.per.mile Fuel.tank.capacity Passengers
## Min.Price              0.8024 -0.043        -0.47               0.64     0.0612
## Price                  0.7882 -0.005        -0.43               0.62     0.0579
## Max.Price              0.7444  0.025        -0.37               0.58     0.0532
## MPG.city              -0.6726  0.363         0.70              -0.81    -0.4169
## MPG.highway           -0.6190  0.313         0.59              -0.79    -0.4664
## EngineSize             0.7321 -0.548        -0.82               0.76     0.3727
## Horsepower             1.0000  0.037        -0.60               0.71     0.0093
## RPM                    0.0367  1.000         0.49              -0.33    -0.4671
## Rev.per.mile          -0.6003  0.495         1.00              -0.61    -0.3350
## Fuel.tank.capacity     0.7118 -0.333        -0.61               1.00     0.4721
## Passengers             0.0093 -0.467        -0.33               0.47     1.0000
## Length                 0.5509 -0.441        -0.69               0.69     0.4853
## Wheelbase              0.4869 -0.468        -0.64               0.76     0.6941
## Width                  0.6444 -0.540        -0.78               0.80     0.4900
## Turn.circle            0.5612 -0.506        -0.73               0.67     0.4490
## Rear.seat.room             NA     NA           NA                 NA         NA
## Luggage.room               NA     NA           NA                 NA         NA
## Weight                 0.7388 -0.428        -0.74               0.89     0.5533
##                    Length Wheelbase Width Turn.circle Rear.seat.room
## Min.Price            0.55      0.52  0.49        0.43             NA
## Price                0.50      0.50  0.46        0.39             NA
## Max.Price            0.44      0.47  0.41        0.35             NA
## MPG.city            -0.67     -0.67 -0.72       -0.67             NA
## MPG.highway         -0.54     -0.62 -0.64       -0.59             NA
## EngineSize           0.78      0.73  0.87        0.78             NA
## Horsepower           0.55      0.49  0.64        0.56             NA
## RPM                 -0.44     -0.47 -0.54       -0.51             NA
## Rev.per.mile        -0.69     -0.64 -0.78       -0.73             NA
## Fuel.tank.capacity   0.69      0.76  0.80        0.67             NA
## Passengers           0.49      0.69  0.49        0.45             NA
## Length               1.00      0.82  0.82        0.74             NA
## Wheelbase            0.82      1.00  0.81        0.72             NA
## Width                0.82      0.81  1.00        0.82             NA
## Turn.circle          0.74      0.72  0.82        1.00             NA
## Rear.seat.room         NA        NA    NA          NA              1
## Luggage.room           NA        NA    NA          NA             NA
## Weight               0.81      0.87  0.87        0.78             NA
##                    Luggage.room Weight
## Min.Price                    NA   0.67
## Price                        NA   0.65
## Max.Price                    NA   0.61
## MPG.city                     NA  -0.84
## MPG.highway                  NA  -0.81
## EngineSize                   NA   0.85
## Horsepower                   NA   0.74
## RPM                          NA  -0.43
## Rev.per.mile                 NA  -0.74
## Fuel.tank.capacity           NA   0.89
## Passengers                   NA   0.55
## Length                       NA   0.81
## Wheelbase                    NA   0.87
## Width                        NA   0.87
## Turn.circle                  NA   0.78
## Rear.seat.room               NA     NA
## Luggage.room                  1     NA
## Weight                       NA   1.00

13.7.4.1 NA를 제외한 상관계수 행렬

Cars.num의 컬럼에 NA 값이 있는 경우 상관계수는 NA가 된다. 데이터 세트에서 이러한 NA를 제거하기 위해 na.omit() 함수를 이용한다.

Cor <- cor(na.omit(Cars.num))
Cor
##                    Min.Price  Price Max.Price MPG.city MPG.highway EngineSize
## Min.Price              1.000  0.971     0.910    -0.66       -0.66       0.71
## Price                  0.971  1.000     0.983    -0.62       -0.63       0.64
## Max.Price              0.910  0.983     1.000    -0.57       -0.57       0.57
## MPG.city              -0.663 -0.622    -0.565     1.00        0.95      -0.75
## MPG.highway           -0.664 -0.626    -0.572     0.95        1.00      -0.67
## EngineSize             0.705  0.642     0.567    -0.75       -0.67       1.00
## Horsepower             0.795  0.787     0.750    -0.70       -0.69       0.77
## RPM                   -0.092 -0.035     0.011     0.33        0.23      -0.52
## Rev.per.mile          -0.487 -0.437    -0.381     0.71        0.61      -0.82
## Fuel.tank.capacity     0.736  0.707     0.656    -0.80       -0.74       0.82
## Passengers             0.327  0.274     0.222    -0.46       -0.41       0.53
## Length                 0.611  0.552     0.485    -0.72       -0.62       0.85
## Wheelbase              0.676  0.628     0.566    -0.67       -0.57       0.86
## Width                  0.544  0.495     0.438    -0.69       -0.59       0.89
## Turn.circle            0.478  0.425     0.366    -0.65       -0.56       0.79
## Rear.seat.room         0.418  0.342     0.269    -0.34       -0.28       0.52
## Luggage.room           0.413  0.367     0.315    -0.49       -0.37       0.68
## Weight                 0.777  0.737     0.677    -0.84       -0.78       0.92
##                    Horsepower    RPM Rev.per.mile Fuel.tank.capacity Passengers
## Min.Price               0.795 -0.092        -0.49               0.74       0.33
## Price                   0.787 -0.035        -0.44               0.71       0.27
## Max.Price               0.750  0.011        -0.38               0.66       0.22
## MPG.city               -0.704  0.327         0.71              -0.80      -0.46
## MPG.highway            -0.687  0.234         0.61              -0.74      -0.41
## EngineSize              0.772 -0.524        -0.82               0.82       0.53
## Horsepower              1.000  0.024        -0.59               0.80       0.24
## RPM                     0.024  1.000         0.51              -0.24      -0.38
## Rev.per.mile           -0.592  0.507         1.00              -0.63      -0.48
## Fuel.tank.capacity      0.796 -0.244        -0.63               1.00       0.45
## Passengers              0.241 -0.378        -0.48               0.45       1.00
## Length                  0.643 -0.440        -0.75               0.79       0.65
## Wheelbase               0.663 -0.405        -0.73               0.79       0.65
## Width                   0.689 -0.489        -0.79               0.77       0.52
## Turn.circle             0.598 -0.477        -0.72               0.67       0.49
## Rear.seat.room          0.279 -0.270        -0.42               0.45       0.74
## Luggage.room            0.359 -0.525        -0.59               0.61       0.65
## Weight                  0.860 -0.348        -0.78               0.90       0.51
##                    Length Wheelbase Width Turn.circle Rear.seat.room
## Min.Price            0.61      0.68  0.54        0.48           0.42
## Price                0.55      0.63  0.50        0.42           0.34
## Max.Price            0.48      0.57  0.44        0.37           0.27
## MPG.city            -0.72     -0.67 -0.69       -0.65          -0.34
## MPG.highway         -0.62     -0.57 -0.59       -0.56          -0.28
## EngineSize           0.85      0.86  0.89        0.79           0.52
## Horsepower           0.64      0.66  0.69        0.60           0.28
## RPM                 -0.44     -0.40 -0.49       -0.48          -0.27
## Rev.per.mile        -0.75     -0.73 -0.79       -0.72          -0.42
## Fuel.tank.capacity   0.79      0.79  0.77        0.67           0.45
## Passengers           0.65      0.65  0.52        0.49           0.74
## Length               1.00      0.91  0.88        0.81           0.59
## Wheelbase            0.91      1.00  0.85        0.75           0.66
## Width                0.88      0.85  1.00        0.82           0.43
## Turn.circle          0.81      0.75  0.82        1.00           0.46
## Rear.seat.room       0.59      0.66  0.43        0.46           1.00
## Luggage.room         0.71      0.73  0.67        0.59           0.65
## Weight               0.88      0.88  0.87        0.79           0.49
##                    Luggage.room Weight
## Min.Price                  0.41   0.78
## Price                      0.37   0.74
## Max.Price                  0.32   0.68
## MPG.city                  -0.49  -0.84
## MPG.highway               -0.37  -0.78
## EngineSize                 0.68   0.92
## Horsepower                 0.36   0.86
## RPM                       -0.52  -0.35
## Rev.per.mile              -0.59  -0.78
## Fuel.tank.capacity         0.61   0.90
## Passengers                 0.65   0.51
## Length                     0.71   0.88
## Wheelbase                  0.73   0.88
## Width                      0.67   0.87
## Turn.circle                0.59   0.79
## Rear.seat.room             0.65   0.49
## Luggage.room               1.00   0.64
## Weight                     0.64   1.00

이제 NA 값이 제거된 Cars.num 데이터 세트의 각 컬럼 사이의 상관계수 행렬이 Cor 변수에 저장되었습니다.

Go Top

13.7.5 Corrplot 시각화

앞에서 구한 상관계수 행렬 Cor에 대하여 corrplot() 함수를 이용하여 시각화할 수 있습니다.

이때 시각화의 방법으로 method = 모수를 지정할 수 있습니다. 기본값은 “circle” 이며, 다음과 같이 다양한 옵션이 있습니다.

corrplot(Cor, method = "circle", main = "Corrplot 시각화 예 1")
Corrplot 시각화 예

Figure 13.62: Corrplot 시각화 예

corrplot(Cor, method = "square", main = "Corrplot 시각화 예 2")
Corrplot 시각화 예

Figure 13.63: Corrplot 시각화 예

corrplot(Cor, method = "ellipse", main = "Corrplot 시각화 예 3")
Corrplot 시각화 예

Figure 13.64: Corrplot 시각화 예

corrplot(Cor, method = "number", main = "Corrplot 시각화 예 4")
Corrplot 시각화 예

Figure 13.65: Corrplot 시각화 예

corrplot(Cor, method = "shade", main = "Corrplot 시각화 예 5")
Corrplot 시각화 예

Figure 13.66: Corrplot 시각화 예

corrplot(Cor, method = "color", main = "Corrplot 시각화 예 6")
Corrplot 시각화 예

Figure 13.67: Corrplot 시각화 예

corrplot(Cor, method = "pie", tl.cex = 0.7, main = "Corrplot 시각화 예 7")
Corrplot 시각화 예

Figure 13.68: Corrplot 시각화 예

13.7.6 시각화 레이아웃

There are three layout types (parameter type): - "full" (default) : display full correlation matrix - "upper" : display upper triangular of the correlation matrix - "lower" : display lower triangular of the correlation matrix

corrplot() 함수를 이용한 시각화 결과는 다음과 같이 세 가지의 레이아웃 유형 (매개 변수 유형)으로 표시할 수 있습니다.

  • "full"(기본값) : 전체 상관 행렬 표시
  • "upper" : 상관 행렬의 위쪽 삼각형 표시
  • "lower" : 상관 행렬의 아래쪽 삼각형 표시
corrplot(Cor, type = "full", main = "Corrplot 시각화의 레이아웃 : full")
Corrplot 시각화의 레이아웃

Figure 13.69: Corrplot 시각화의 레이아웃

corrplot(Cor, method = "ellipse", type = "upper", 
         main = "Corrplot 시각화의 레이아웃 : uppper")
Corrplot 시각화의 레이아웃

Figure 13.70: Corrplot 시각화의 레이아웃

corrplot(Cor, type = "lower", main = "Corrplot 시각화의 레이아웃 : lower")
Corrplot 시각화의 레이아웃

Figure 13.71: Corrplot 시각화의 레이아웃

corrplot.mixed() 함수는 혼합형 시각화 스타일을 표시를 위한 결합 함수입니다.

corrplot.mixed(Cor, main = "기본형")
Corrplot의 혼합형 시각화 스타일

Figure 13.72: Corrplot의 혼합형 시각화 스타일

corrplot.mixed(Cor, 
               lower.col = "black", 
               number.cex = .5,
               main = "하단부 - 검은색(글자크기 : 0.5)")
Corrplot의 혼합형 시각화 스타일

Figure 13.73: Corrplot의 혼합형 시각화 스타일

corrplot.mixed(Cor, 
               lower = "square", 
               upper = "circle", 
               tl.col = "black", 
               tl.cex = 0.7,
               main = "하단부 - 사각형, 상단부 - 원형 (대각선 = 색 : 검정, 글자크기 : 0.7)")
Corrplot의 혼합형 시각화 스타일

Figure 13.74: Corrplot의 혼합형 시각화 스타일

Go Top

13.7.7 상관계수 행렬의 정렬

상관계수의 값에 따라 상관계수 행렬을 재정렬할 수 있습니다. 이것은 행렬에서 숨겨진 구조와 패턴을 식별하는 데 중요합니다.

corrplot(order = )에는 "AOE", "FPC", "hclust", 그리고 "alphabet"이라는 네 가지 방법을 지정할 수 있습니다. seriation 패키지에서 더 많은 알고리즘을 찾을 수 있습니다.

corrMatOrder() 함수를 이용해서 상관계수 행렬을 “수동으로” 재정렬할 수도 있습니다.

  • "AOE"는 고유 벡터(eigen vector)의 각도 순서입니다. 각도 ai 의 순서로 계산됩니다.

    \[ a_i = \begin{cases} \arctan (e_{i2}/e_{i1}), & \text{if $e_{i1}>0$;} \newline \arctan (e_{i2}/e_{i1}) + \pi, & \text{otherwise.} \end{cases} \]

    여기서 e1e2는 상관계수 행렬에서 가장 큰 두 개의 고유값(eigen value)을 나타냅니다. 자세한 내용은 Michael Friendly (2002) ^[https://www.datavis.ca/papers/corrgram.pdf]를 참조하기 바랍니다.

  • "FPC" : 첫 번째 주 구성 요소(first principle componet)의 순서

  • "hclust" : 계층적 클러스터링의 순서. 이 때 사용할 응집 방법(agglomeration method)은 "hclust.method"입니다. "hclust.method""ward", "single", "complete", "average", "mcquitty", "median"또는 "centroid"중 하나를 지정해 줍니다.

  • "alphabet" : 알파벳 순서

corrplot(Cor, order = "AOE", main = "AOE 방법")
상관계수 행렬의 정렬

Figure 13.75: 상관계수 행렬의 정렬

corrplot(Cor, order = "FPC", main = "FPC 방법")
상관계수 행렬의 정렬

Figure 13.76: 상관계수 행렬의 정렬

corrplot(Cor, order = "hclust", main = "hclust 방법")
상관계수 행렬의 정렬

Figure 13.77: 상관계수 행렬의 정렬

"hclust"를 사용하는 경우 corrplot ()은 계층적 클러스터링의 결과에 따라 다음과 같이 상관계수 행렬 그림 주위에 사각형을 그릴 수 있습니다.

corrplot(Cor, 
         order = "hclust", 
         addrect = 3,
         main = "상관계수 행렬의 정렬 : hclust의 경우")
상관계수 행렬의 정렬 : hclust의 경우

Figure 13.78: 상관계수 행렬의 정렬 : hclust의 경우

Go Top

13.7.8 색 지정

상관계수 행렬 그래프는 다양한 구성요소를 갖는데 이에 대하여 다양한 모수를 이용하여 색을 지정할 수 있습니다.

여기서는 cl.poscol 그리고 bg 모수에 대하여 간단히 살펴 보겠습니다.

  • cl.pos : 문자 또는 논리값; 만일 문자라면 “r” (default if type==“upper” or “full”), “b” (default if type==“lower”) 또는 “n” 중의 한 값을 가집니다. 여기서, “n”은 컬러 레이블을 그리지 않는다는 의미입니다.

col : 벡터. 도형의 색상을 나타냅니다. cl.lim 구간에서 일양분포(uniform distribution) 형태를 갖습니다. colNULL 값인 경우 colcolorRampPalette(col2)(200)이 될 것입니다

  • bg : 배경색을 지정합니다.
# 배경색을 옅은 파란색으로 변경하기

corrplot(Cor, 
         type = "upper", 
         order = "hclust", 
         cl.pos = "n",
         col = c("black", "white"), 
         bg = "lightblue",
         main = "상관계수 행렬 그래프 : 색 지정")
상관계수 행렬 그래프 : 색 지정

Figure 13.79: 상관계수 행렬 그래프 : 색 지정

13.7.8.1 색상 스펙트럼 사용

위에서 볼 수 있듯이 상관 관계도의 색상을 사용자가 지정할 수 있습니다. colorRampPalette() 함수는 색상 스펙트럼을 생성하는 데 매우 편리하게 해 줍니다.

## [-N, 0] or [0, N] 형태의 행렬에 적합한 색상의 예
col0 <- colorRampPalette(c("white", "cyan", "#007FFF", "blue","#00007F"))

## diverging color example, suitable for matrix in [-N, N]
col1 <- colorRampPalette(c("#7F0000", "red", "#FF7F00", "yellow", "white",
                           "cyan", "#007FFF", "blue", "#00007F"))
col2 <- colorRampPalette(c("#67001F", "#B2182B", "#D6604D", "#F4A582",
                           "#FDDBC7", "#FFFFFF", "#D1E5F0", "#92C5DE",
                           "#4393C3", "#2166AC", "#053061"))
col3 <- colorRampPalette(c("red", "white", "blue")) 
col4 <- colorRampPalette(c("#7F0000", "red", "#FF7F00", "yellow", "#7FFF7F",
                           "cyan", "#007FFF", "blue", "#00007F"))
whiteblack <- c("white", "black")

## 위에서 지정한 색상 스펙트럼의 사용
corrplot(Cor, order = "hclust", addrect = 2, col = col1(100), main = "색상 스펙트럼 1")
상관계수 행렬 그래프 : 색상 스펙트럼 사용

Figure 13.80: 상관계수 행렬 그래프 : 색상 스펙트럼 사용

corrplot(Cor, order = "hclust", addrect = 2, col = col2(50), main = "색상 스펙트럼 2")
상관계수 행렬 그래프 : 색상 스펙트럼 사용

Figure 13.81: 상관계수 행렬 그래프 : 색상 스펙트럼 사용

corrplot(Cor, order = "hclust", addrect = 2, col = col3(20), main = "색상 스펙트럼 3")
상관계수 행렬 그래프 : 색상 스펙트럼 사용

Figure 13.82: 상관계수 행렬 그래프 : 색상 스펙트럼 사용

corrplot(Cor, order = "hclust", addrect = 2, col = col4(10), main = "색상 스펙트럼 4")
상관계수 행렬 그래프 : 색상 스펙트럼 사용

Figure 13.83: 상관계수 행렬 그래프 : 색상 스펙트럼 사용

corrplot(Cor, order = "hclust", addrect = 2, col = whiteblack, bg = "gold2", main = "색상 스펙트럼 5")
상관계수 행렬 그래프 : 색상 스펙트럼 사용

Figure 13.84: 상관계수 행렬 그래프 : 색상 스펙트럼 사용

13.7.8.2 표준 색상 팔레트의 사용

여러분은 또한 표준 색상 팔레트 (grDevices 패키지)를 사용할 수도 있습니다.

corrplot(Cor, 
         order = "hclust", 
         addrect = 2, 
         col = cm.colors(100),
         main = "상관계수 행렬 그래프 : 표준 색상 팔레트의 사용")
상관계수 행렬 그래프 : 표준 색상 팔레트의 사용

Figure 13.85: 상관계수 행렬 그래프 : 표준 색상 팔레트의 사용

또 다른 옵션은 RcolorBrewer 패키지의 brewer.pal() 함수를 사용하는 것입니다.

library(RColorBrewer)

corrplot(Cor, 
         type = "upper", 
         order = "hclust",
         col = brewer.pal(n = 8, name = "RdBu"),
         main = "RcolorBrewer 팔레트의 사용")
상관계수 행렬 그래프 : RcolorBrewer 팔레트의 사용

Figure 13.86: 상관계수 행렬 그래프 : RcolorBrewer 팔레트의 사용

13.7.8.3 텍스트 레이블과 색상 레이블 그리고 회전 변경

매개 변수 cl.*색상 레이블용이고 tl.*텍스트 레이블용입니다.

텍스트 레이블의 경우 tl.col (텍스트 레이블 색상)과 tl.srt (텍스트 레이블 문자열 회전)를 사용하여 텍스트 색상과 회전을 변경하여 적용할 수 있습니다.

예를 들어 보겠습니다.

## 색상 범례, 텍스트 범례 그리고 주 대각선의 기호 제거
corrplot(Cor, 
         order = "AOE", 
         cl.pos = "n", 
         tl.pos = "n", 
         diag = FALSE,
         main = "색상 범례, 텍스트 범례 그리고 주 대각선의 기호 제거") 
상관계수 행렬 그래프 : 텍스트 레이블과 색상 레이블

Figure 13.87: 상관계수 행렬 그래프 : 텍스트 레이블과 색상 레이블

## 하단부 색상 범례, 대각선 텍스트 범례, 텍스트 레이블의 회전
corrplot(Cor, 
         order = "AOE", 
         cl.pos = "b", 
         tl.pos = "d",
         main = "하단부 색상 범례, 대각선 텍스트 범례, 텍스트 레이블의 회전")
상관계수 행렬 그래프 : 텍스트 레이블과 색상 레이블

Figure 13.88: 상관계수 행렬 그래프 : 텍스트 레이블과 색상 레이블

## 오른 쪽으로 정렬된 숫자를 표시하는 더 넓은 색상 범례
corrplot(Cor, 
         order = "AOE", 
         cl.ratio = 0.2, 
         cl.align = "r",
         main = "오른 쪽으로 정렬된 숫자를 표시하는 더 넓은 색상 범례")
상관계수 행렬 그래프 : 텍스트 레이블과 색상 레이블

Figure 13.89: 상관계수 행렬 그래프 : 텍스트 레이블과 색상 레이블

## 텍스트 레이블 45도 회전
corrplot(Cor, 
         type = "lower", 
         order = "hclust", 
         tl.col = "black", 
         tl.srt = 45,
         main = "텍스트 레이블 45도 회전")
상관계수 행렬 그래프 : 텍스트 레이블과 색상 레이블

Figure 13.90: 상관계수 행렬 그래프 : 텍스트 레이블과 색상 레이블

13.7.8.4 cl.lim을 이용한 색상 구간의 지정과 표시

cl.lim 모수를 이용하여 색상 레이블의 구간을 지정할 수 있습니다.

기본값의 범위는 [-1, 1]입니다.

# is.corr = TRUE (기본 값)로 설정하면, cl.lim 만이 색상 범례에 영향을 줍니다.
corrplot(Cor/2)
cl.lim을 이용한 색상 구간의 지정과 표시

Figure 13.91: cl.lim을 이용한 색상 구간의 지정과 표시

# 구간을 [-0.5, 0.5]로 변경합니다.
corrplot(Cor/2, 
         cl.lim = c(-0.5,0.5))
cl.lim을 이용한 색상 구간의 지정과 표시

Figure 13.92: cl.lim을 이용한 색상 구간의 지정과 표시

# is.corr = FALSE로 설정된 경우에도, cl.lim을 이용하여 색상을 할당할 수 있습니다.
corrplot(Cor*2, 
         is.corr = FALSE, 
         cl.lim = c(-2, 2))
cl.lim을 이용한 색상 구간의 지정과 표시

Figure 13.93: cl.lim을 이용한 색상 구간의 지정과 표시

Go Top

13.7.9 일반 행렬의 시각화

상관계수 행렬이 아닌 일반 행렬을 시각화할 수도 있습니다. 여기서는 상관계수 행렬인 Cor을 2배하고, cl.lim 값을 [-4, 4]의 범위로 하여 시각화해 보겠습니다.

## cl.lim의 사용 예를 보여주기 위해, 다음을 실행합니다. (warning 메시지가 나타남)
corrplot(Cor*2, is.corr = FALSE, cl.lim=c(-2, 2) * 2,
         main = "일반 행렬의 시각화 1")
## Warning in corrplot(Cor * 2, is.corr = FALSE, cl.lim = c(-2, 2) * 2, main = "일
## 반 행렬의 시각화 1"): cl.lim interval too wide, please set a suitable value
일반 행렬의 시각화 1

Figure 13.94: 일반 행렬의 시각화 1

Cor 행렬에 abs() 함수를 사용하여 모두 양수로 바꾼 다음, 10으로 곱한 다음 50을 더하면 행렬 요소의 값이 50부터 60까지의 값을 갖는 행렬이 생성됩니다. 이제 이 행렬을 시각화해 보겠습니다. 이 행렬이 갖는 값의 범위는 50 ~ 60 임을 알 수 있습니다.

## [50, 60] 행렬
corrplot(abs(Cor)*10 + 50, 
         is.corr = FALSE, 
         cl.lim = c(50, 60), 
         col = col0(10),
         main = "일반 행렬의 시각화 2")
일반 행렬의 시각화 2

Figure 13.95: 일반 행렬의 시각화 2

13.7.9.1 직사각형 형태의 행렬

행렬이 직사각형인 경우에는 win.asp 매개 변수를 사용하여 가로와 세로 비율을 조정하여 행렬을 정사각형으로 렌더링할 수 있습니다.

ran <- matrix(rnorm(70), ncol = 7)
corrplot(ran, is.corr = FALSE, win.asp = .7, method = "circle",
         main = "직사각형 형태의 행렬 시각화")
직사각형 형태의 행렬 시각화

Figure 13.96: 직사각형 형태의 행렬 시각화

Go Top

13.7.10 결측치(NA)의 표시

기본적으로 corrplot()은 상관계수 행렬의 대각선에 있는 NA 값을 "?" 문자로 렌더링합니다. na.label 매개 변수를 사용하면 여기에 원하는 값을 표시할 수 있습니다 (최대 2자 지원).

예를 들어, Cor 행렬의 대각선을 모두 NA로 바꾼 다음, na.label 모수로 대각선에 표시되는 문자를 지정해 보겠습니다.

Cor2 <- Cor
diag(Cor2) = NA
corrplot(Cor2, main = "대각선 상의 결측치 표시 : 기본값 ?")
대각선 상의 결측치(NA) 표시

Figure 13.97: 대각선 상의 결측치(NA) 표시

corrplot(Cor2, na.label = "o", main = "대각선 상의 결측치 표시 : o으로 표시")
대각선 상의 결측치(NA) 표시

Figure 13.98: 대각선 상의 결측치(NA) 표시

corrplot(Cor2, na.label = "NA", main = "대각선 상의 결측치 표시 : NA로 표시")
대각선 상의 결측치(NA) 표시

Figure 13.99: 대각선 상의 결측치(NA) 표시

Go Top

13.7.11 레이블에 “plotmath” 표현식 사용

corrplot 패지지의 버전 0.78부터는 변수 이름에 plotmath 표현식을 사용할 수 있습니다. plotmath렌더링을 활성화하려면 ":", "=" 또는 "$"문자 중 하나를 레이블 앞에 붙입니다.

Cor2 <- Cor[1:5,1:5]
colnames(Cor2) <- c("alpha", "beta", ":alpha+beta", ":alpha[0]", 
                    "=alpha[beta]")
rownames(Cor2) <- c("$alpha", "$beta", NA, "$alpha[0]", 
                    "$alpha[beta]")
corrplot(Cor2, main = "레이블에 \"plotmath\" 표현식 사용")
레이블에 plotmath 표현식 사용

Figure 13.100: 레이블에 plotmath 표현식 사용

Go Top

13.7.12 상관도를 유의성 검정과 결합하기

cars <- na.omit(Cars.num)

res1 <- cor.mtest(cars, conf.level = .95)
res2 <- cor.mtest(cars, conf.level = .99)

## 유의수준별 비유의값(insignifance value) 시각화
corrplot(Cor, p.mat = res1$p, sig.level = .2, main = "유의수준 0.2")
상관도를 유의성 검정과 결합하기

Figure 13.101: 상관도를 유의성 검정과 결합하기

corrplot(Cor, p.mat = res1$p, sig.level = .05, main = "유의수준 0.05")
상관도를 유의성 검정과 결합하기

Figure 13.102: 상관도를 유의성 검정과 결합하기

corrplot(Cor, p.mat = res1$p, sig.level = .01, main = "유의수준 0.01")
상관도를 유의성 검정과 결합하기

Figure 13.103: 상관도를 유의성 검정과 결합하기

## 유의 계수가 없는 부분은 공란으로 
corrplot(Cor, p.mat = res1$p, method = "circle", type = "lower", 
         insig = 'blank', addCoef.col ='black', order = "AOE", 
         diag = FALSE,
         main = "상관도를 유의성 검정과 결합하기 : 유의계수가 없는 경우")
상관도를 유의성 검정과 결합하기 : 유의계수가 없는 경우

Figure 13.104: 상관도를 유의성 검정과 결합하기 : 유의계수가 없는 경우

## 유의 계수가 없는 부분에 p-values 표시하기
corrplot(Cor, p.mat = res1$p, insig = "p-value",
         main = "상관도를 유의성 검정과 결합하기 : p-values 표시하기")
상관도를 유의성 검정과 결합하기 : p-values 표시하기

Figure 13.105: 상관도를 유의성 검정과 결합하기 : p-values 표시하기

## 유의계수가 없는 부분에 X 표시 추가하기
corrplot(Cor, p.mat = res1$p, order = "hclust", insig = "pch", addrect = 3,
         main = "유의계수가 없는 부분에 X 표시 추가하기")
유의계수가 없는 부분에 X 표시 추가하기

Figure 13.106: 유의계수가 없는 부분에 X 표시 추가하기

Go Top

13.7.13 신뢰 구간 시각화

corrplot(Cor[1:4, 1:4], low = res1$lowCI, 
         upp = res1$uppCI, 
         order = "hclust",
         tl.pos = 'd', 
         rect.col = "navy", 
         plotC = "rect", 
         cl.pos = "n",
         main = "신뢰 구간 시각화")
신뢰 구간 시각화 1

Figure 13.107: 신뢰 구간 시각화 1

corrplot(Cor, p.mat = res1$p, 
         low = res1$lowCI, upp = res1$uppCI,
         order = "hclust", 
         pch.col = "red", sig.level = 0.01, tl.pos = 'd',
         addrect = 3, rect.col = "navy", 
         plotC = "rect", cl.pos = "n")
신뢰 구간 시각화 2

Figure 13.108: 신뢰 구간 시각화 2

res1 <- cor.mtest(cars, conf.level = .95)

corrplot(Cor, p.mat = res1$p, diag = FALSE, tl.pos = 'd', 
         insig = "label_sig",
         sig.level = c(.001, .01, .05), pch.cex = .9, pch.col = "white")
신뢰 구간 시각화 3

Figure 13.109: 신뢰 구간 시각화 3

corrplot(Cor, p.mat = res1$p, diag = FALSE, tl.pos = 'd',  method = "color",
         insig = "label_sig", pch.col = "white")
신뢰 구간 시각화 4

Figure 13.110: 신뢰 구간 시각화 4

corrplot(Cor, p.mat = res1$p, method = "color", diag = FALSE, 
         type = "upper",
         sig.level = c(.001, .01, .05), pch.cex = .9, 
         insig = "label_sig", pch.col = "white", order = "AOE")
신뢰 구간 시각화 5

Figure 13.111: 신뢰 구간 시각화 5

corrplot(Cor, p.mat = res1$p, diag = FALSE, tl.pos = 'd',
         insig = "label_sig", 
         pch.col = "white", pch = "p<.05", pch.cex = .5, order = "AOE")
신뢰 구간 시각화 6

Figure 13.112: 신뢰 구간 시각화 6