다운로드
작성자: admin 작성일시: 2016-05-24 12:32:26 조회수: 2471 다운로드: 239
카테고리: 기초 수학 태그목록:

다항 분포

베르누이 시도를 여러번 하여 얻은 총 성공 횟수 합이 이항 분포를 이루는 것처럼 독립적인 카테고리 분포를 여러번 시도하여 얻은 각 원소의 성공횟수 값은 다항 분포(Multinomial distribution)을 이룬다.

다항 분포는 확률 모수가 $\theta = (\theta_1, \cdots, \theta_K)$인 독립적인 카테고리 시도를 $N$번 반복해서 $k$가 각각 $x_k$번 나올 확률 즉, 벡터 $x = (x_1, \cdots, x_K)$가 나올 확률 분포를 말한다.

예를 들어 $x = (1, 2, 1, 2, 3, 1)$은 6개의 숫자가 나올 수 있는 주사위를 10번 던져서 1인 면이 1번, 2인 면이 2번, 3인 면이 1번, 4인 면이 2번, 5인 면이 3 번, 6인 면이 1번 나왔다는 뜻이다.

다항 분포의 확률 질량 함수는 $\text{Mu}(x;N,\theta) $와 같이 표기하며 다음과 같은 수식을 따른다.

$$ \text{Mu}(x;N,\theta) = \binom N x \prod_{k=1}^K \theta_k^{x_k} = \binom N {x_1, \cdots, x_K} \prod_{k=1}^K \theta_k^{x_k} $$

이 식에서 $$ \binom N {x_1, \cdots, x_K} = \dfrac{N!}{x_1! \cdots x_K!} $$

다항 분포의 모멘트

다항 분포의 기댓값과 분산은 다음과 같다.

  • 기댓값 $$\text{E}[x_k] = N\theta_k$$

  • 분산 $$\text{Var}[x_k] = N\theta_k(1-\theta_k)$$

SciPy를 이용한 다항 분포의 시뮬레이션

SciPy는 다항 분포를 위한 multinomial 클래스를 지원한다. 인수로는 시행 횟수 $N$과 모수 벡터 $\theta$를 받는다.

In:
N = 30
theta = [0, 0, 0.1, 0.2, 0.3, 0.4]
rv = sp.stats.multinomial(N, theta)
In:
np.random.seed(0)
X = rv.rvs(100)
X[:5]
Out:
array([[ 0,  0,  3,  6,  9, 12],
       [ 0,  0,  5,  9,  6, 10],
       [ 0,  0,  3,  9,  5, 13],
       [ 0,  0,  5,  7, 10,  8],
       [ 0,  0,  3,  8,  6, 13]])
In:
plt.boxplot(X)
plt.show()
In:
df = pd.DataFrame(X).stack().reset_index()
df.columns = ["trial", "class", "binomial"]
In:
sns.boxplot(x="class", y="binomial", data=df)
sns.stripplot(x="class", y="binomial", data=df, jitter=True, color=".3")
plt.show()
In:
sns.violinplot(x="class", y="binomial", data=df, inner="quartile")
sns.swarmplot(x="class", y="binomial", data=df, color=".3")
plt.show()

질문/덧글

확률질량함수에 대한 이해 moon*** 2016년 10월 16일 2:37 오후

다항분포 또한 연속확률변수가 아니기 때문에 x_1, x_2에 대해 에 대한 확률질량함수가 별도로 존재하므로

다항분포의 확률질량함수 수식도 x_1, x_2 에 대해 각각 구할 수 있는 것인가요?

즉 수식이 P(x_1) = N! / { (x_1)! * (N-x_1)! } * (θ_x_1)^x_1 으로 구하면 되는 것인가요?

답변: 확률질량함수에 대한 이해 관리자 2016년 10월 20일 2:32 오후

$x_1$, $x_2$ 각기 다른 데이터 포인트를 뜻한다면 각각 구할 수 있습니다.