본문 바로가기
Big Data/DataAnalysis & Manipulate

정규분포 표현과 통계적 계산

by Wikinist 2023. 8. 9.

정규 분포 표현

scipy.stats 모듈은 SciPy 라이브러리의 일부로, 다양한 확률 분포와 통계 관련 기능을 제공하는 모듈입니다. 정규 분포를 표현하고 다양한 통계 계산을 수행하는 데 사용할 수 있습니다. 아래는 scipy.stats 모듈을 사용하여 정규 분포를 표현하는 예제 코드입니다.

먼저, 필요한 라이브러리를 가져오고 정규 분포를 생성하는 예제를 살펴보겠습니다.

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

# 정규 분포의 평균과 표준편차
mu = 0
sigma = 1

# 정규 분포 객체 생성
normal_dist = norm(mu, sigma)

# 확률 밀도 함수(Probability Density Function, PDF) 계산
x = np.linspace(-5, 5, 1000)
pdf = normal_dist.pdf(x)

# 확률 밀도 함수 그래프 그리기
plt.plot(x, pdf, label='Normal Distribution')
plt.title('Probability Density Function of Normal Distribution')
plt.xlabel('x')
plt.ylabel('PDF')
plt.legend()
plt.grid()
plt.show()

위 코드에서는 norm(mu, sigma) 함수를 사용하여 평균 mu와 표준편차 sigma를 가진 정규 분포 객체를 생성합니다. 이후에는 pdf() 함수를 사용하여 주어진 범위의 확률 밀도 함수를 계산하고 그래프로 그립니다.

또한, 정규 분포에서 다양한 통계 계산을 수행할 수도 있습니다. 아래는 몇 가지 예제입니다.

# 누적 분포 함수(Cumulative Distribution Function, CDF) 값 계산
x_value = 1.5
cdf_value = normal_dist.cdf(x_value)
print(f"CDF at x = {x_value}: {cdf_value}")

# 퍼센트 포인트 함수(Percent-Point Function, PPF) 값 계산
percentile = 0.75
ppf_value = normal_dist.ppf(percentile)
print(f"PPF at {percentile*100}%: {ppf_value}")

# 평균, 분산, 표준편차 계산
mean = normal_dist.mean()
variance = normal_dist.var()
std_dev = normal_dist.std()
print(f"Mean: {mean}, Variance: {variance}, Standard Deviation: {std_dev}")

위 코드에서는 cdf() 함수를 사용하여 누적 분포 함수 값을 계산하고, ppf() 함수를 사용하여 주어진 퍼센트 포인트의 값(분위수)을 계산합니다. 또한, .mean(), .var(), .std() 함수를 사용하여 평균, 분산, 표준편차를 계산할 수 있습니다.

이러한 방식으로 scipy.stats 모듈을 사용하여 정규 분포를 표현하고 다양한 통계적 계산을 수행할 수 있습니다.

scipy.stats 모듈의 norm 클래스와 관련 함수

아래에서는 scipy.stats 모듈의 norm 클래스와 관련 함수들에 대해 자세히 설명하겠습니다.

norm 클래스 (정규 분포 클래스):

norm 클래스는 정규 분포를 나타내는 객체를 생성하는데 사용됩니다. 이 클래스는 평균(loc)과 표준편차(scale) 매개변수를 가지며, 이러한 매개변수로 정규 분포 객체를 초기화합니다.

pdf(x) 함수 (Probability Density Function, 확률 밀도 함수)

확률 밀도 함수(PDF)는 특정 값 x에서 확률 분포의 밀도를 나타냅니다. pdf(x) 함수는 주어진 x 값에 대한 정규 분포의 확률 밀도 값을 계산합니다.

cdf(x) 함수 (Cumulative Distribution Function, 누적 분포 함수)

누적 분포 함수(CDF)는 확률 변수가 특정 값보다 작거나 같은 확률을 나타냅니다. cdf(x) 함수는 주어진 x 값에 대한 정규 분포의 누적 분포 값을 계산합니다.

ppf(q) 함수 (Percent-Point Function, 누적 분포 함수의 역함수)

  • ppf는 Percent Point Function의 약어로, 누적 분포 함수(Cumulative Distribution Function, CDF)의 역함수입니다.
  • 확률 분포에서 주어진 확률 값(p)에 대응하는 값을 찾아냅니다.
  • 예를 들어, 정규 분포의 경우, ppf 함수를 사용하여 특정 확률 값에 대한 Z-점수(표준 정규 분포에서의 값)를 계산할 수 있습니다.
  • Python의 SciPy 라이브러리에서는 scipy.stats 모듈 아래에서 각종 확률 분포의 ppf 함수를 사용할 수 있습니다.

isf(q) 함수 (Inverse Survival Function, 생존 함수의 역함수)

  • isf는 Inverse Survival Function의 약어로, 생존 함수(Survival Function, SF)의 역함수입니다.
  • 생존 함수는 주어진 값보다 크거나 같은 값이 나올 확률을 나타냅니다. isf 함수는 이 확률 값에 대응하는 값을 계산해줍니다.
  • ppf 함수와 유사하지만, 확률 값을 다르게 해석한다는 점에서 차이가 있습니다.
  • isf 함수도 SciPy의 scipy.stats 모듈에서 각종 확률 분포에 대해 사용할 수 있습니다.

아래는 각 함수를 사용한 예제 코드입니다.

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

# 정규 분포의 평균과 표준편차
mu = 0
sigma = 1

# 정규 분포 객체 생성
normal_dist = norm(mu, sigma)

# x 값 범위 설정
x = np.linspace(-5, 5, 1000)

# PDF 계산 및 그래프 그리기
pdf = normal_dist.pdf(x)
plt.plot(x, pdf, label='PDF')
plt.title('Probability Density Function of Normal Distribution')
plt.xlabel('x')
plt.ylabel('PDF')
plt.legend()
plt.grid()
plt.show()

# CDF 계산 예제
cdf_value = normal_dist.cdf(1.5)
print(f"CDF at x = 1.5: {cdf_value}")

# PPF 계산 예제
quantile = normal_dist.ppf(0.75)
print(f"Quantile at 0.75: {quantile}")

# ISF 계산 예제
quantile = normal_dist.isf(0.05)
print(f"Quantile at 0.05: {quantile}")

위 코드에서 pdf, cdf, ppf, isf 함수를 사용하여 정규 분포의 확률 밀도 함수, 누적 분포 함수 값, 누적 분포 함수의 역함수 값, 생존 함수의 역함수 값 계산 방법을 보여줍니다.

해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.

'Big Data > DataAnalysis & Manipulate' 카테고리의 다른 글

pandas DataFrame 인덱스  (0) 2023.08.10
ANOVA 예제  (0) 2023.08.10
t-검정 수행  (0) 2023.08.09
Tukey 이상치 검출  (0) 2023.08.09
numpy histogram()  (0) 2023.08.08