피어슨 상관 계수
피어슨 상관 계수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의 표준 편차다.
공분산은 두 확률 변수가 얼마나 함께 변하는지를 측정한다. 한 변수가 커질 때 다른 변수가 함께 커지거나, 한 변수가 작아질 때 다른 변수가 함께 작아지는 것과 같이 크기 변화의 방향이 같다면 공분산은 양의 값을 가진다. 반대로 한 변수가 커질 때 다른 변수가 작아지거나 한 변수가 작아질 때 다른 변수가 커지면 공분산은 음의 값을 가진다. 만약 두 변수의 값이 서로 상관없이 움직인다면 공분산은 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( ) 함수를 사용해 계산한다. 이 절에서 사용하는 함수들에 대해 살펴보자.
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) |