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 |