데이터 분석/통계

상관분석(Correlation Analysis) : 상관관계로 분석하기

DS지니 2021. 6. 18. 15:27
728x90
반응형

1. 의미

[위키백과]

상관분석은 확률론과 통계학에서 두 변수간에 어떤 선형적 관계를 갖고 있는 지를 분석하는 방법이다. 두 변수는 서로 독립적인 관계로부터 서로 상관된 관계일 수 있으며 이때 두 변수 간의 관계의 강도를 상관관계(Correlation, Correlation coefficient)라 한다. 상관분석에서는 상관관계의 정도를 나타내는 단위로 모상관계수로 p를 사용하며 표본 상관 계수로 r을 사용한다.

상관관계의 정도를 파악하는 상관계수(Correlation coeffecient)는 두 변수간의 연관된 정도를 나타낼 뿐 인과관계를 설명하진 않는다. 두 변수간의 원인과 결과의 인과관계가 있는지에 대한 것은 회귀분석을 통해 인관관계의 방향, 정도와 수학적 모델을 확인해 볼 수 있다.

 

 

 

2. 결과

상관관계가 0<ρ≤+1 이면 양의 상관, -1≤ρ<0 이면 음의 상관, ρ=0이면 무상관이라고 한다. 하지만 0인 경우 상관이 없다는 것이 아니라 선형의 상관관계가 아니라는 것이다.

 

 

 

3. 분석 방법 종류

1) 피어슨 상관 계수(Pearson correlation coefficient, Pears's r)

  • 변수들간의 관련성을 구하는 이변량 상관분석(bivariate analysis)에서 보편적으로 이용된다.

 

 

 

2) 스피어만 상관 계수(Spearman correlation coefficient)

  • 데이터가 서열척도인 경우 즉, 자료의 값 대신 순위를 이용하는 경우의 상관 계수이다.
  • 데이터를 작은 것부터 차례로 순위를 매겨 서열 순서로 바꾼 뒤 순위를 이용해 상관 계수를 구한다.
  • 두 변수 간의 연관 관계가 있는지 없는지를 밝혀주며 자료에 이상점이 있거나 표본크기가 작을 때 유용하다.
  • 두 변수 안의 순위가 완전히 일치하면 +1이고, 두 변수의 순위가 완전히 반대이면 -1이 된다.
  • 예를 들어 수학 잘하는 학생이 영어를 잘하는 것과 상관있는지 없는지를 알아보는데 쓰일 수 있다.

 

3) 크론바흐 알파 계수 신뢰도(Reliability of Cronbach's alpha coefficient)

  • 신뢰도 계수 α는 검사의 내적 일관성 신뢰도를 나타내는 값으로서 한 검사 내에서의 변수들 간의 평균상관관계에 근거해 검사문항들이 동질적인 요소로 구성되어 있는지를 분석하는 것이다. 
  • 동일한 개념이라면 서로 다른 독립된 측정 방법으로 측정했을 때 결과가 비슷하게 나타날 것이라는 가정을 바탕으로 한다.
  • 예를 들어 설문지 조사의 경우, 같은 내용의 질문을 다른 형태로 반복하여 질문한 다음 같게 대답했는지를 검사하여 신뢰도를 알아 볼 수 있다. 
  • 일반적으로는 요인분석을 하여 요인들을 추출하고 이들 요인들이 동질 변수들로 구성되어 있는지를 확인할 때 이용한다. 사전조사나 같은 속성의 질문을 반복하여 신뢰도를 높일 수 있다.

 

4. 파이썬 코드

1) Numpy

# Pearson correlation coefficients.

>>> import numpy as np
>>> x = np.arange(10, 20)
>>> x
array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
>>> y = np.array([2, 1, 4, 5, 8, 12, 18, 25, 96, 48])
>>> y
array([ 2,  1,  4,  5,  8, 12, 18, 25, 96, 48])


>>> r = np.corrcoef(x, y)
>>> r
array([[1.        , 0.75864029],
       [0.75864029, 1.        ]])
>>> r[0, 1]
0.7586402890911867
>>> r[1, 0]
0.7586402890911869

        x       y

x    1.00    0.76
y    0.76    1.00

 

2) Scipy ( 상관계수 + p-value )

>>> import numpy as np
>>> import scipy.stats
>>> x = np.arange(10, 20)
>>> y = np.array([2, 1, 4, 5, 8, 12, 18, 25, 96, 48])

>>> scipy.stats.pearsonr(x, y)    # Pearson's r
(0.7586402890911869, 0.010964341301680832)

>>> scipy.stats.spearmanr(x, y)   # Spearman's rho
SpearmanrResult(correlation=0.9757575757575757, pvalue=1.4675461874042197e-06)

>>> scipy.stats.kendalltau(x, y)  # Kendall's tau
KendalltauResult(correlation=0.911111111111111, pvalue=2.9761904761904762e-05)
>>> scipy.stats.pearsonr(x, y)[0]    # Pearson's r
0.7586402890911869
>>> scipy.stats.spearmanr(x, y)[0]   # Spearman's rho
0.9757575757575757
>>> scipy.stats.kendalltau(x, y)[0]  # Kendall's tau
0.911111111111111



>>> scipy.stats.spearmanr(x, y).correlation   # Spearman's rho
0.9757575757575757
>>> scipy.stats.kendalltau(x, y).correlation  # Kendall's tau
0.911111111111111



>>> r, p = scipy.stats.pearsonr(x, y)
>>> r
0.7586402890911869
>>> p
0.010964341301680829

 

3) Pandas

>>> import pandas as pd
>>> x = pd.Series(range(10, 20))
>>> x
0    10
1    11
2    12
3    13
4    14
5    15
6    16
7    17
8    18
9    19
dtype: int64

>>> y = pd.Series([2, 1, 4, 5, 8, 12, 18, 25, 96, 48])
>>> y
0     2
1     1
2     4
3     5
4     8
5    12
6    18
7    25
8    96
9    48
dtype: int64

>>> x.corr(y)                     # Pearson's r
0.7586402890911867
>>> y.corr(x)
0.7586402890911869
>>> x.corr(y, method='spearman')  # Spearman's rho
0.9757575757575757
>>> x.corr(y, method='kendall')   # Kendall's tau
0.911111111111111

 

import pandas as pd

lst = [[1,2,3,4,5,6,7],
        [10,15,20,25,50,55,60],
        [0,0,0,0,0,0,0],
        [-1,-20,-30,-45,-50,-55,-70]]

df = pd.DataFrame(lst).T
corr = df.corr(method = 'pearson')
print(corr)

 

728x90
반응형

'데이터 분석 > 통계' 카테고리의 다른 글

표본 추출 방법  (0) 2021.10.25
기술통계 vs 추리통계  (0) 2021.10.18
통계 기본 단어 정리  (0) 2021.10.18