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
를 생성한다.
이를 위해
sapply()
함수를 이용하여 Cars93 데이터 세트의 각 컬럼에 대하여is.numeric()
함수를 이용하여 숫자형 여부를 확인하면 된다. 그 결과를num.col
변수에 대입하게 되면,num.col
은 논리형 벡터가 된다.- 이제 이 논리형 벡터
num.col
을Cars93
데이터 세트의 색인으로 이용하여 서브세팅을 해준다(컬럼의 선택).19
library(MASS)
## Cars93의 각 컬럼에 대하여 numeric 형 여부 확인
<- sapply(Cars93, is.numeric)
num.col 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 형 컬럼만 선택하기
<- Cars93[num.col]
Cars.num 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 ...
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 = "산포도 행렬 그래프")
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(na.omit(Cars.num))
Cor 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
변수에 저장되었습니다.
13.7.5 Corrplot
시각화
앞에서 구한 상관계수 행렬 Cor
에 대하여 corrplot()
함수를 이용하여 시각화할 수 있습니다.
이때 시각화의 방법으로 method =
모수를 지정할 수 있습니다. 기본값은 “circle” 이며, 다음과 같이 다양한 옵션이 있습니다.
corrplot(Cor, method = "circle", main = "Corrplot 시각화 예 1")
corrplot(Cor, method = "square", main = "Corrplot 시각화 예 2")
corrplot(Cor, method = "ellipse", main = "Corrplot 시각화 예 3")
corrplot(Cor, method = "number", main = "Corrplot 시각화 예 4")
corrplot(Cor, method = "shade", main = "Corrplot 시각화 예 5")
corrplot(Cor, method = "color", main = "Corrplot 시각화 예 6")
corrplot(Cor, method = "pie", tl.cex = 0.7, main = "Corrplot 시각화 예 7")
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(Cor, method = "ellipse", type = "upper",
main = "Corrplot 시각화의 레이아웃 : uppper")
corrplot(Cor, type = "lower", main = "Corrplot 시각화의 레이아웃 : lower")
corrplot.mixed()
함수는 혼합형 시각화 스타일을 표시를 위한 결합 함수입니다.
corrplot.mixed(Cor, main = "기본형")
corrplot.mixed(Cor,
lower.col = "black",
number.cex = .5,
main = "하단부 - 검은색(글자크기 : 0.5)")
corrplot.mixed(Cor,
lower = "square",
upper = "circle",
tl.col = "black",
tl.cex = 0.7,
main = "하단부 - 사각형, 상단부 - 원형 (대각선 = 색 : 검정, 글자크기 : 0.7)")
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} \]
여기서 e1과 e2는 상관계수 행렬에서 가장 큰 두 개의 고유값(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 방법")
corrplot(Cor, order = "FPC", main = "FPC 방법")
corrplot(Cor, order = "hclust", main = "hclust 방법")
"hclust"
를 사용하는 경우 corrplot ()
은 계층적 클러스터링의 결과에 따라 다음과 같이 상관계수 행렬 그림 주위에 사각형을 그릴 수 있습니다.
corrplot(Cor,
order = "hclust",
addrect = 3,
main = "상관계수 행렬의 정렬 : hclust의 경우")
13.7.8 색 지정
상관계수 행렬 그래프는 다양한 구성요소를 갖는데 이에 대하여 다양한 모수를 이용하여 색을 지정할 수 있습니다.
여기서는 cl.pos
와 col
그리고 bg
모수에 대하여 간단히 살펴 보겠습니다.
cl.pos
: 문자 또는 논리값; 만일 문자라면 “r” (default if type==“upper” or “full”), “b” (default if type==“lower”) 또는 “n” 중의 한 값을 가집니다. 여기서, “n”은 컬러 레이블을 그리지 않는다는 의미입니다.
col
: 벡터. 도형의 색상을 나타냅니다. cl.lim
구간에서 일양분포(uniform distribution) 형태를 갖습니다. col
이 NULL
값인 경우 col
은 colorRampPalette(col2)(200)
이 될 것입니다
bg
: 배경색을 지정합니다.
# 배경색을 옅은 파란색으로 변경하기
corrplot(Cor,
type = "upper",
order = "hclust",
cl.pos = "n",
col = c("black", "white"),
bg = "lightblue",
main = "상관계수 행렬 그래프 : 색 지정")
13.7.8.1 색상 스펙트럼 사용
위에서 볼 수 있듯이 상관 관계도의 색상을 사용자가 지정할 수 있습니다. colorRampPalette()
함수는 색상 스펙트럼을 생성하는 데 매우 편리하게 해 줍니다.
## [-N, 0] or [0, N] 형태의 행렬에 적합한 색상의 예
<- colorRampPalette(c("white", "cyan", "#007FFF", "blue","#00007F"))
col0
## diverging color example, suitable for matrix in [-N, N]
<- colorRampPalette(c("#7F0000", "red", "#FF7F00", "yellow", "white",
col1 "cyan", "#007FFF", "blue", "#00007F"))
<- colorRampPalette(c("#67001F", "#B2182B", "#D6604D", "#F4A582",
col2 "#FDDBC7", "#FFFFFF", "#D1E5F0", "#92C5DE",
"#4393C3", "#2166AC", "#053061"))
<- colorRampPalette(c("red", "white", "blue"))
col3 <- colorRampPalette(c("#7F0000", "red", "#FF7F00", "yellow", "#7FFF7F",
col4 "cyan", "#007FFF", "blue", "#00007F"))
<- c("white", "black")
whiteblack
## 위에서 지정한 색상 스펙트럼의 사용
corrplot(Cor, order = "hclust", addrect = 2, col = col1(100), main = "색상 스펙트럼 1")
corrplot(Cor, order = "hclust", addrect = 2, col = col2(50), main = "색상 스펙트럼 2")
corrplot(Cor, order = "hclust", addrect = 2, col = col3(20), main = "색상 스펙트럼 3")
corrplot(Cor, order = "hclust", addrect = 2, col = col4(10), main = "색상 스펙트럼 4")
corrplot(Cor, order = "hclust", addrect = 2, col = whiteblack, bg = "gold2", main = "색상 스펙트럼 5")
13.7.8.2 표준 색상 팔레트의 사용
여러분은 또한 표준 색상 팔레트 (grDevices
패키지)를 사용할 수도 있습니다.
corrplot(Cor,
order = "hclust",
addrect = 2,
col = cm.colors(100),
main = "상관계수 행렬 그래프 : 표준 색상 팔레트의 사용")
또 다른 옵션은 RcolorBrewer
패키지의 brewer.pal()
함수를 사용하는 것입니다.
library(RColorBrewer)
corrplot(Cor,
type = "upper",
order = "hclust",
col = brewer.pal(n = 8, name = "RdBu"),
main = "RcolorBrewer 팔레트의 사용")
13.7.8.3 텍스트 레이블과 색상 레이블 그리고 회전 변경
매개 변수 cl.*
는 색상 레이블용이고 tl.*
은 텍스트 레이블용입니다.
텍스트 레이블의 경우 tl.col
(텍스트 레이블 색상)과 tl.srt
(텍스트 레이블 문자열 회전)를 사용하여 텍스트 색상과 회전을 변경하여 적용할 수 있습니다.
예를 들어 보겠습니다.
## 색상 범례, 텍스트 범례 그리고 주 대각선의 기호 제거
corrplot(Cor,
order = "AOE",
cl.pos = "n",
tl.pos = "n",
diag = FALSE,
main = "색상 범례, 텍스트 범례 그리고 주 대각선의 기호 제거")
## 하단부 색상 범례, 대각선 텍스트 범례, 텍스트 레이블의 회전
corrplot(Cor,
order = "AOE",
cl.pos = "b",
tl.pos = "d",
main = "하단부 색상 범례, 대각선 텍스트 범례, 텍스트 레이블의 회전")
## 오른 쪽으로 정렬된 숫자를 표시하는 더 넓은 색상 범례
corrplot(Cor,
order = "AOE",
cl.ratio = 0.2,
cl.align = "r",
main = "오른 쪽으로 정렬된 숫자를 표시하는 더 넓은 색상 범례")
## 텍스트 레이블 45도 회전
corrplot(Cor,
type = "lower",
order = "hclust",
tl.col = "black",
tl.srt = 45,
main = "텍스트 레이블 45도 회전")
13.7.8.4 cl.lim
을 이용한 색상 구간의 지정과 표시
cl.lim
모수를 이용하여 색상 레이블의 구간을 지정할 수 있습니다.
기본값의 범위는 [-1, 1]입니다.
# is.corr = TRUE (기본 값)로 설정하면, cl.lim 만이 색상 범례에 영향을 줍니다.
corrplot(Cor/2)
# 구간을 [-0.5, 0.5]로 변경합니다.
corrplot(Cor/2,
cl.lim = c(-0.5,0.5))
# is.corr = FALSE로 설정된 경우에도, cl.lim을 이용하여 색상을 할당할 수 있습니다.
corrplot(Cor*2,
is.corr = FALSE,
cl.lim = c(-2, 2))
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
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")
13.7.9.1 직사각형 형태의 행렬
행렬이 직사각형인 경우에는 win.asp
매개 변수를 사용하여 가로와 세로 비율을 조정하여 행렬을 정사각형으로 렌더링할 수 있습니다.
<- matrix(rnorm(70), ncol = 7)
ran corrplot(ran, is.corr = FALSE, win.asp = .7, method = "circle",
main = "직사각형 형태의 행렬 시각화")
13.7.10 결측치(NA
)의 표시
기본적으로 corrplot()
은 상관계수 행렬의 대각선에 있는 NA
값을 "?"
문자로 렌더링합니다. na.label
매개 변수를 사용하면 여기에 원하는 값을 표시할 수 있습니다 (최대 2자 지원).
예를 들어, Cor
행렬의 대각선을 모두 NA
로 바꾼 다음, na.label
모수로 대각선에 표시되는 문자를 지정해 보겠습니다.
<- Cor
Cor2 diag(Cor2) = NA
corrplot(Cor2, main = "대각선 상의 결측치 표시 : 기본값 ?")
corrplot(Cor2, na.label = "o", main = "대각선 상의 결측치 표시 : o으로 표시")
corrplot(Cor2, na.label = "NA", main = "대각선 상의 결측치 표시 : NA로 표시")
13.7.11 레이블에 “plotmath” 표현식 사용
corrplot
패지지의 버전 0.78부터는 변수 이름에 plotmath
표현식을 사용할 수 있습니다. plotmath
렌더링을 활성화하려면 ":"
, "="
또는 "$"
문자 중 하나를 레이블 앞에 붙입니다.
<- Cor[1:5,1:5]
Cor2 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\" 표현식 사용")
13.7.12 상관도를 유의성 검정과 결합하기
<- na.omit(Cars.num)
cars
<- cor.mtest(cars, conf.level = .95)
res1 <- cor.mtest(cars, conf.level = .99)
res2
## 유의수준별 비유의값(insignifance value) 시각화
corrplot(Cor, p.mat = res1$p, sig.level = .2, main = "유의수준 0.2")
corrplot(Cor, p.mat = res1$p, sig.level = .05, main = "유의수준 0.05")
corrplot(Cor, p.mat = res1$p, sig.level = .01, main = "유의수준 0.01")
## 유의 계수가 없는 부분은 공란으로
corrplot(Cor, p.mat = res1$p, method = "circle", type = "lower",
insig = 'blank', addCoef.col ='black', order = "AOE",
diag = FALSE,
main = "상관도를 유의성 검정과 결합하기 : 유의계수가 없는 경우")
## 유의 계수가 없는 부분에 p-values 표시하기
corrplot(Cor, p.mat = res1$p, insig = "p-value",
main = "상관도를 유의성 검정과 결합하기 : p-values 표시하기")
## 유의계수가 없는 부분에 X 표시 추가하기
corrplot(Cor, p.mat = res1$p, order = "hclust", insig = "pch", addrect = 3,
main = "유의계수가 없는 부분에 X 표시 추가하기")
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 = "신뢰 구간 시각화")
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")
<- cor.mtest(cars, conf.level = .95)
res1
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")
corrplot(Cor, p.mat = res1$p, diag = FALSE, tl.pos = 'd', method = "color",
insig = "label_sig", pch.col = "white")
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")
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")