numpy, scipy.stat 모듈에서는 친절하게(?) 기초 통계량을 구현할 수 있는 코드들이 준비되어 있다.
대표값 계산
평균값, 중앙값은 numpy로 이미 구현이 되어 있으나, 최빈값은 그러지 않다.
최빈값은 sp.stats.mode를 통해 확인 가능
a = np.array([13, 20, 15, 30, 22, 13, 15, 20, 24, 30, 35, 19, 24, 22, 26, 30])
print("평균 : %.2f" %(np.mean(a)))
print("표본중앙 : %.2f" %(np.median(a)))
print("argmax : %.2f" %(np.argmax(a))) # 최댓값 위치
# 최빈값의 경우는 조금 다름
print(sp.stats.mode(a))
# 다음과 같이 최빈값과, 그 개수가 나온다.
표본편차, 분산, 사분위수
print("분산 : %.2f" %(np.var(a)))
print("표준편차 : %.2f" %(np.std(a)))
# 사분위수 : 제1사분위 25, 제2 중간, 제3 75
print("제1사분위수 : %.2f" %(np.quantile(a, 0.25)))
print("제2사분위수 : %.2f" %(np.quantile(a, 0.5)))
print("제3사분위수 : %.2f" %(np.quantile(a, 0.75)))
# 사분위간 범위 : 제3사분위수 - 제1사분위수
비대칭도(왜도), 첨도
print("왜도 : %.2f" %(sp.stats.skew(a)))
print("첨도 : %.2f" %(sp.stats.kurtosis(a)))
왜도는 분포의 비대칭도를 나타내는 통계량이다.
- 왜도가 0보다 작으면, 좌측으로 쏠린 데이터, 오른쪽으로 긴 꼬리를 가진다.
- 왜도가 0보다 크면, 우측으로 쏠린 데이터, 좌측으로 긴 꼬리를 가진다.
첨도의 경우는, 중앙부분의 밀집도(뾰족함)에 대한 정보를 주는 통계량이다.
- 첨도가 0보다 크면, 정규분포보다 꼬리가 더 길다.
- 첨도가 0보다 작으면, 중앙에 더 분포가 집중된다.
공분산과 상관계수
x = [-5, -2, -1, 0, 1, 2, 4]
y = [-7, -4, -3, 0, 2, 4, 5]
np.cov(x, y)
# 정확히는 공분산 행렬을 얻게 된다.
# 따라서, np.cov(x, y)[0, 1]로.
# 상관계수 출력
print(np.corrcoef(x, y)[0, 1])
# 유도과정
cov = np.cov(x, y)[0, 1]
xsd = np.std(x, ddof = 1)
ysd = np.std(y, ddof = 1)
print(cov / (xsd * ysd))
# Remark.
# 상관계수 검증법
# p-val 값이 유의수준이하일 경우 계수는 유의미.
sp.stats.pearsonr(x, y)
공분산은, 두 변수가 함께 변화하는 정도를 나타내는 지표다.
상관계수는 공분산에서, 두 변수의 표준편차를 나눠주는 지표(즉 -1 ~ 1 사이의 값을 가지게)
두 변수 모두, 선형성을 측정하는 지표가 된다.
'Archive > 수학 & 통계학 관련' 카테고리의 다른 글
[Stat] 선형회귀분석이란? (0) | 2021.05.26 |
---|---|
[Stat] Inverse CDF technique (0) | 2021.05.24 |
[Stat] 정규성의 검정 (0) | 2021.05.10 |
[Math] Entropy (0) | 2021.05.01 |
[Stat] 통계적 추정과 검정(수정) (4) | 2021.04.30 |