반응형
파이썬 정규분포 확률밀도함수 관련 값 추출 방법
파이썬에서 Scipy의 기능을 통해 정규분포를 정의하고,
정의된 분포 내에서 특정 위치의 확률밀도함수, 누적분포함수 및 백분위수 값을
각각 pdf, cdf 및 ppf 메소드를 활용해 찾는 방법에 대하여 다루어보겠습니다.
Scipy 정규분포 객체 정의 방법
정규분포의 확률밀도함수를 찾기 위하여 먼저 정규분포 객체를 정의해주어야 합니다. 이는
scipy.stats.norm 함수 내에 loc = 평균, scale = 표준편차 형태로 지정해주시면 됩니다.
import scipy.stats
# 평균 = 100, 표준편차 = 50인 정규분포 객체 정의
norm_dist = scipy.stats.norm(loc = 100, scale = 50)
확률밀도함수 값 탐색 : pdf 메소드
정의된 정규분포 객체에 대하여 특정 점에서의 확률밀도함수 값을 찾기 위해서는
객체명.pdf(점의 위치) 형태로 코드를 작성해주시면 됩니다.
# x = 135에서의 확률밀도함수 값 탐색
norm_dist.pdf(135) # 0.0062450786673352255
확률밀도함수를 그려보고 x = 135인 점에서 값을 표시해본 결과는 아래와 같습니다.
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 200, 1000)
density = norm_dist.pdf(x)
plt.plot(x, density)
plt.scatter(135, norm_dist.pdf(135), c = 'r') # x = 135인점 표시
plt.plot([-10, 135], [norm_dist.pdf(135), norm_dist.pdf(135)], 'r--')
plt.xlabel('x')
plt.ylabel('density')
plt.xlim(0, 200)
plt.show()
반응형
누적분포함수 값 탐색 : cdf 메소드
이번에는 정의된 정규분포 객체에 대하여 원하는 특정 점에서의 누적분포함수 값을
찾는 방법입니다. 이는 위의 예제에서 pdf 대신 cdf로만 바꿔서 코드를 작성해주시면 됩니다.
# x = 160까지의 누적분포함수 값 탐색
norm_dist.cdf(160) # 0.8849303297782918
마찬가지로, 누적분포함수 그래프 및 x = 160에서의 값을 시각화한 결과는 다음과 같습니다.
x = np.linspace(0, 200, 1000)
density = norm_dist.cdf(x)
plt.plot(x, density)
plt.scatter(160, norm_dist.cdf(160), c = 'r') # x = 160인점 표시
plt.plot([-10, 160], [norm_dist.cdf(160), norm_dist.cdf(160)], 'r--')
plt.xlabel('x')
plt.ylabel('cumulative probability')
plt.xlim(0, 200)
plt.show()
백분위수 값 탐색 : ppf 메소드
위 예제들과 비슷한 방법으로 정규분포에서 특정 확률까지의 누적 백분위수 탐색도 가능합니다.
여기서는 위의 예제들에서 pdf나 cdf의 위치에 ppf를 넣고, input으로 원하는 누적 확률 값을
적어주시면 됩니다.
# 누적 분포 확률 값이 0.95인 x값 탐색
norm_dist.ppf(0.95) # 182.2426813475736
마찬가지로, 누적분포확률의 역함수 그래프와 누적 확률이 0.95인 점을 시각화해보면
아래와 같이 나타납니다.
p = np.linspace(0, 1.0, 1000)
density = norm_dist.ppf(p)
plt.plot(p, density)
plt.scatter(0.95, norm_dist.ppf(0.95), c = 'r') # p = 0.95인점 표시
plt.plot([-0.05, 0.95], [norm_dist.ppf(0.95), norm_dist.ppf(0.95)], 'r--')
plt.xlabel('cumulative probability')
plt.ylabel('x')
plt.xlim(0, 1)
plt.show()
참고로, 이 방법들은 정규분포 외의 다른 연속확률분포에도 비슷하게 적용이 가능합니다.
'Python > Scipy' 카테고리의 다른 글
[Scipy] 파이썬 p-value 찾기 방법 정리(T-test, 회귀 분석) (0) | 2022.07.13 |
---|---|
[Scipy] 파이썬 t-검정 정리 : 단일표본, 독립표본, 대응표본 (2) | 2022.02.27 |
[Scipy] 파이썬 상관계수 구하기 함수 정리(피어슨, 스피어만, 켄달) (0) | 2022.02.20 |