초기하 분포 (Hypergeometric Distribution)

Casella & Berger Ch.3.2 — 비복원 추출, 유한 모집단 교정, 이항 근사, 피셔 정확검정

초기하 분포는 유한 모집단에서 비복원 추출할 때 관심 범주의 개수를 모형화하는 분포이다. PMF의 조합론적 유도, 평균·분산의 축소 기법 증명, 유한 모집단 교정인자, 이항 분포로의 극한 수렴, 피셔 정확검정과의 연결, 수용 표본 추출 등 실무 응용을 체계적으로 다룬다.

Statistics
저자

Kwangmin Kim

공개

2026년 03월 28일

1 초기하 분포란 무엇인가

초기하 분포(Hypergeometric Distribution)는 유한 모집단에서 비복원 추출(sampling without replacement)할 때, 관심 범주에 속하는 개체의 수를 모형화하는 분포이다.

“항아리에 빨간 공 \(M\) 개와 초록 공 \(N-M\) 개가 들어 있다. 눈을 감고 \(K\) 개를 한꺼번에 꺼내면, 빨간 공이 정확히 \(x\) 개일 확률은?” — 이것이 초기하 분포의 원형(prototype)인 항아리 모형(urn model)이다 (Casella & Berger, 2002, Ch.3).

이 분포가 중요한 이유는 다음과 같다:

  • 유한 모집단: 이항 분포가 무한 모집단(또는 복원 추출)을 가정하는 반면, 초기하 분포는 모집단의 유한성을 정확히 반영한다
  • 비복원 추출: 한 번 뽑은 개체를 되돌리지 않으므로 시행 간 의존성이 존재한다
  • 정확 검정: 피셔의 정확검정(Fisher’s exact test)의 이론적 기반이다
  • 품질 관리: 수용 표본 추출(acceptance sampling)에서 로트의 합격/불합격 판정에 직접 사용된다

2 정의

정의: 초기하 분포

모집단 \(N\) 개 중 \(M\) 개는 관심 범주(“성공”), \(N - M\) 개는 그 외(“실패”)이다. \(K\) 개를 비복원 추출할 때, 관심 범주의 개수 \(X\) 의 PMF는:

\[ P(X = x \mid N, M, K) = \frac{\binom{M}{x}\binom{N-M}{K-x}}{\binom{N}{K}} \]

\(x\) 의 범위는 \(\max(0,\, K - (N-M)) \leq x \leq \min(K, M)\) 이다.

2.1 PMF의 조합론적 유도

\(N\) 개에서 \(K\) 개를 뽑는 방법은 \(\binom{N}{K}\) 가지이다. 이 중에서:

  • 관심 범주 \(M\) 개에서 \(x\) 개를 뽑는 방법: \(\binom{M}{x}\)
  • 나머지 \(N-M\) 개에서 \(K-x\) 개를 뽑는 방법: \(\binom{N-M}{K-x}\)

곱의 법칙에 의해 분자는 \(\binom{M}{x}\binom{N-M}{K-x}\) 이다. 각 조합이 동등한 확률(이산균등)을 가지므로, 비율이 곧 확률이 된다.

직관: 초기하 PMF \(\frac{\binom{M}{x}\binom{N-M}{K-x}}{\binom{N}{K}}\) 의 각 항

\(\binom{N}{K}\) (분모): 전체 \(N\) 개에서 \(K\) 개를 뽑는 총 경우의 수. 비복원 추출에서 모든 부분집합이 동등하게 가능하다는 가정의 기준선이다.

\(\binom{M}{x}\): 관심 범주 \(M\) 개 중 정확히 \(x\) 개를 선택하는 방법의 수.

\(\binom{N-M}{K-x}\): 비관심 범주 \(N-M\) 개에서 나머지 \(K-x\) 개를 채우는 방법의 수.

비율의 의미: “원하는 구성( \(x\) 개 관심 + \(K-x\) 개 비관심)을 만드는 경우 수” \(\div\) “전체 경우 수”.

이항 분포와의 결정적 차이: 이항은 각 시행이 독립이라 \(p^x(1-p)^{K-x}\) 를 직접 곱할 수 있다. 초기하는 비복원 추출이라 이미 뽑힌 개체가 다음 단계의 모집단 구성을 바꾼다. 따라서 조합론적으로 경우의 수를 세어야 한다. 복원 추출이었다면 \(P(X=x) = \binom{K}{x}(M/N)^x(1-M/N)^{K-x}\) 로 단순해진다.

2.2 범위의 제약

이항계수 \(\binom{n}{r}\)\(0 \leq r \leq n\) 에서만 양수이므로, \(x\) 는 다음을 동시에 만족해야 한다:

\[ M \geq x \quad \text{and} \quad N - M \geq K - x \]

이를 정리하면:

\[ \max(0,\, K - (N-M)) \leq x \leq \min(K, M) \]

\(K\)\(M\)\(N-M\) 에 비해 작으면 범위가 단순히 \(0 \leq x \leq K\) 가 된다. 이 경우가 실무에서 가장 흔하다.

2.3 정규화 확인

\[ \sum_{x} \frac{\binom{M}{x}\binom{N-M}{K-x}}{\binom{N}{K}} = 1 \]

이 등식은 반데르몽드 항등식(Vandermonde’s identity)의 직접적인 결과이다:

\[ \sum_{x=0}^{K} \binom{M}{x}\binom{N-M}{K-x} = \binom{N}{K} \]

조합론적 해석: \(N\) 개의 원소(\(M\) 개의 A그룹 + \(N-M\) 개의 B그룹)에서 \(K\) 개를 선택하는 방법은, A그룹에서 \(x\) 개, B그룹에서 \(K-x\) 개를 뽑는 모든 경우를 합한 것과 같다.


3 평균

3.1 유도 (축소 기법)

Casella & Berger의 우아한 유도를 따른다. 핵심 아이디어는 합산 과정에서 “한 단계 작은” 초기하 분포를 인식하여 합이 1임을 이용하는 것이다.

\[ E[X] = \sum_{x=1}^{K} x \cdot \frac{\binom{M}{x}\binom{N-M}{K-x}}{\binom{N}{K}} \]

( \(x = 0\) 항은 0이므로 \(x = 1\) 부터 시작)

Step 1: 항등식 \(x\binom{M}{x} = M\binom{M-1}{x-1}\) 을 적용한다.

이 항등식은 조합론적으로 해석할 수 있다: ” \(M\) 명 중 \(x\) 명을 뽑아 그중 한 명을 대표로 세우는 방법의 수”는, “먼저 대표 1명을 뽑고( \(M\) 가지), 나머지 \(M-1\) 명 중 \(x-1\) 명을 뽑는 방법의 수”와 같다.

Step 2: 항등식 \(\binom{N}{K} = \frac{N}{K}\binom{N-1}{K-1}\) 을 적용한다.

\[ E[X] = \sum_{x=1}^{K} \frac{M\binom{M-1}{x-1}\binom{N-M}{K-x}}{\frac{N}{K}\binom{N-1}{K-1}} = \frac{KM}{N} \sum_{x=1}^{K} \frac{\binom{M-1}{x-1}\binom{N-M}{K-x}}{\binom{N-1}{K-1}} \]

Step 3: \(y = x - 1\) 로 치환하면:

\[ \sum_{y=0}^{K-1} \frac{\binom{M-1}{y}\binom{(N-1)-(M-1)}{(K-1)-y}}{\binom{N-1}{K-1}} = 1 \]

이 합은 모수 \((N-1, M-1, K-1)\) 인 초기하 분포의 전체 확률 합이므로 1이다.

따라서:

\[ \boxed{E[X] = \frac{KM}{N}} \]

직관: 모집단에서 관심 범주의 비율이 \(M/N\) 이고, \(K\) 개를 뽑으므로, 기대 관심 개체 수는 \(K \cdot (M/N)\) 이다. 이 공식은 이항 분포의 평균 \(np\) 와 구조적으로 동일하다 — 여기서 \(p = M/N\) 역할을 한다.

직관: \(E[X] = \frac{KM}{N}\) 을 비율로 이해하기

항아리에 빨간 공 \(M\) 개, 초록 공 \(N-M\) 개가 있다. \(K\) 개를 꺼낸다.

직관적 기대값: 꺼낸 \(K\) 개에서 빨간 공이 차지하는 비율이 모집단 비율 \(M/N\) 과 같을 것으로 기대한다. 따라서 \(K \times (M/N)\).

경계값으로 검증: - \(K = N\) (전수 조사): \(E[X] = M\). 당연히 빨간 공 \(M\) 개를 모두 얻는다. - \(K = 1\): \(E[X] = M/N\). 한 개를 뽑았을 때 빨간 공일 확률과 정확히 같다.

평균은 복원/비복원을 구분하지 않는다: 이항 분포의 평균 \(Kp\) 와 동일한 구조이다. 비복원 추출이 평균을 바꾸지는 않는다. 차이는 분산에서 나타난다 — 비복원 추출은 분산을 줄인다.


4 분산

\[ \boxed{\text{Var}(X) = \frac{KM}{N} \cdot \frac{(N-M)(N-K)}{N(N-1)} = K \cdot \frac{M}{N} \cdot \frac{N-M}{N} \cdot \frac{N-K}{N-1}} \]

직관: 분산을 세 인수로 분해하기

\[\text{Var}(X) = \underbrace{K \cdot \frac{M}{N} \cdot \frac{N-M}{N}}_{\text{이항 분포의 분산}} \cdot \underbrace{\frac{N-K}{N-1}}_{\text{FPC}}\]

첫 두 항 \(K \cdot \frac{M}{N} \cdot \frac{N-M}{N}\): 이항 분포 \(\text{Binomial}(K, M/N)\) 의 분산이다. 복원 추출이었다면 분산이 이 값이 된다.

세 번째 항(FPC): 비복원 추출이 분산을 줄이는 효과이다. 이미 뽑은 개체를 되돌리지 않으므로, 모집단 구성이 점점 확정되어 불확실성이 줄어든다.

반사실: FPC가 없다면(복원 추출과 동일) 같은 모집단에서 더 많은 불확실성이 유지된다. 비복원 추출은 “정보 누적 효과”가 있어 분산이 항상 더 작다.

극단 확인: \(K = N\) (전수 조사)이면 FPC \(= 0\) 이므로 \(\text{Var}(X) = 0\). 모집단을 전부 보면 불확실성이 사라진다는 직관과 정확히 일치한다.

4.1 유한 모집단 교정인자

분산을 \(Kp(1-p)\) ( \(p = M/N\) )와 비교하면:

\[ \text{Var}(X) = Kp(1-p) \cdot \underbrace{\frac{N-K}{N-1}}_{\text{FPC}} \]

\(\frac{N-K}{N-1}\)유한 모집단 교정인자(Finite Population Correction, FPC)라 한다.

FPC의 의미
  • FPC \(< 1\) 이므로 초기하 분포의 분산은 항상 이항 분포의 분산보다 작다
  • \(K = 1\) 이면 FPC \(= (N-1)/(N-1) = 1\) : 하나만 뽑으면 복원/비복원 구분이 없다
  • \(K = N\) 이면 FPC \(= 0\) : 전수 조사하면 불확실성이 없다
  • \(N \to \infty\) ( \(K\) 고정)이면 FPC \(\to 1\) : 무한 모집단에서 이항과 동일해진다

FPC가 왜 분산을 줄이는가? 비복원 추출에서는 이미 뽑힌 개체의 정보가 남은 개체의 구성을 확정적으로 변화시킨다. 이 추가 정보가 불확실성을 줄인다. 극단적으로, 전수 조사( \(K = N\) )하면 모집단을 완전히 알게 되어 분산이 0이 된다.

4.2 분산 유도 (개요)

\(E[X^2]\) 을 구하기 위해 \(E[X(X-1)]\) 을 계산하는 것이 더 편리하다:

\[ E[X(X-1)] = \sum_{x=2}^{K} x(x-1) \cdot \frac{\binom{M}{x}\binom{N-M}{K-x}}{\binom{N}{K}} \]

평균 유도와 같은 축소 기법을 두 번 적용한다:

  • \(x(x-1)\binom{M}{x} = M(M-1)\binom{M-2}{x-2}\)
  • \(\binom{N}{K} = \frac{N(N-1)}{K(K-1)}\binom{N-2}{K-2}\)

치환 \(z = x - 2\) 후 합이 모수 \((N-2, M-2, K-2)\) 인 초기하 확률의 합 = 1이 됨을 인식하면:

\[ E[X(X-1)] = \frac{K(K-1)M(M-1)}{N(N-1)} \]

\[ \text{Var}(X) = E[X(X-1)] + E[X] - (E[X])^2 = \frac{KM(N-M)(N-K)}{N^2(N-1)} \]


5 이항 분포로의 수렴

정리: 초기하 → 이항 근사

\(N \to \infty\) , \(M/N \to p\) (고정)이면, 초기하 \((N, M, K)\) 분포는 이항 \((K, p)\) 분포에 수렴한다.

5.1 왜 수렴하는가

\(N\) 이 충분히 크면 한 개체를 뽑아도 모집단 구성이 거의 변하지 않는다. 따라서 비복원 추출이 사실상 복원 추출과 동일해진다.

수학적으로, PMF의 각 항을 분석하면:

\[ \frac{\binom{M}{x}\binom{N-M}{K-x}}{\binom{N}{K}} = \binom{K}{x} \cdot \frac{M(M-1)\cdots(M-x+1)}{N(N-1)\cdots(N-x+1)} \cdot \frac{(N-M)(N-M-1)\cdots}{(N-x)(N-x-1)\cdots} \]

\(N \to \infty\) , \(M/N \to p\) 이면:

\[ \frac{M}{N} \to p, \quad \frac{M-1}{N-1} \to p, \quad \ldots \]

따라서:

\[ P(X = x) \to \binom{K}{x} p^x (1-p)^{K-x} \]

이것은 이항 \((K, p)\) 의 PMF이다.

5.2 분산의 수렴

FPC에서 직접 확인할 수 있다:

\[ \frac{N-K}{N-1} \xrightarrow{N \to \infty} 1 \]

따라서 \(\text{Var}(X) = Kp(1-p) \cdot \text{FPC} \to Kp(1-p)\) (이항 분포의 분산).

5.3 실무적 근사 기준

조건 근사 사용 여부 근거
\(K/N < 0.05\) 이항 근사 사용 가능 FPC \(\approx 0.95\) , 오차 5% 미만
\(0.05 \leq K/N < 0.10\) 주의 필요 FPC의 영향이 눈에 띄기 시작
\(K/N \geq 0.10\) 초기하 분포 사용 권장 이항 근사 오차가 유의미
근사 오류의 방향성

이항 근사를 사용하면 분산을 과대 추정한다 (FPC \(< 1\) 이므로). 이는 신뢰구간이 실제보다 넓어지고 검정력(power)이 낮아지는 보수적 오류로 이어진다. 반대로, 초기하가 맞는 상황에서 이항을 강제하면 정밀도를 낭비하는 셈이다.


6 대칭성

초기하 분포는 흥미로운 대칭성을 가진다.

\[ P(X = x \mid N, M, K) = P(X = x \mid N, K, M) \]

즉, \(M\)\(K\) 의 역할을 바꿔도 분포가 동일하다. 조합론적으로, “관심 범주 \(M\) 개 중에서 표본에 포함된 개수”와 “표본 \(K\) 개 중에서 관심 범주에 속하는 개수”는 같은 사건이다. 이 대칭성은 \(\binom{M}{x}\binom{N-M}{K-x} = \binom{K}{x}\binom{N-K}{M-x}\) (반데르몽드 항등식의 변형)에서 확인된다.


7 피셔 정확검정 (Fisher’s Exact Test)

초기하 분포의 가장 유명한 통계적 응용은 피셔의 정확검정이다.

7.1 검정의 구조

\(2 \times 2\) 분할표에서 행 합계와 열 합계가 고정되었을 때, 특정 셀의 빈도 \(x\) 는 초기하 분포를 따른다.

성공 실패 합계
처리군 \(x\) \(K - x\) \(K\)
대조군 \(M - x\) \((N-M)-(K-x)\) \(N - K\)
합계 \(M\) \(N - M\) \(N\)

귀무가설 “처리 효과 없음” 하에서 \(x\) 의 분포는:

\[ P(X = x \mid N, M, K) = \frac{\binom{M}{x}\binom{N-M}{K-x}}{\binom{N}{K}} \]

7.2 왜 “정확”검정인가

카이제곱 검정은 기대 빈도가 충분히 클 때의 근사 검정이지만, 피셔 정확검정은 표본 크기에 관계없이 정확한 \(p\) -값을 계산한다. 기대 빈도가 5 미만인 셀이 있으면 카이제곱 근사가 부정확해지므로, 이때 피셔 정확검정을 사용해야 한다.

예시: 약물 부작용 검정

신약 임상시험에서 20명 중 처리군 10명, 대조군 10명이다. 부작용이 총 4건 발생했는데, 처리군에서 3건, 대조군에서 1건이었다. 처리군의 부작용 비율이 유의하게 높은가?

\(N = 20\) , \(M = 4\) (부작용 총 건수), \(K = 10\) (처리군 크기)에서, \(X \geq 3\) 의 확률:

\[ P(X \geq 3) = P(X=3) + P(X=4) = \frac{\binom{4}{3}\binom{16}{7}}{\binom{20}{10}} + \frac{\binom{4}{4}\binom{16}{6}}{\binom{20}{10}} \]

이 값이 유의수준보다 작으면 처리 효과(부작용 증가)를 주장할 수 있다.


8 다변량 초기하 분포

2개 범주를 넘어 \(k\) 개 범주로 일반화할 수 있다.

정의: 다변량 초기하 분포

모집단 \(N\) 개가 \(k\) 개 범주로 나뉘어 각각 \(M_1, M_2, \ldots, M_k\) 개씩 있다 ( \(\sum M_i = N\) ). \(K\) 개를 비복원 추출할 때, 각 범주에서 뽑힌 개수 \((X_1, \ldots, X_k)\) 의 결합 PMF는:

\[ P(X_1 = x_1, \ldots, X_k = x_k) = \frac{\binom{M_1}{x_1}\binom{M_2}{x_2}\cdots\binom{M_k}{x_k}}{\binom{N}{K}} \]

단, \(\sum x_i = K\) 이다.

이 분포는 다항 분포(multinomial distribution)의 비복원 추출 버전이다. \(N \to \infty\) 이면 다항 분포에 수렴한다.


9 응용 분야

분야 활용 구체적 예시
품질 관리 수용 표본 추출 로트 \(N\) 개 중 \(K\) 개 검사, 불량 \(x\) 개 발견 시 합격/불합격 판정
임상시험 피셔 정확검정 소규모 시험에서 처리 효과의 정확한 \(p\) -값 계산
생태학 포획-재포획법 \(N\) 마리, 표지 \(M\) 마리, 재포획 \(K\) 마리 중 표지 \(x\) 마리 → \(N\) 추정
카드 게임 핸드 확률 52장 중 5장 뽑기에서 특정 조합 확률
데이터 과학 피처 선택 전체 \(N\) 개 피처 중 상위 \(M\) 개가 선택된 \(K\) 개 부분집합에 \(x\) 개 포함될 확률
법의학 DNA 데이터베이스 매칭 유한 데이터베이스에서의 우연 일치 확률
선거 감사 표본 감사 전체 투표 용지 중 표본에서 오류 검출 확률

9.1 수용 표본 추출 (Acceptance Sampling)

Casella & Berger의 예시를 확장한다. 로트 25개 부품 중 불량이 \(M\) 개일 때, 10개를 검사하여 불량이 0개인 확률:

불량 수 \(M\) \(P(X = 0)\) 해석
0 1.000 불량 없으면 당연히 불량 안 나옴
1 0.600 불량 1개여도 표본에서 못 잡을 확률 60%
3 0.163 비교적 드물지만 가능
6 0.028 매우 드묾 — 불량 없다는 강한 증거
10 0.000 불량 10개인데 못 잡는 건 사실상 불가능

\(P(X = 0 \mid M = 6) = 0.028\) 이라는 결과는, “표본에서 불량이 없었다”는 관측이 “로트에 불량이 6개 이상”이라는 가설 하에서 매우 드문 사건임을 보여준다. 이 논리가 통계적 가설검정의 핵심이다.

9.2 포획-재포획법 (Capture-Recapture)

생태학에서 동물 개체 수를 추정하는 고전적 방법이다:

  • 1차 포획: \(M\) 마리를 잡아 표지하고 놓아줌
  • 2차 포획: \(K\) 마리를 재포획, 그 중 \(x\) 마리에 표지가 있음
  • 추정: \(E[X] = KM/N\) 에서 \(\hat{N} = KM/x\)

이 추정량은 \(x/K \approx M/N\) (표본 비율 \(\approx\) 모집단 비율)이라는 직관에 기반한다. 단, \(x = 0\) 이면 추정 불가능하다는 한계가 있다.


10 코드 예시

10.1 Step 1: 순수 Python 구현 (원리 이해)

import math

# ----- 초기하 PMF 직접 구현 -----
def hypergeom_pmf(x, N, M, K):
    """P(X = x | N, M, K) = C(M,x)*C(N-M,K-x) / C(N,K)"""
    def comb(n, r):
        if r < 0 or r > n:
            return 0
        return math.comb(n, r)
    return comb(M, x) * comb(N - M, K - x) / comb(N, K)

# ----- 예시: 품질 검사 (Casella & Berger Example 3.2.1) -----
N, M, K = 25, 6, 10
print(f"로트 {N}개, 불량 {M}개, 검사 {K}개")
print(f"{'x':>3} | {'P(X=x)':>10} | {'P(X<=x)':>10}")
print("-" * 35)
cum = 0.0
for x in range(min(K, M) + 1):
    p = hypergeom_pmf(x, N, M, K)
    cum += p
    print(f"{x:3d} | {p:10.6f} | {cum:10.6f}")

# ----- 평균과 분산 검증 -----
mean_formula = K * M / N
var_formula = K * M * (N - M) * (N - K) / (N**2 * (N - 1))

mean_direct = sum(x * hypergeom_pmf(x, N, M, K) for x in range(min(K, M) + 1))
var_direct = sum(
    (x - mean_formula)**2 * hypergeom_pmf(x, N, M, K)
    for x in range(min(K, M) + 1)
)

print(f"\n평균: 공식 = {mean_formula:.4f}, 직접 = {mean_direct:.4f}")
print(f"분산: 공식 = {var_formula:.4f}, 직접 = {var_direct:.4f}")

# ----- FPC 효과 -----
p = M / N
fpc = (N - K) / (N - 1)
binom_var = K * p * (1 - p)
print(f"\n이항 분산 (FPC 없음): {binom_var:.4f}")
print(f"FPC = {fpc:.4f}")
print(f"초기하 분산 = 이항 분산 × FPC = {binom_var * fpc:.4f}")

10.2 Step 2: scipy 구현 (실무 활용)

import numpy as np
from scipy import stats

# ----- scipy 초기하 분포 -----
# scipy: hypergeom(M_total, n_success, n_draw) = hypergeom(N, M, K)
N, M, K = 25, 6, 10
dist = stats.hypergeom(N, M, K)

print(f"E[X] = {dist.mean():.4f} (이론값: {K*M/N:.4f})")
print(f"Var(X) = {dist.var():.4f}")
print(f"P(X = 0) = {dist.pmf(0):.4f}")

# ----- 이항 근사와 비교 -----
p = M / N
binom_dist = stats.binom(K, p)

print(f"\n{'x':>3} | {'Hypergeom':>12} | {'Binomial':>12} | {'차이':>10}")
print("-" * 50)
for x in range(7):
    h = dist.pmf(x)
    b = binom_dist.pmf(x)
    print(f"{x:3d} | {h:12.6f} | {b:12.6f} | {abs(h-b):10.2e}")
# ----- 피셔 정확검정 -----
from scipy import stats

# 예시: 약물 부작용
# 처리군: 부작용 3/10, 대조군: 부작용 1/10
table = [[3, 7], [1, 9]]  # [[처리-부작용, 처리-정상], [대조-부작용, 대조-정상]]

odds_ratio, p_value = stats.fisher_exact(table, alternative='greater')
print(f"오즈비: {odds_ratio:.3f}")
print(f"p-value (단측): {p_value:.4f}")

# 카이제곱 검정과 비교
chi2, p_chi2, dof, expected = stats.chi2_contingency(table, correction=False)
print(f"\n카이제곱 검정 p-value: {p_chi2:.4f}")
print(f"기대 빈도:\n{expected}")
print("(기대 빈도 < 5인 셀이 있으면 피셔 정확검정이 더 신뢰할 수 있다)")
# ----- 포획-재포획 시뮬레이션 -----
import numpy as np

np.random.seed(42)
N_true = 500     # 실제 개체 수 (미지)
M_marked = 50    # 1차 포획 표지 수
K_recapture = 60 # 2차 포획 수
n_sim = 10000

estimates = []
for _ in range(n_sim):
    # 2차 포획에서 표지 개체 수 (초기하 분포)
    x = stats.hypergeom(N_true, M_marked, K_recapture).rvs()
    if x > 0:  # x=0이면 추정 불가
        N_hat = K_recapture * M_marked / x
        estimates.append(N_hat)

estimates = np.array(estimates)
print(f"실제 N = {N_true}")
print(f"추정값 중앙값: {np.median(estimates):.1f}")
print(f"추정값 평균: {np.mean(estimates):.1f}")
print(f"추정값 표준편차: {np.std(estimates):.1f}")
print(f"x=0으로 추정 불가 비율: {1 - len(estimates)/n_sim:.4f}")

10.3 R 코드

# R에서의 초기하 분포
N <- 25; M <- 6; K <- 10

# 기본 함수: dhyper, phyper, qhyper, rhyper
# R 매개변수: dhyper(x, m, n, k) = dhyper(x, M, N-M, K)
cat("P(X=0):", dhyper(0, M, N-M, K), "\n")
cat("E[X]:", K * M / N, "\n")

# 피셔 정확검정
table <- matrix(c(3, 1, 7, 9), nrow=2)
fisher.test(table, alternative="greater")

# 포획-재포획 추정
set.seed(42)
N_true <- 500; M_marked <- 50; K_recap <- 60
x_obs <- rhyper(10000, M_marked, N_true - M_marked, K_recap)
N_hat <- ifelse(x_obs > 0, K_recap * M_marked / x_obs, NA)
cat("추정값 중앙값:", median(N_hat, na.rm=TRUE), "\n")

11 관련 분포 비교

성질 초기하 이항 다항
추출 방식 비복원 복원 (독립) 복원 (독립)
모집단 유한 \(N\) 무한 (또는 복원) 무한 (또는 복원)
범주 수 2 2 \(k \geq 2\)
시행 간 독립 아니오
분산 보정 FPC 필요 불필요 불필요
극한 관계 \(N \to \infty\) 이면 이항

12 관련 주제

선행 지식

후속 주제

관련 개념

Subscribe

Enjoy this blog? Get notified of new posts by email: