정규분포는 평균을 중심으로 대칭이며, 종모양(bell shape)의  확률 밀도를 갖는 분포이다.

정규분포의 모양과 위치는평균과 표준편차에 의해 결정된다.

확률 밀도 함수는 면적이 확률이되고, 전체 면적은 1이다.

 

파라미터 : µ (평균), σ²(분산)

확률변수표기 : X ~ N(µ , σ²)

기대값 : µ

분산    :  σ²

 

Scipy의 norm 주요 함수

1. pdf : Probability density function. 

    pdf(x, loc=0, scale=1)   

    정규분포의 확률 밀도 함수이다.

2. cdf(x, loc=0, scale=1) : Cumulative distribution function.

     누적 확률 분포함수이다. 특정 x값에서의 확률을 계산할 수 있다.

 

3. sf(x, loc=0, scale=1) : Survival function 

    생존함수라고 하는데 1 - cdf값이다. x 지점에서 남아있는 확률이다.

 

4. ppf(q, loc=0, scale=1) : Percent point function

    특정 분위의 x값을 찾을 수 있다. 예를 들어 75%의 z값등을 구할때

 

5. rvs(loc=0, scale=1, size=1, random_state=None) : Random variates.

    size개수 만큼, 정규분포인 random 값을 return한다.

6. interval(confidence, loc=0, scale=1) : Confidence interval 

    신뢰구간의 하한값 및 상한값을 반환한다. ex) norm.interval(0.95, loc = 10, scale = 2)

 

 

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

mu =100
sigma = 2
size = 1000

x = np.linspace(90, 110, size)
plt.figure(figsize=(8,3))
plt.subplot(2,2,1)
plt.hist(norm.rvs(loc=mu, scale=sigma, size=size), bins=150)
plt.title("Random(RVS)")
plt.subplot(2,2,2)
plt.plot(x, norm.pdf(x, loc=mu, scale=sigma))
plt.title("PDF")
plt.subplot(2,2,3)
plt.plot(x, norm.cdf(x, loc=mu, scale=sigma))
plt.title("CDF")
plt.subplot(2,2,4)
plt.plot(x, norm.sf(x, loc=mu, scale=sigma))
plt.title("SF")
plt.show()

 

 

 

평균이 100이고, 표준편차가 2인 정규분포 곡선을 그리면 아래와 같다.

4 표준편차 90~100 이내에 99.9% 이상의 데이터가 포함된다.

 

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

mu = 100   # 평균
sigma = 2  # 표준편차

histdata = np.random.normal(loc=mu, scale=sigma, size=1000000) 
# numpy random함수로 100만개의 random 정규 분포 데이터를 생성한다.

x = np.linspace(90,110,1000) # 그래프의 x 데이터를 생성한다. 90과 110사이 1000개 데이터
y = stats.norm.pdf(x, loc=mu, scale=sigma) # scipy 의 정규분포 확률 밀도 함수로 y값을 계산한다.

# numpy 의 random함수로 nomal distribution random value생성 히스토그램
plt.hist(histdata, bins=1000, density=True, alpha=0.6)
# scipy 의 normal distribution random value 생성
plt.plot(x,y)

# 평균
plt.axvline(histdata.mean(), color="red", linestyle='--')
plt.text(histdata.mean()+0.1,0.21, "Mean", color="red")

# 표준편차 
plt.axvline(histdata.mean()-histdata.std(), color="green", linestyle='--')
plt.axvline(histdata.mean()+histdata.std(), color="green", linestyle='--')
plt.axvline(histdata.mean()-2*histdata.std(), color="green", linestyle='--')
plt.axvline(histdata.mean()+2*histdata.std(), color="green", linestyle='--')
plt.axvline(histdata.mean()-3*histdata.std(), color="green", linestyle='--')
plt.axvline(histdata.mean()+3*histdata.std(), color="green", linestyle='--')
plt.text(histdata.mean()+histdata.std()+0.1,0.21, "Std", color="green")

plt.show()

정규분포 그래프

 

표준정규분포 (Standard Normal Distribution)

정규분포 중 µ = 0,  σ² = 1인 정규분포 (평균이 0 분산이 1인 정규분포)

파라미터 : 0, 1

확률변수표기 : Z ~ N(0 , 1)

기대값 : 0

분산    :  1

 

예제문제 1:

평균이 15 , 표준편차가 5일 인 정규분포에서 (1) X가 25보다 작을 확률과 X가 10보다 크고 25보다 작을 확률

풀이

   from scipy.stats import norm

   # cdf x, loc, scale
   norm.cdf(25, loc=15, scale=5)

    --> 0.9772
   norm.cdf(25, loc=15, scale=5) - norm.cdf(10, loc=15, scale=5)

    --> 0.8186

 

예제문제2

평균 65, 표준편차 10인 정규분포에서

(1) X가 50이하의 비율

from scipy.stats import norm

norm.cdf(50, loc=65, scale=10)*100

# 6.68

(2) 상위 20%의 X값

norm.ppf(0.8, loc=65, scale=10)

# 73.416

 

예제문제3

고등학교 남학생 키의 평균이 172, 표준편차가 8인 정규 분포 일 때 95% 신뢰구간값은?

norm.interval(0.95, loc=172, scale=8)

(156.32028812367957, 187.67971187632043)

 

예제문제4

수학시험의 평균이 63이고, 표준편차가 10인 정규분포일 때 점수가 50점 이하일 확률과 성적이 상위 10%일 점수는?

(1)norm.cdf(50, loc=63, scale=10)

0.09680048458561036

(2) norm.ppf(0.9, loc=63, scale=10)

75.815515655446

'통계' 카테고리의 다른 글

이상치 처리  (0) 2023.06.17
신뢰구간(Confidnce Interval) 파이썬  (0) 2023.06.10
표준정규분포 (Standard Normal Distribution)  (0) 2023.06.06
포아송분포(Poisson Distribution)  (1) 2023.06.06
이항분포 (Binormal Distribution)  (0) 2023.06.06

+ Recent posts