728x90
반응형

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()

평균이 커짐에 따른 푸아송분포

==>평균(뮤) 가 커질수록 (뮤) 중심으로 종모양에 가까워진다.

 

출처 :  [쉽게 배우는 생활속의 통계학]  [북스힐 , 이재원] 

※혼자 공부 정리용

728x90
반응형

+ Recent posts