생각 작업실 The atelier of thinking

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

통계학 이야기

43. R을 이용한 확률분포 - 이항분포 구하기

knowledge-seeker 2023. 10. 25. 11:45

Chapter 43. R을 이용한 확률분포 - 이항분포 구하기

 

1. R에서의 확률분포

 

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. 이항분포(Binomial Distribution)

이항분포는 연속된 n번의 독립적 시행에서 각 시행이 확률 p를 가질 때의 이산확률분포입니다.

 

이항분포의 확률질량함수는 아래와 같습니다.

 

$$ f(x) = \dbinom{n}{x} p^x(1-p)^{n-x} , x = 0,1,2,...,n $$

 

R에서 이항분포의 확률질량함수를 구하는 함수는 "dbinom" 입니다.

dbinom(x,n,p)

x : 성공횟수
n : 전체시도 횟수
p : 각 시행에서 성공할 확률

 

◈ 예제 : 주사위 세 번 던지기

    주사위를 세 번 던지기를 해서 1이 나오면 성공, 1이 나오지 않으면 실패라고 했을 때,

    성공횟수는 0,1,2,3 이 됩니다. 이를 구하는 확률질량함수는 아래와 같이 표현할 수 있습니다.

 

$$ f(x) = \dbinom{3}{x} (\frac{1}{6})^x(\frac{5}{6})^{3-x} , x = 0,1,2,3 $$

 

R 코드는,

x <- 0:3
n <- 3
p <- 1/6

dbinom(x,n,p)
[1] 0.57870370 0.34722222 0.06944444 0.00462963

성공횟수 별 확률로 나타내는 코드입니다.

 

binom <- dbinom(x,n,p)
names(binom) <- x
binom
         0          1          2          3 
0.57870370 0.34722222 0.06944444 0.00462963 

시각화 코드

barplot(binom, space = 2, col='skyblue',xlab = '성공횟수')
abline(h=0)

 

◈ 예제 : 항암제 완치율

 

어느 제약회사에서 새로운 항암제를 개발하여 항암제의 효과를 확인하기 위해 거의 같은 상태의 환자 15명을 대상으로 임상시험을 실시하였습니다.

 환자 중 12명의 환자가 완치되었다고 합니다.

 

 (1) 해당 상태의 환자에 대한 실제 완치 확률이 0.55 였다면, 해당 결과를 얻을 확률을 구한다면?

 

    이 경우 성공횟수 X = 12 , n=15, p=0.55 인 확률질량함수를 이용하여 구할 수 있습니다.

x <- 12
n <- 15
p <- 0.55

dbinom(x,n,p)
[1] 0.03176883

 

(2) 완치 확률이 0.1,0.2,...,0.9 일 때 해당 결과의 확률을 구하고, 가장 높은 확률일 때의 완치확률을 구한다면?

 

 이 경우는 p 를 0.1 부터 0.9 일 때의 확률질량함수를 구하면 됩니다.

x <- 12
n <- 15
p <- c(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9)

cancer <- dbinom(x,n,p)
names(cancer) <- p
cancer
barplot(cancer, col='skyblue', xlab = '완치확률')
abline(h=0)
         0.1          0.2          0.3          0.4          0.5          0.6 
3.316950e-10 9.542042e-07 8.293934e-05 1.648865e-03 1.388550e-02 6.338790e-02 
         0.7          0.8          0.9 
1.700402e-01 2.501389e-01 1.285054e-01

그래프에서 완치확률이 0.8일 때 가장 높은 확률을 나타나는 것을 확인할 수 있습니다.

 

 

(3) 기존 항암제의 완치율이 0.5 일 때, 10명이상의 환자가 치료될 확률을 구한다면?

 

 10명 이상이라 함은 10,11,12,13,14,15 일 때의 확률을 다 더한 값을 말합니다.

 

이 경우는 누적함수를 사용해야 합니다. 이항분포의 누적함수는 "pbinom" 을 이용하여 구할 수 있습니다.

 

pbinom(x,n,p,lower.tail = TRUE)

 x : 성공횟수
 n : 시행횟수
 p : 각 시행의 확률
 lower.tail : 누적분포함수 값 계산 방법을 지정하는 논리값
              TRUE x보다 작거나 같은 확률을 계산
              FALSE x보다 큰 확률을 계산

 

 10명이상이므로 코드의 x 값은 9를 넣어야 합니다.

x <- 9
n <- 15
p <- 0.5
pbinom(x,n,p,lower.tail = FALSE)
# 1 - pbinom(x,n,p)
[1] 0.1508789

 

(4) 만약 12명의 환자가 치유되었다면, 새로운 항암제의 효과가 기존의 것보다 높다고 할 수 있는가?

 

 이 경우는 x 에 11을 넣고 누적함수를 산출하면 됩니다.

x <- 11
n <- 15
p <- 0.5
pbinom(x,n,p,lower.tail = FALSE)
# 1 - pbinom(x,n,p)
[1] 0.01757813

약 1.76%의 확률을 확인할 수 있습니다.  통계적 추론에서 유의수준을 어떻게 정하느냐에 따라 기존의 것보다 높은지 같은지를 판단하게 됩니다.