R에서 상관관계 행렬 생성 및 시각화

Jesse John 2023년6월21일
  1. R의 cor() 함수
  2. R에서 상관관계 매트릭스를 만들기 위한 데이터 준비
  3. R에서 상관관계 행렬 시각화하기
  4. 참조
R에서 상관관계 행렬 생성 및 시각화

이 기사에서는 먼저 상관관계 매트릭스를 만들기 위해 데이터를 준비하는 방법을 살펴봅니다. 그런 다음 상관관계 매트릭스를 만들고 시각화합니다.

샘플 코드는 dplyr, ggplot2GGally 패키지를 사용합니다. 이러한 패키지를 사용할 수 없는 경우 설치해야 합니다.

예제 코드:

# Install required packages.

# Uncomment and run the concerned line.
# install.packages("dplyr")
# install.packages("ggplot2")
# install.packages("GGally")

R의 cor() 함수

Base R은 두 숫자 벡터 간의 상관 계수 또는 데이터 프레임 또는 행렬의 숫자 열에 대한 상관 행렬을 계산하는 cor() 함수를 제공합니다.

함수의 설명서는 인수 x, y, usemethod 사용에 대한 세부 정보를 제공합니다.

x 인수는 데이터를 사용합니다. 누락된 데이터가 있는 경우 use 인수가 필요합니다.

방법은 기본적으로 피어슨입니다.

R에서 상관관계 매트릭스를 만들기 위한 데이터 준비

상관 계수는 숫자 데이터에 대해서만 계산할 수 있습니다. 데이터는 단순히 숫자처럼 보여서는 안 됩니다. 숫자 형식이어야 합니다.

다음 샘플 데이터 프레임에는 숫자와 문자 열로 구성된 2단계 열이 있습니다.

숫자가 포함된 열에 대해서도 cor() 함수를 사용할 수 없습니다. 해당 숫자는 숫자 값으로 저장되지 않기 때문입니다.

예제 코드:

# Vectors, data frame.
f1 = as.factor(c(7,7,3,11,7,5,5))
str(f1)
f2 = as.factor(c(6,6,6,12,6,4,2))
str(f2)
s = letters[4:10]

fr = data.frame(s,f1,f2)

# The data frame shows numbers.
fr

# But the numbers are not stored in numeric format.
str(fr)

# Correlation matrix cannot be computed.
cor(fr[2:3])

출력:

> # The data frame shows numbers.
> fr
  s f1 f2
1 d  7  6
2 e  7  6
3 f  3  6
4 g 11 12
5 h  7  6
6 i  5  4
7 j  5  2
> # But the numbers are not stored in numeric format.
> str(fr)
'data.frame':	7 obs. of  3 variables:
 $ s : chr  "d" "e" "f" "g" ...
 $ f1: Factor w/ 4 levels "3","5","7","11": 3 3 1 4 3 2 2
 $ f2: Factor w/ 4 levels "2","4","6","12": 3 3 3 4 3 2 1
> # Correlation matrix cannot be computed.
> cor(fr[2:3])
Error in cor(fr[2:3]) : 'x' must be numeric

데이터가 숫자이지만 요소로 저장되었다고 가정합니다. 해당 열을 숫자로 변환할 수 있습니다.

여기에는 요인 수준이 아닌 올바른 숫자를 얻기 위한 두 단계가 포함됩니다. 먼저 문자로 변환한 다음 숫자로 변환합니다.

예제 코드에서는 dplyr 패키지의 mutate(), across()all_of() 함수와 파이프 연산자 %>%를 사용합니다. 실제 변환은 사용자 지정 함수를 사용하여 수행됩니다.

예제 코드:

library(dplyr)

# This custom function does the actual conversion.
con_fn = function(k){
  return(as.numeric(as.character(k)))
}

# We will convert specific columns to numeric.
fr2 = fr %>% mutate(across(all_of(c("f1","f2")), con_fn))

# The columns are now numeric.
str(fr2)

# Compute the correlation matrix.
cor(fr2[2:3]) # No error now.

출력:

> # The columns are now numeric.
> str(fr2)
'data.frame':	7 obs. of  3 variables:
 $ s : chr  "d" "e" "f" "g" ...
 $ f1: num  7 7 3 11 7 5 5
 $ f2: num  6 6 6 12 6 4 2
> # Compute the correlation matrix.
> cor(fr2[2:3]) # No error now.
          f1        f2
f1 1.0000000 0.7833495
f2 0.7833495 1.0000000

두 숫자 변수에 대한 상관 행렬을 성공적으로 만들었습니다.

R에서 상관관계 행렬 시각화하기

시각화를 만들기 전에 열을 몇 개 더 추가합니다. 마지막 열은 int 유형이며 역시 숫자입니다.

예제 코드:

# Reproducible vectors.
set.seed(555)
n1 = round(rnorm(7)+2,1)
set.seed(222)
n2 = sample(22:42, 7, replace=TRUE)

# Join the columns to the data frame.
fr3 = cbind(fr2, n1, n2)

# Check the structure.
str(fr3)

# Compute the correlation matrix.
cor(fr3[2:5])

출력:

> # Check the structure.
> str(fr3)
'data.frame':	7 obs. of  5 variables:
 $ s : chr  "d" "e" "f" "g" ...
 $ f1: num  7 7 3 11 7 5 5
 $ f2: num  6 6 6 12 6 4 2
 $ n1: num  1.7 2.5 2.4 3.9 0.2 2.9 1.8
 $ n2: int  36 39 41 30 31 30 39
> # Compute the correlation matrix.
> cor(fr3[2:5])
           f1         f2         n1         n2
f1  1.0000000  0.7833495  0.3124483 -0.5809116
f2  0.7833495  1.0000000  0.4938292 -0.4142586
n1  0.3124483  0.4938292  1.0000000 -0.1132145
n2 -0.5809116 -0.4142586 -0.1132145  1.0000000

GGally 패키지의 ggcorr() 함수를 사용하여 상관관계 행렬을 시각화합니다. 이 패키지는 ggplot2 패키지에 의존합니다.

이 함수는 두 가지 작업을 수행한다는 점에 유의해야 합니다. 상관 행렬을 계산한 다음 플로팅합니다.

기본적으로 ggcorr() 함수는 pairwise 관찰(결측값이 있는 경우)을 사용하고 pearson 상관 계수를 계산합니다. 또한 ColorBrewer 팔레트를 사용합니다.

  1. 색상을 연속적으로 등급화할 수 있지만 6개의 개별 값을 사용합니다. 인수 nbreaks=6은 이 결과를 달성합니다.

    이 함수는 범위 -1에서 1까지를 6개의 등간격으로 나눕니다.

  2. 상관 계수 값의 범위가 음수에서 양수까지 다양할 수 있으므로 다양한 색상 팔레트가 필요합니다.

  3. 색맹 친화적인 팔레트를 사용합니다. 이 팔레트는 최대 11개의 고유한 색상 값을 제공할 수 있습니다.

  4. label=TRUE 인수는 색상 타일에 상관 관계 값을 표시합니다.

예제 코드:

# Load the GGally library.
# This loads ggplot2 also.
library(GGally)

# Visualize the correlation matrix.
ggcorr(fr3[2:5], nbreaks=6, palette="PuOr", label=TRUE, label_size=5, size=8, legend.size=10)

상관관계 매트릭스의 도표. 더 어두운 음영은 더 높은 상관관계를 나타냅니다.

상관 범위는 -1(주황색으로 표시)에서 1(보라색으로 표시)까지입니다.

상관 행렬 플롯

상관관계 행렬이 있고 이를 플로팅하고 싶다고 가정합니다. data=NULL을 지정하고 cor_matrix를 사용하여 상관 행렬을 제공하여 ggcorr() 함수를 사용할 수 있습니다.

예제 코드:

# Just three columns, for illustration.
fr4 = cor(fr3[2:4])
fr4

# Only visualize with given correlation matrix.
ggcorr(data = NULL, cor_matrix= fr4, nbreaks=7, label=TRUE, label_size=5, size=8, legend.size=10)

주어진 상관관계 매트릭스의 도표입니다.

주어진 상관 행렬의 플롯

참조

  1. dplyr 기능에 대해서는 문서 패키지를 참조하십시오.
  2. GGally 패키지의 CRAN 페이지는 해당 설명서로 연결됩니다.
작가: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.

관련 문장 - R Matrix