생각 작업실 The atelier of thinking

45. R을 이용한 확률분포 - 초기하분포 구하기 본문

통계학 이야기

45. R을 이용한 확률분포 - 초기하분포 구하기

knowledge-seeker 2023. 10. 26. 15:26

Chapter 45. R을 이용한 확률분포 - 초기하분포 구하기

 

1. R에서의 확률분포

이산확률분포 연속확률분포
이항분포 binom 정규분포 norm
초기하분포 hyper T분포 t
포아송분포 pois F분포 f
기하분포 geom 카이분포 chisq
음이항분포 nbionom 균등분포 unif
다항분포 multinom 지수분포 exp

구하고자 하는 함수에 따라 아래의 접두사를 붙여 사용하면 됩니다.

  • d : probability mass/density function - 확률 질량/밀도 함수
  • p : cumulative distribution function - 누적함수
  • q : quantile function - 분위수
  • r : random number generator - 램덤 생성 작업

2. 초기하분포(Hypergeometric Distribution)

초기하분포는 이항분포와 비슷한 분포이지만, 복원추출이 아닌 비복원추출에서의 확률분포입니다.

유한모집단이 두 그룹으로 나누어져 있고 표본을 비복원으로 추출할 때, 특정 그룹에서 뽑힌 표본의 수에 대한 확률분포입니다.

 

초기하분포의 확률질량함수는 아래와 같습니다.

 

모집단 크기 : N , M과 N-M인 두 개의 부모집단, n : 추출될 표본의 수

 

f(x) = \frac{ \dbinom{M}{x} \dbinom{N-M}{n-x} }{ \dbinom{N}{n}}, x=0,1,2,..,n

 

R에서 초기하분포의 확률질량함수를 구하는 함수는 "dhyper" 입니다.

dhyper(x,M,N-M,n)

 x : 추출될 표본의 수
 M : 추출대상 집단의 수  
 N-M : 추출 대상이 아닌 집단의 수
 n : 시행횟수

 

◈ 예제 : 6개가 정상품과 4개의 불량품이 있는 상자에서 임의로 3개의 제품을 비복원 추출한 경우

 

 (1) 3 개 중 1개가 불량품일 확률은?

 

 R 코드는,

x <- 1
M <- 4
N <- 10
n <- 3

dhyper(x,M,N-M,n)
[1] 0.5

   추출될 표본의 수(x) : 1 , 추출대상 집단의 수(M) : 4 , N-M : 6 , n : 3 을 차례로 입력하여 구합니다.

 

(2) 3개 중 불량품이 0~3개 나올 확률을 각각 구하면 ?

x <- 0:3
M <- 4
N <- 10
n <- 3

hyper <- dhyper(x,M,N-M,n)
names(hyper) <- x
hyper

 

         0          1          2          3 
0.16666667 0.50000000 0.30000000 0.03333333

 

시각화 코드

barplot(hyper, space = 2, col='skyblue',xlab = '불량품수')
abline(h=0)

(3) 3개 중 불량품이 1개 이하 나올 확률은 ?

 

 이 경우는 누적분포함수를 사용합니다. 

 

phyper(x,M,N-M,n,lower.tail = True)

 x : 추출될 표본의 수
 M : 추출대상 집단의 수  
 N-M : 추출 대상이 아닌 집단의 수
 n : 시행횟수
  lower.tail : 누적분포함수 값 계산 방법을 지정하는 논리값
              TRUE x보다 작거나 같은 확률을 계산
              FALSE x보다 큰 확률을 계산

 

x <- 1
M <- 4
N <- 10
n <- 3

phyper(x,M,N-M,n,lower.tail = TRUE)
[1] 0.6666667

 

◈ 예제 : 품질관리 Operating Characteristic(OC) Curve

 

 50개의 전구들이 들어있는 상자에서 10개의 전구를 무작위로 선택하여 검사를 합니다.

 불량전구의 개수가 1개이하이면 이 회사이 전구를 구매하려고 합니다.

 만약 이 상자에 5개의 불량품이 있을 때, 구매할 확률은 ?

 

 이 경우는 10개 추출했을 때 불량품이 0 또는 1 개가 나올 확률을 구하라는 것입니다.

이를 확률질량함수로 표현하면,

 

 P(X \leq 1) = \frac{\dbinom{5}{0} \dbinom{45}{10} }{ \dbinom{50}{10}}+ \frac{\dbinom{5}{1} \dbinom{45}{9}}{ \dbinom{50}{10}} 

 

누적분포함수를 이용해 구해보면,

x <- 1
M <- 5
N <- 50
n <- 10

phyper(x,M,N-M,n,lower.tail = TRUE)
[1] 0.7419

구매할 확률은 74.19% 가 나옵니다.

 

위 경우는 전체 불량품의 갯수를 미리 안다고 가정했지만, 대부분의 경우는 전체불량품의 갯수를 알지못합니다.

결과를 보고 전체 불량품의 갯수가 얼마나 되는지를 추정해볼 수 있습니다.

예를 들어 10개를 추출했는 데 1개의 불량품이 나왔다고 했을 때 전체불량품 수는 ?

x <- 1
M <- 0:50
N <- 50
n <- 10

prob <- phyper(x,M,N-M,n,lower.tail = TRUE)
plot(M,prob,type="o",xlab="불량품의 수",main="OC curve")

 위 그래프는 OC Curve라 불리우며, 통계적 품질관리에서 중요한 도구입니다.

 

◈ 예제 : 연못에 사는 물고기는 몇마리?

 

     꼬리표를 붙인 20마리의 물고기를 연못에 넣고 어느 정도 지난 후 물고기 15마리를 잡았을 때 꼬리표가 있는 물고기가 4마리였다면, 연못안 전체 물고기는 얼마나 될까요?

 

 위 상황은 꼬리표를 단 물고기를 M 으로 달지 않은 물고기를 N-M 으로 분류하여 초기화분포로 나타낼 수 있습니다.

 

  위 상황에서 전체물고기(N) 는 정확히 알 수 없지만, 각각의 확률을 알 수 있습니다.

  N이 30~100일 때의 확률질량함수를 그래프로 표현해 보겠습니다.

x <- 4
M <- 20
N <- 30:100
n <- 15

fish <- dhyper(x,M,N-M,n)
names(fish) <- N
barplot(fish, space = 2, col='skyblue', xlab="연못 전체물고기 수")
abline(h=0)

 위 그래프에서 보면 75마리에서 약 25%의 확률로 제일 높게 나타나는 것을 볼 수 있습니다.