★Seaborn에서의 Subplots★이항확률의 근사 확률★푸아송분포★기초통계학-[Chapter05 - 이산확률분포-05]
1. 이항확률의 근사 확률
==> 시행 횟수 n이 30보다 큰 경우의 이항확률을 구하기 위한 푸아송 분포 이용한 근사 확률 구할 수 있다.
==> 충분히 큰 n에 대햐여 np =뮤 가 일종하면 B(n ,p ) ~~ P(뮤)이므로 푸아송 분포를 이용하여 이항분포의 확률을 근사적으로 구할 수 있다.
그러나 p가 충분히 작지 않은 경우에는 푸아송 근사를 적용하지 않는다.
fig , axes = plt.subplots(3,2) #3행 2열
fig.set_size_inches((20, 15)) #격자 크기 설정
# 격자 여백 설정
plt.subplots_adjust(wspace = 0.3, hspace = 0.41) #가로방향은 wspace , 세로방향은 hspace
t = 0
# n_list = [4,10,50,100,101,102]
# p_list = [0.5 , 0.2, 0.04 , 0.02 , 0.04 , 0.002]
n_list = [4,5,7,9,10,20]
p_list = [0.5 ,0.4, 0.3 , 0.2 , 0.2 , 0.1]
for i in range(3):
for j in range(2):
n = np.arange(n_list[t])
p = p_list[t]
np2 = len(n)*p
x = [i for i in range(19)]
a ,b = [] , []
for x_1 in x:
a.append(len(list(itertools.combinations(n , x_1))) *(math.pow(p , x_1)) *(math.pow(1-p , len(n) - x_1))) #이항분포 공식
b.append( ((np2 ** x_1) * math.exp(-np2)) / (fact(x_1)) ) # 푸아송 공식
A = pd.DataFrame([a , b])
A= A.T
ax = sns.lineplot(x= np.arange(19) , y = A.iloc[:,0] ,color='blue', # 색상
linestyle='-', # 라인 스타일
marker='o' ,ax = axes[i,j]) # 마커)
ax.set_yticks(np.arange(0,0.41 , 0.1))
ax.set_xticks(np.arange(19))
ax.set_title('이항확률의 근사 확률' , fontsize = 15 , fontweight = 'bold')
ax.set_xlabel('횟수', fontsize = 15 , fontweight = 'bold')
ax.set_ylabel('비율' , fontsize = 15 , fontweight = 'bold' , rotation = 0 , labelpad=25)
ax.set_xticklabels(x, fontsize=15) #set_xticklabels(축별 이름 , font 크기)
ax2 = sns.lineplot(x= np.arange(19) , y = A.iloc[:,1] ,color='r', # 색상
linestyle='-', # 라인 스타일
marker='o' ,ax = axes[i,j]) # 마커)
ax2.set_yticks(np.arange(0,0.41 , 0.1))
ax.legend(labels = ['이항분포' , '푸아송분포'] , fontsize = 11)
ax.text(16 , 0.25 , '{}\n{}'.format('X~ B({},{})'.format(n_list[t] , p_list[t]) , 'X~ P({})'.format(np2) ),fontsize=13)
t+=1 #리스트 값들
plt.show()
==> subplots , seaborn일때의 subplots 기억!!
==> N의 값이 커질수록 오차는 적어진다.
EX-01) 50명이 헌혈, 푸아송분포에 의한 근사확률(RH+ B혈액형 비율 10%)
1> RH+ B형인 헌혈자가 5명 이하일 확률
X ~ B(50 , 0.1) ==> X ~ P(5)
myu = 5
f_x = 0
xx = 5
for x in range(xx+1):
f_x += math.pow(myu,x) * math.exp(-myu) / fact(x)
f_x
P(X<=5) = 0.616 = f(5) + f(4) + f(3) +f(2) + f(1) + f(0)
2> RH+ B형인 헌혈자가 정확히 3명일 확률
f_x = math.pow(5,3) * math.exp(-5) / fact(3)
f_x
P(X=3) = f(3) = 0.140
3> RH+B형인 헌혈자가 적어도 4명이상일 확률
myu = 5
f_x = 0
xx = 3
for x in range(xx+1):
f_x += math.pow(myu,x) * math.exp(-myu) / fact(x)
f_x
P(X>=4) = 1- P(X<=3) = 1- f(3) - f(2) - f(1) -f(0) 1 - 0.265 = 0.735
EX-02) 무작위 30명 선정, 출국자수 1485만 , 30% 출국
1> 출국경험 4명이하일 확률
f_x = 0
n = 30
p = 0.3
xx = 4
myu = n * p
for x in range(xx+1):
f_x += math.pow(myu,x) * math.exp(-myu) / fact(x)
f_x
P(X<=4) = f(4) + f(3) + f(2) + f(1) + f(0) = 0.055
2> 출국경험 3명일 확률
f_x = math.pow(myu,3) * math.exp(-myu) / fact(3)
f_x
P(X=3) = f(3) = 0.015
3> 적어도 5명 이상일 확률
P(X>=5) = 1- P(X<=4) = 1 - 0.055 = 0.945
2. 평균이 커짐에 따른 푸아송분포
fig , axes = plt.subplots(3,2) #3행 2열
fig.set_size_inches((20, 15)) #격자 크기 설정
# 격자 여백 설정
plt.subplots_adjust(wspace = 0.3, hspace = 0.41) #가로방향은 wspace , 세로방향은 hspace
t = 0
# n_list = [4,10,50,100,101,102]
# p_list = [0.5 , 0.2, 0.04 , 0.02 , 0.04 , 0.002]
n_list = [20,20,20,20,20,20]
p_list = np.arange(0.1 , 0.61 , 0.1).tolist()
for i in range(3):
for j in range(2):
n = np.arange(n_list[t])
p = p_list[t]
np2 = round(len(n)*p,2)
x = [i for i in range(19)]
a ,b = [] , []
for x_1 in x:
a.append(len(list(itertools.combinations(n , x_1))) *(math.pow(p , x_1)) *(math.pow(1-p , len(n) - x_1))) #이항분포 공식
b.append( ((np2 ** x_1) * math.exp(-np2)) / (fact(x_1)) ) # 푸아송 공식
A = pd.DataFrame([a , b])
A= A.T
ax = sns.lineplot(x= np.arange(19) , y = A.iloc[:,0] ,color='blue', # 색상
linestyle='-', # 라인 스타일
marker='o' ,ax = axes[i,j]) # 마커)
ax.set_yticks(np.arange(0,0.41 , 0.1))
ax.set_xticks(np.arange(19))
ax.set_title('이항확률의 근사 확률' , fontsize = 15 , fontweight = 'bold')
ax.set_xlabel('횟수', fontsize = 15 , fontweight = 'bold')
ax.set_ylabel('비율' , fontsize = 15 , fontweight = 'bold' , rotation = 0 , labelpad=25)
ax.set_xticklabels(x, fontsize=15) #set_xticklabels(축별 이름 , font 크기)
ax2 = sns.lineplot(x= np.arange(19) , y = A.iloc[:,1] ,color='r', # 색상
linestyle='-', # 라인 스타일
marker='o' ,ax = axes[i,j]) # 마커)
ax2.set_yticks(np.arange(0,0.41 , 0.1))
ax.legend(labels = ['이항분포' , '푸아송분포'] , fontsize = 11)
ax.text(15 , 0.22 , '{}\n{}\n myu(평균) : {}'.format('X~ B({},{})'.format(n_list[t] , round(p_list[t] ,2)) , 'X~ P({})'.format(np2) , np2),fontsize=11)
t+=1 #리스트 값들
plt.show()
==>평균(뮤) 가 커질수록 (뮤) 중심으로 종모양에 가까워진다.
출처 : [쉽게 배우는 생활속의 통계학] [북스힐 , 이재원]
※혼자 공부 정리용
'기초통계 > 이산확률변수' 카테고리의 다른 글
★푸아송분포★기하분포★초기하분포★베르누이★이산확률변수★기초통계학-[Chapter05 - 연습문제-07] (0) | 2022.12.15 |
---|---|
★초기하분포★기하분포★이산균등분포★기초통계학-[Chapter05 - 이산확률분포-06] (0) | 2022.12.15 |
푸아송분포★기초통계학-[Chapter05 - 이산확률분포-04] (0) | 2022.12.14 |
이항분포식★이항실험★이항분포의 평균,분산★베르누이시행★기초통계학-[Chapter05 - 이산확률분포-03] (1) | 2022.12.14 |
표본,모표본★평균과 분산★기초통계학-[Chapter05 - 이산확률분포-02] (0) | 2022.12.14 |