작성자: admin 작성일시: 2016-10-01 20:49:15 조회수: 194 다운로드: 29
카테고리: 기초 수학 태그목록:

베르누이 확률 분포

베르누이 시도

결과가 성공(Success) 혹은 실패(Fail) 두 가지 중 하나로만 나오는 것을 베르누이 시도(Bernoulli trial)라고 한다. 예를 들어 동전을 한 번 던져 앞면(H:Head)이 나오거나 뒷면(T:Tail)이 나오게 하는 것은 베르누이 시도의 일종이다.

베르누이 시도의 결과를 확률 변수(random variable) $X$ 로 나타낼 때는 일반적으로 성공을 정수 1 ($X=1$), 실패를 정수 0 ($X=0$)으로 정한다. 때로는 실패를 0 이 아닌 -1($X=-1$)로 정하는 경우도 있다.

베르누이 분포

베르누이 확률 변수는 0, 1 두 가지 값 중 하나만 가질 수 있으므로 이산 확률 변수(discrete random variable)이다. 따라서 확률 질량 함수(pmf: probability mass function)와 누적 분포 함수(cdf:cumulataive distribution function)으로 정의할 수 있다.

베르누이 확률 변수는 1이 나올 확률 $\theta$ 라는 하나의 모수(parameter)만을 가진다. 0이 나올 확률은 $1 - \theta$ 로 정의된다.

베르누이 확률 분포의 확률 질량 함수는 다음과 같다.

$$ \text{Bern}(x;\theta) = \begin{cases} \theta & \text{if }x=1, \\ 1-\theta & \text{if }x=0 \end{cases} $$

이를 case문 없이 하나의 수식으로 표현하면 다음과 같이 쓸 수도 있다.

$$ \text{Bern}(x;\theta) = \theta^x(1-\theta)^{(1-x)} $$

만약 베르누이 확률 변수가 1과 -1이라는 값을 가진다면 다음과 같은 수식으로 써야 한다.

$$ \text{Bern}(x; \theta) = \theta^{(1+x)/2} (1-\theta)^{(1-x)/2} $$

만약 어떤 확률 변수 $X$가 베르누이 분포에 의해 발생된다면 "확률 변수 $X$가 베르누이 분포를 따른다"라고 말하고 다음과 같이 수식으로 쓴다.

$$ X \sim \text{Bern}(x;\theta) $$

베르누이 분포의 시뮬레이션

R에서는 베르누이 분포를 위한 별도의 함수는 없고 이항(binomial) 분포 명령 binom에서 size=1로 설정하는 수 밖에 없다.

다음 예에서는 p = 0.6 으로 설정하였다.

In [67]:
theta = 0.6

dbinom(size=1) 명령을 사용하면 확률 질량 함수(pmf: probability mass function)를 계산할 수 있다.

In [68]:
xx = c(0, 1)
barplot(dbinom(xx, size=1, prob=theta), names.arg=c("X=0", "X=1"), ylab="P(x)", main="pmf of Bernoulli distribution")

시뮬레이션을 하려면 rbinom(size=1) 메서드를 사용한다.

In [69]:
set.seed(0)
x <- rbinom(100, size=1, prob=theta)
x
  1. 0
  2. 1
  3. 1
  4. 1
  5. 0
  6. 1
  7. 0
  8. 0
  9. 0
  10. 0
  11. 1
  12. 1
  13. 1
  14. 0
  15. 1
  16. 0
  17. 1
  18. 0
  19. 0
  20. 1
  21. 0
  22. 0
  23. 1
  24. 0
  25. 1
  26. 1
  27. 1
  28. 1
  29. 1
  30. 0
  31. 1
  32. 1
  33. 1
  34. 1
  35. 1
  36. 0
  37. 0
  38. 0
  39. 1
  40. 0
  41. 1
  42. 0
  43. 0
  44. 0
  45. 1
  46. 1
  47. 0
  48. 1
  49. 1
  50. 0
  51. 0
  52. 1
  53. 0
  54. 1
  55. 1
  56. 1
  57. 1
  58. 1
  59. 1
  60. 0
  61. 1
  62. 0
  63. 1
  64. 1
  65. 1
  66. 0
  67. 1
  68. 1
  69. 0
  70. 1
  71. 0
  72. 1
  73. 0
  74. 1
  75. 1
  76. 1
  77. 0
  78. 0
  79. 1
  80. 0
  81. 0
  82. 1
  83. 0
  84. 1
  85. 1
  86. 0
  87. 1
  88. 0
  89. 1
  90. 1
  91. 1
  92. 1
  93. 1
  94. 0
  95. 0
  96. 0
  97. 0
  98. 1
  99. 1
  100. 0

결과는 table 명령으로 카운팅할 수 있다.

In [70]:
barplot(table(x))

이론적인 확률 분포와 샘플의 확률 분포를 동시에 나타내려면 다음과 같은 코드를 사용한다.

NumPy의 bincount 명령으로 값이 0인 데이터의 수와 값이 1인 데이터의 수를 세고 이를 데이터프레임에 정리했다.

In [71]:
y1 <- dbinom(c(0, 1), size=1, prob=theta) * 100
y2 <- table(x)
t <- rbind(y1, y2)
rownames(t) <- c("theoretic", "simulation")
colnames(t) <- c("X=0", "X=1")
t
X=0X=1
theoretic4060
simulation4357

seaborn의 barplot 명령으로 시각화하면 다음과 같다.

In [72]:
barplot(t, beside=TRUE, legend.text=TRUE, args.legend=list(x="topleft"))

베르누이 분포의 모멘트

베르누이 분포의 모멘트는 다음과 같다.

기댓값

$$\text{E}[X] = \theta$$

(증명)

$$\text{E}[X] = 1 \cdot \theta + 0 \cdot (1 - \theta) = \theta$$

분산

$$\text{Var}[X] = \theta(1-\theta)$$

(증명)

$$\text{Var}[X] = (1 - \theta)^2 \cdot \theta + (0 - \theta)^2 \cdot (1 - \theta) = \theta(1-\theta)$$

앞의 예에서는 $\theta = 0.6$이였으므로 이론적인 기댓값과 분산은 다음과 같다.

$$ \text{E}[X] = 0.6 $$$$ \text{Var}[X] = 0.6 \cdot (1 - 0.6) = 0.24 $$

데이터에서 계산한 샘플 평균 및 샘플 분산은 다음과 같이 계산한다.

In [73]:
mean(x)
0.57
In [74]:
var(x)
0.247575757575758

연습 문제 1

베르누이 확률 분포의 모수가 다음과 같을 경우에 각각 샘플을 생성한 후 기댓값과 분산을 구하고 앞의 예제와 같이 확률 밀도 함수와 비교한 카운트 플롯을 그린다. 샘플의 갯수가 10개인 경우와 1000개인 경우에 대해 각각 위의 계산을 한다.

  1. $\theta = 0.5$
  2. $\theta = 0.9$

질문/덧글

아직 질문이나 덧글이 없습니다. 첫번째 글을 남겨주세요!