02. 이산확률변수, 이항분포

Statistics
교재 4장
Author

Kim Jae Sook

Published

January 24, 2024

이산확률분포 요약

대표적인 이산확률분포를 간단히 정리하면 다음과 같다.

대표적인 이산확률분포

성공률 \(p\)인 베르누이 시행을 했을 때의 분포

분포 \(X\) 모수 확률질량함수 평균(\(\mu\)) 분산(\(\sigma^2\))
베르누이 분포 한번 시행에서 성공하면 \(1\), 실패면 \(0\) \(p\) \(p\) \(pq\)
이항분포 \(n\)번 시행했을 때 성공 횟수 \(n,~p\) \(\begin{pmatrix}n \\x\end{pmatrix}p^{x}(1-p)^{n-x}\) \(np\) \(npq\)
기하분포 처음 성공할 때까지의 시행 횟수 \(p\) \(p(1-p)^{x-1}\) \(\dfrac{1}{p}\) \(\dfrac{1-p}{p^2}\)
음이항분포 \(r\)번째 성공할때까지의 총 시행 횟수 \(r,~p\) \(\begin{pmatrix}n-1 \\r-1\end{pmatrix}p^{r}(1-p)^{n-r}\) \(\dfrac{r}{p}\) \(\dfrac{r(1-p)}{p^2}\)
포아송 분포 이항분포의 근사분포(\(\lambda=np\), \(n \to \infty\)) \(\lambda\) \(e^{-\lambda}\dfrac{\lambda^{x}}{x!}\) \(\lambda\) \(\lambda\)

유한모집단(\(Type1\)\(r\)개, \(Type2\)\(N-r\)개)에서 \(n\)개 비복원추출

분포 \(X\) 모수 확률질량함수 평균(\(\mu\)) 분산(\(\sigma^2\))
초기하분포 \(n\)개 중 들어있는 \(Type1\)의 개수 \(N,~r,~n\) \(\frac{\begin{pmatrix}r \\x\end{pmatrix}\begin{pmatrix}N-r \\n-x\end{pmatrix}}{\begin{pmatrix}N \\n\end{pmatrix}}\) \(n \dfrac{r}{N}\) \(n \dfrac{r}{N} \left(1-\dfrac{r}{N}\right)\left(\dfrac{N-n}{N-1}\right)\)

각 분포들의 특징

이항분포\((n, p)\)

  • 최빈값: \([(n+1)p]\)

  • 포아송분포로의 근사: \(P(X=k)\approx \frac{e^{-\lambda} \lambda^k}{k!}\), \((\lambda=np,~p\approx 0)\)

  • 정규분포로의 근사: \(n\)이 충분히 클때, \(\Phi\left(\frac{b+0.5-\mu}{\sigma}\right)-\Phi\left(\frac{a-0.5-\mu}{\sigma}\right)\), \(\Phi\)는 표준정규분포의 누적분포함수

  • \(n\)개의 서로 독립인 베르누이 분포를 따르는 확률변수들의 합의 분포

기하분포\((p)\)

  • 꼬리확률(tail probability): \(P(X>n)=(1-p)^n\)
  • 비기억성(memoryless property)을 가짐: \(P(X>n+k~|~X>n)=P(X>k)\)

음이항분포\((r,~p)\)

  • \(r\)개의 서로 독립인 기하분포를 하는 확률분포들의 합의 분포

포아송분포

  • 최빈값: \([\lambda]\)
  • 정규분포로의 근사: 모수 \(\lambda\)가 클때

초기하분포

  • 포아송분포로의 근사: \(p=\frac{r}{N}\)은 충분히 작고 \(r\)\(N\)은 클때
  • 이항분포로의 근사: \(n\ll N\) 그리고 \(r\)\(N-r\)은 클때

[엑셀] 실습하기

[R기초] 실습하기

이산확률변수의 분포

  • 이산확률변수의 분포에서 확률질량함수, 누적확률분포함수, 평균, 분산 표준편차를 구하기
    • [어느 대리점의 자동차 판매 대수], X=하루 동안 판매한 자동차의 대수
      X의 값 / 도수
      0 / 54
      1 / 117
      2 / 72
      3 / 42
      4 / 12
      5 / 3
      합계 / 300
x1 <-   rbind( 0, 1, 2, 3, 4, 5)
freq <- rbind(54, 117, 72, 42, 12, 3)
total <- function(x,y){
  fx=y/sum(y)
  cdf=cumsum(fx)
  prob=sum(fx)
  xfx=x*fx
  mean=sum(xfx)
  x2fx=x^2*fx
  mix=(x-1.5)^2*fx
  variance=sum(mix)
  s.d=sqrt(variance)
  cat( " <x>               0    1    2    3    4    5 ", "\n",
  "<f(x)>          ",fx,"\n",
  "<F(x)>          ",cdf,"\n",
  "<x*f(x)>        ",xfx,"\n",
  "<x^2*f(x)>      ",x2fx,"\n",
  "<(x-1.5)^2*f(x)>",mix,"\n","\n",
  "<sum(f(x))>     ",prob,"\n",
  "<E(x)>          ",mean,"\n",
  "<V(x)>          ",variance,"\n",
  "<S(x)>          ",s.d,"\n")
}

total(x1, freq)
 <x>               0    1    2    3    4    5  
 <f(x)>           0.18 0.39 0.24 0.14 0.04 0.01 
 <F(x)>           0.18 0.57 0.81 0.95 0.99 1 
 <x*f(x)>         0 0.39 0.48 0.42 0.16 0.05 
 <x^2*f(x)>       0 0.39 0.96 1.26 0.64 0.25 
 <(x-1.5)^2*f(x)> 0.405 0.0975 0.06 0.315 0.25 0.1225 
 
 <sum(f(x))>      1 
 <E(x)>           1.5 
 <V(x)>           1.25 
 <S(x)>           1.118034 

R명령어 설명

위에 링크로 달아놓았지만, ChatGPT에게 이항분포에 관련된 r명령어를 묻고, 명령어는 알지만 더 자세한 사용법을 알고 싶을때는 프로그램에서 명령어에 커서를 두고 F1을 누르면 설명이 나옵니다.

R 에서 제공하는 확률분포

▶ 이산분포

   ● binom : 이항분포
   ● hyper : 초기하분포
   ● pois  : 포와송분포
   ● geom : 기하분포
   ● nbinom : 음이항분포
   ● multinom : 다항분포

▶ 연속분포

  ● unif : Uniform Distribution(균등분포)
  ● norm : 정규분포
  ● exp : 지수분포(Exponential Distribution)
  ● t : t분포
  ● f : f분포
  ● chisq : 카이분포
  ● 기타 : gamma, beta, cauchy, lnorm, weibull 등

▶ 접두사: 위 함수앞에 아래의 접두사를 붙여 사용한다.

  ● d : probability density(mass) function - 확률질량함수
  ● p : cumulative distribution function - 누적함수
  ● q : quantile function ( p ≤ P (X  ≤ x ) 를 만족하는 최소 x )
  ● r : random number generator

이항분포에 관련된 R명령어

dbinom(3, 10, 0.3)  # 10번의 시행에서 성공 확률이 0.3인 경우에 3번 성공할 확률
[1] 0.2668279
pbinom(3, 10, 0.3)  # 10번의 시행에서 성공 확률이 0.3인 경우에 3번 이하로 성공할 확률
[1] 0.6496107
qbinom(0.25, 10, 0.3)  # 10번의 시행에서 성공 확률이 0.3인 이항분포에서 하위 25%에 해당하는 성공 횟수
[1] 2
rbinom(5, 10, 0.3)  # 10번의 시행에서 성공 확률이 0.3인 이항분포를 따르는 난수 5개 생성
[1] 6 2 2 1 1
# 이항분포의 확률질량함수 그리기
size <- 10  # 시행 횟수와 성공 확률 설정
prob <- 0.5

x <- 0:size  # 가능한 모든 성공 횟수에 대한 확률 계산
y <- dbinom(x, size, prob)
barplot(y, names.arg=x, xlab="성공 횟수", ylab="확률", main="이항 분포 (n=10, p=0.5)")  # 막대 그래프로 그리기

# 이항분포의 누적분포함수 그리기
cumulative_probs <- pbinom(x, size, prob)  # 누적 확률 계산
# 계단 형태의 그래프로 그리기
plot(x, cumulative_probs, type="s", xlab="성공 횟수", ylab="누적 확률", main="이항 분포의 누적 분포 함수 (n=10, p=0.5)")

ggplot 패키지를 사용해서 그래프 그리기

# install.packages("ggplot")  # ggplot페키지가 설치가 안된 경우 왼쪽 주석 지우고 명령어 실행
# x를 정의 합니다 
x <- c(0:10) 
x_prob <- x / 10 

# 이항분포를 계산하는 데이터프레임을 만듭니다.
library(tidyverse) 
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.4.4     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
df <- tibble(
  x = x,
  x_prob = x / 10, 
  # 반복횟수 10회, 성공확률 0.5인 이항분포에 대한 각각의 확률값을 구합니다. 
  dbinom = dbinom(x, 10, 0.5), 
  pbinom = pbinom(x, 10, 0.5),  
  qbinom = qbinom(x_prob, 10, 0.5), 
  rbinom = rbinom(x, 10, 0.5)
)

# 데이터를 확인 합니다. 
df 
# A tibble: 11 × 6
       x x_prob   dbinom   pbinom qbinom rbinom
   <int>  <dbl>    <dbl>    <dbl>  <dbl>  <int>
 1     0    0   0.000977 0.000977      0      6
 2     1    0.1 0.00977  0.0107        3      4
 3     2    0.2 0.0439   0.0547        4      5
 4     3    0.3 0.117    0.172         4      4
 5     4    0.4 0.205    0.377         5      4
 6     5    0.5 0.246    0.623         5      7
 7     6    0.6 0.205    0.828         5      4
 8     7    0.7 0.117    0.945         6      4
 9     8    0.8 0.0439   0.989         6      1
10     9    0.9 0.00977  0.999         7      8
11    10    1   0.000977 1            10      5
## 확률질량함수 pmf 그래프 그리기 : y = dbinom 결과값 이용
df %>% 
  ggplot(aes(x = x, y = dbinom)) + 
  geom_col() + 
  scale_x_continuous(breaks = c(0:10), labels = c(0:10)) +
  theme_classic()

## 누적확률질량함수 cdf 그래프 그리기 : y = pbinom 결과값 
df %>% 
  ggplot(aes(x = x, y = pbinom)) + 
  geom_col() + 
  scale_x_continuous(breaks = c(0:10), labels = c(0:10)) +
  theme_classic()

이항분포 관련 문제

  • 확률변수 \(X\)가 이항분포 \(B(10, 1/3)\)을 따를 때, \(P(X≤2)\)\(P(X>3)\)를 구하시오.
pbinom(2, 10, 0.3333)
[1] 0.2992194
1-pbinom(3, 10, 0.3333)
[1] 0.4406446
  • 어떤 병이 새로운 치료법으로 치료될 확률이 20%라고 한다. 15명의 환자에게 이 치료법을 적용하였을때 4명 이상 7명 이하가 치료될 확률을 구하시오.
pbinom(7, 15, 0.2) - pbinom(3, 15, 0.2)
[1] 0.3475981
  • 확률변수 \(X\)가 이항분포 \(B(n,0.15)\)를 따를 때, \(P(X=1)>P(X=0)\)을 만족시키는 자연수 \(n\)의 최솟값을 구하시오.
n <- 1
while(dbinom(1,n,0.15) <= dbinom(0,n,0.15)){
  n <- n+1
}
n
[1] 6

큰수의 법칙

  • 한 개의 주사위를 \(n\)회 던지는 시행에서 \(1\)의 눈이 나오는 횟수를 확률변수 \(X\)라고 하자. \(n\)의 값이 \(10\), \(30\), \(50\)일 때, 상대도수 \(\dfrac{X}{n}\)와 한 개의 주사위를 \(1\)회 던질 때, \(1\)의 눈이 나올 수학적 확률 \(\dfrac{1}{6}\)의 차가 \(0.1\)보다 작을 확률 \(P \left(\left|\dfrac{X}{n}-\dfrac{1}{6} \right| <0.1 \right)\)을 이용하여 각각 구하시오.
sum(dbinom(1:2, 10, 1/6))
[1] 0.6137212
sum(dbinom(3:7, 30, 1/6))
[1] 0.7835228
sum(dbinom(4:13, 50, 1/6))
[1] 0.9454534
  • 한 개의 동전을 \(n\)번 던지는 시행에서 앞면이 나오는 횟수를 확률변수 \(X\)라 하자. \(n\)\(5\)의 배수이고, \(P \left(\left|\dfrac{X}{n}-\dfrac{1}{2} \right| \le 0.1 \right)\ge0.95\)를 만족시키는 자연수 \(n\)의 최솟값을 구하시오.
n <- 5
while(sum(dbinom((0.4*n):(06*n),n,0.5))<0.95){
  n <- n+5
}
n
[1] 60