더북(TheBook)

피어슨 상관 계수

피어슨 상관 계수Pearson Correlation Coefficient[13]는 두 변수 간의 선형적 상관관계를 측정하며, [-1, 1] 사이의 값을 가진다. 0보다 큰 상관 계수 값은 한 변수가 커지면 다른 변수도 선형적으로 증가함을 뜻하고, 0보다 작은 상관 계수는 한 변수가 커지면 다른 변수가 선형적으로 감소함을 뜻한다. X, Y의 피어슨 상관 계수가 1이면 (X, Y)를 좌표 평면에 그렸을 때 직선으로 나타난다. 0은 두 변수 간 상관관계가 없음을 뜻한다.

피어슨 상관 계수는 선형 관계를 판단하므로 Y = aX + b와 같은 형태의 관계를 잘 찾는다. 반면 Y = aX2 + b와 같은 비선형 관계에서 Y는 X가 증가함에 따라 값이 커지는 것이 확실하지만 값의 증가 형태가 선형이 아니므로 피어슨 상관 계수가 작게 나타날 수 있다.

피어슨 상관 계수는 다음과 같이 정의된다.

식에서 cov(X, Y)는 X, Y의 공분산, σX, σY는 X, Y의 표준 편차다.

<Note> 공분산(Covariance)[14]

공분산은 두 확률 변수가 얼마나 함께 변하는지를 측정한다. 한 변수가 커질 때 다른 변수가 함께 커지거나, 한 변수가 작아질 때 다른 변수가 함께 작아지는 것과 같이 크기 변화의 방향이 같다면 공분산은 양의 값을 가진다. 반대로 한 변수가 커질 때 다른 변수가 작아지거나 한 변수가 작아질 때 다른 변수가 커지면 공분산은 음의 값을 가진다. 만약 두 변수의 값이 서로 상관없이 움직인다면 공분산은 0이다.

공분산의 정의는 다음과 같다.

cov(X, Y) = E[(X - E(X))(Y - E(Y))]

참고로 분산은 다음과 같이 정의된다.

Var(X) = E[(X - E(X))2]

따라서 공분산은 분산을 2개 변수로 확장한 형태로 생각할 수 있다.

다음은 R에서 공분산을 계산하는 예다.

> cov(1:5, 2:6)  # 두 값이 같이 증가하므로 양의 값
[1] 2.5
> cov(1:5, c(3, 3, 3, 3, 3))  # 한쪽 값의 변화에 다른 값이 영향을 받지 않아 0
[1] 0
> cov(1:5, 5:1)  # 값의 증가 방향이 달라 음의 값
[1] -2.5

피어슨 상관 계수는 공분산을 σX σY로 나눠 그 값이 [-1, 1] 사이가 되도록 만들어준 것으로 볼 수 있다.

피어슨 상관 계수는 cor( ) 함수를 사용해 계산한다. 이 절에서 사용하는 함수들에 대해 살펴보자.

표 7-18 상관 계수

cor : 상관 계수를 구한다.

cor(
  x,      # 숫자 벡터, 행렬, 데이터 프레임
  y=NULL, # NULL, 벡터, 행렬 또는 데이터 프레임
  # 계산할 상관 계수의 종류를 지정한다. 피어슨(pearson), 켄달(kendall), 스피어만(spearman)
  # 지정할 수 있으며 기본값은 피어슨이다.
  method=c("pearson", "kendall", "spearman")
)

반환 값은 상관 계수다.

symnum : 숫자를 심볼로 표현한다.

symnum(
  x # 숫자 또는 논릿값의 벡터, 배열
)

반환 값은 숫자를 심볼로 표현한 값이다. x가 숫자인 경우 0.3, 0.6, 0.8, 0.9, 0.95를 기준으로 숫자들을 공백, 마침표(.), 쉼표(,), 더하기(+), 별표(*), B(B)로 대체해 보여준다. 좀 더 세밀한 조정을 위한 인자들은 help(symnum)을 참고하기 바란다.

corrgram::corrgram : 상관 계수 행렬을 그림으로 보여준다.

corrgram::corrgram(
  x, # 한 행에 한 관측값들이 저장된 데이터 프레임 또는 상관 계수 행렬
  type=NULL, # x가 데이터일 때 data, 상관 계수일 때 cor을 지정한다.
             # 그러나 대부분의 경우 지정하지 않아도 잘 동작한다.
  # panel에는 각 셀을 표현할 패널, lower.panel, upper.panel은 우측 상단과 좌측 상단에 그릴 패널,
  # diag.panel, text.panel에는 대각선에 그릴 패널과 문자열 패널을 지정한다.
  # 대각선 외의 패널에는 panel.pts, panel.pie, panel.shade, panel.bar, panel.ellipse,
  # panel.conf를 지정할 수 있으며, 대각선 방향의 패널에는 panel.txt, panel.minmax,
  # panel.density를 지정할 수 있다. 이들 각각은 패널에 어떤 값들을 보여줄지를 의미한다.
  # 예를 들어, panel.conf는 값의 신뢰 구간을 보여준다.
  panel=panel.shade,
  lower.panel=panel,
  upper.panel=panel,
  diag.panel=NULL,
  text.panel=textPanel)
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.