상관분석이란?
상관분석 이해하기
두 변수간에 어떤 선형적 관계를 갖고 있는 지 분석하는 방법이다. 상관분석을 통해 두 변수간의 연관된 정도를 상관계수(correlation coefficient)로 나타낸다. 이 때 상관계수는 연관된 정도만 나타낼 뿐, 인과관계(원인과 결과)의 의미를 갖지 않는다. (※ 인과관계는 보통 회귀분석을 통해 확인하는 경우가 많다.)
상관분석은 보통 연속형 자료끼리 비교할 때, 많이 찾는 분석 방법이지만 연속형vs연속형, 범주형vs범주형, 연속형vs범주형 자료에서도 상관분석을 사용할 수 있고 이 글에서 크게 이 세 가지 유형의 상관분석에 대해 다뤄볼 예정이다.
(with 파이썬 코드)
상관계수와 유의확률(P-value) 해석하기
상관계수는 -1부터 1사이의 값을 가진다. +1 에 가까울수록 양의 상관관계, -1에 가까울수록 음의 상관관계가 강하다.
0에 가까울 수록 상관관계가 없음을 의미한다. (※ Cramer'v 상관분석은 0부터 1사이의 값을 가진다.)
보통 상관계수의 절대값이 0.6 이상이면 강한 상관관계, 0.4 이상 AND 0.6 이하면 약한 상관관계라고 설명하지만, 0.5 이하를 약한 상관관계로 보는 경우도 있다. 분석자의 경험이나 암묵지에 따라 상관계수를 판단하는 조건은 더 보수적일 수 있고, 반대로 유연하게 측정될 수 있다. 하지만 상관계수가 0.6 이하라면 더 구체적인 분석과 충분한 설명이 필요하다.
상관분석의 가설 검정은 모두 귀무가설(H0)을 기각, 대립가설(H1)을 채택해야 변수간 상관성이 있다.
(P-value가 0.05보다 작아야 두 변수간의 상관성이 있다는 얘기)
- 대립가설(H1): 두 변수간의 상관 계수가 0이 아니다.(= 두 변수간에 상관관계가 있다.)
- 귀무가설(H0): 두 변수간의 상관 계수가 0이다.(= 두 변수간에 상관관계가 없다.)
연속형 vs 연속형 상관분석
1. 피어슨 상관분석(Pearson correlation)
- 상관계수는 -1에서 1 사이의 값을 가진다.
- 두 변수가 정규분포를 따라야 사용 가능한 모수적 추론 방법
- 두 변수가 연속형이고 선형 관계를 가져야 한다.
- ex) 국어 점수와 수학 점수의 상관관계
from scipy import stats
# 두 변수간의 피어슨 상관분석
stats.pearsonr(x1, x2)
# 데이터프레임 상관분석
data_df.corr(method = 'pearson')
2. 스피어만 상관분석(Spearman's rank correlation)
- 상관계수는 -1에서 1 사이의 값을 가진다.
- 두 변수가 정규분포를 따르지 않아도 사용 가능한 비모수적 추론 방법
- 두 변수가 비선형 관계를 가져도 사용 가능하고 연속형 뿐만 아니라 순서형, 이산형 데이터일 때 많이 사용한다
- 서열척도가 아닌 자료에 순위나 점수를 매겨 나열 후 분석도 가능함
- 동 순위를 가지지 않는다(↔켄달의 타우: 동 순위를 가진다.)
- 표본이 많고 동점이 많이 없는 경우, 켄달의 타우보다 스피어만을 사용하는 것이 좋음
- ex) 국어 등급과 수학 등급의 상관관계
from scipy import stats
# 두 변수간의 스피어만 상관분석
stats.spearmanr(x1, x2)
# 데이터프레임 스피어만 상관분석
data_df.corr(method = 'spearman')
3. 켄달의 타우(Kendall's tau)
- 상관계수는 -1에서 1 사이의 값을 가진다.
- 두 변수가 정규분포를 따르지 않아도 사용 가능한 비모수적 추론 방법(스피어만과 마찬가지)
- 두 변수가 비선형 관계를 가져도 사용 가능하고 연속형 뿐만 아니라 순서형, 이산형 데이터일 때 많이 사용한다.
- 동 순위를 가진다(↔스피어만: 동 순위를 가지지 않는다.)
- 표본이 적고 동점이 많은 경우, 스피어만보다 켄달의 타우를 사용하는 것이 좋음
from scipy import stats
# 두 변수간의 스피어만 상관분석
stats.kendalltau(x1, x2)
# 데이터프레임 스피어만 상관분석
data_df.corr(method = 'kendall')
범주형 vs 범주형 상관분석
범주형 vs 범주형 상관분석 가설검정은 모두 귀무가설(H0)을 기각, 대립가설(H1)을 채택해야 변수간 상관성이 있다.
1. 파이 상관계수(Phi correlation)
- 상관계수는 -1에서 1 사이의 값을 가진다.
- 두 변수가 모두 이분형(yes or no) 형태일 때 사용한다.(ex. 남과 여, 비만의 여부와 같이 범주가 2개인 경우)
- 통계학에서는 파이(phi) 계수, 머신러닝에서는 매튜스(matthews) 상관계수로 알려져 있음
- ex) 성별과 비만여부(YES or NO) 상관분석
# 이분형 데이터 예제
x = [0,0,0,1,1,1,1]
y = [1,0,0,1,1,1,1]
from sklearn.metrics import matthews_corrcoef
# 매튜 상관계수
matthews_corrcoef(x,y)
2. 크래머 V 계수(Cramer's V)
- 상관계수는 0에서 1 사이의 값을 가진다.
- 크래머 V 계수는 두 변수의 범주가 3개 이상일 때 사용한다.(범주가 2개여도 가능하긴 하다.)
# 크래머 V 테스트를 위한 예제 데이터 만들기
x = [1,0,0,1,1,1,1,2,2,2,2,2]
y = [0,0,0,2,1,1,1,1,2,2,2,2]
# 크래머 V 공식 및 함수 만들기
def cramers_V(var1,var2) :
crosstab =np.array(pd.crosstab(var1,var2, rownames=None, colnames=None)) # Cross table building
stat = chi2_contingency(crosstab)[0] # Keeping of the test statistic of the Chi2 test
obs = np.sum(crosstab) # Number of observations
phi2 = stat / obs
r, k = crosstab.shape
phi2corr = max(0, phi2 - (((k-1)*(r-1))/(obs - 1)))
rcorr = r - ((r-1)**2)/(obs-1)
kcorr = k - ((k-1)**2)/(obs-1)
return np.sqrt(phi2corr / min((kcorr-1), (rcorr-1)))
rows= []
# 만든 예제 데이터 크래머 V 계수 테스트해보기
cramers_V(x, y) # 위 데이터와 똑같이 입력했다면 약 0.57959~ 가 확인된다.
데이터 프레임의 경우 아래 코드 활용
# 데이터프레임 활용 코드
def cramers_V(var1,var2) :
crosstab =np.array(pd.crosstab(var1,var2, rownames=None, colnames=None)) # Cross table building
stat = chi2_contingency(crosstab)[0] # Keeping of the test statistic of the Chi2 test
obs = np.sum(crosstab) # Number of observations
phi2 = stat / obs
r, k = crosstab.shape
phi2corr = max(0, phi2 - (((k-1)*(r-1))/(obs - 1)))
rcorr = r - ((r-1)**2)/(obs-1)
kcorr = k - ((k-1)**2)/(obs-1)
return np.sqrt(phi2corr / min((kcorr-1), (rcorr-1)))
rows= []
for var1 in data_encoded:
col = []
for var2 in data_encoded :
cramers =cramers_V(data_encoded[var1], data_encoded[var2]) # Cramer's V test
col.append(round(cramers,2)) # Keeping of the rounded value of the Cramer's V
rows.append(col)
cramers_results = np.array(rows)
네이버 블로그 참조: https://blog.naver.com/kthchunjae/222290570091
연속형 VS 범주형
1. 점 이연 상관계수(Point-biserial correlation)
- 상관계수는 -1에서 1 사이의 값을 가진다.
- 하나의 범주형 변수가 자연적으로 발생한 이분형(yes or no) 척도이고 다른 연속형 변수일 때 사용한다.
- 자연적으로 발생한 이분형 범주형 데이터의 예시: 성별(인위로 만든 데이터가 아님)
- ex) 성별과 키의 상관분석
from scipy import stats
stats.pointbiserialr(x, y) # x: 이분형 범주형, y: 연속형
2. 이연 상관계수(Biserial correlation)
- 상관계수는 -1에서 1 사이의 값을 가진다.
- 하나의 범주형 변수가 인위적으로 만든 이분형(yes or no) 명명 척도이고 다른 변수가 연속형일 때 사용한다.
- 인위적으로 만든 이분형 범주형 데이터의 예시: 성적(A~D) 중 A~B는 합격, C~D는 불합격으로 만든 경우가 있다.
- 점 이연 상관계수와의 가장 큰 차이점은 이분형 데이터가 자연적인지, 인위적인지의 구분이 가장 크다.
참조자료: https://teval.jalt.org/test/bro_12.htm
3. 폴리시리얼 상관분석(Polyserial correlation)
- 상관계수는 -1에서 1사이의 값을 가진다.
- 하나의 범주형 변수 3개 이상인 명명 척도이고 다른 변수가 연속형일 때 사용한다.
- 현재, 파이썬 코드로는 보이지 않는 듯하다. R에서는 psych나 polycor 패키지를 통해 Polyserial correlation을 지원하는 듯 하니 필요하다면 다음 블로그를 참조해보자
https://basicstatistics.tistory.com/entry/Polychoric-correlations
<참조 자료>
https://lunch-box.tistory.com/109
https://m.blog.naver.com/y4769/220316106603
https://blog.naver.com/breezehome50/222353492058
https://dodonam.tistory.com/217
https://eunhye-zz.tistory.com/29
'데이터분석 > Statistics(통계학)' 카테고리의 다른 글
[통계학] 이산확률분포 이해하기(베르누이, 이항, 기하, 음이항, 초기하, 포아송 with R) (0) | 2024.07.25 |
---|---|
[통계학] 정규성 검정 종류(Shapiro, Kolmogorov, Anderson)와 이해하기 (0) | 2024.07.16 |
[통계학] 중심극한정리(CLT: Central Limit Theorem) 쉽게 설명 (0) | 2024.07.15 |
[통계학] 종속변수가 1개일 때 통계 분석 기법 선택(한 눈에 보기) (0) | 2024.07.08 |