이항 분포의 정규 근사에서 연속 수정의 타당성 검증

이항 분포 $B(n, p)$ 에 $Z$ 가 따를 때, $n$ 가 큰 경우, 분포 함수는,
$$P(Z\leq x)\approx\Phi\bigg(\frac{x - np}{\sqrt{np(1-p)}}\bigg)$$
와 근사할 수 있다($\Phi(\cdot)$ 는 정규 분포 $N(0, 1)$ 의 분포 함수). 이것을 이항 분포의 정규 근사라고 한다.
그런데 이항 분포는 이산 분포이므로 $x$ 가 정수치이면 임의의 $x'\in (x, x+1)$ 에 대해 $P(Z\leq x') = P(Z\leq x)$ 이고,
$$P(Z\leq x)\approx\Phi\bigg(\frac{x' - np}{\sqrt{np(1-p)}}\bigg)$$
모두 근사 할 수 있습니다. 그래서, 중간에,
$$P(Z\leq x)\approx\Phi\bigg(\frac{x +\frac{1}{2} - np}{\sqrt{np(1-p)}}\bigg)$$
그러면 근사의 정확도가 증가한다고 가정합니다. 이것을 이항 분포의 정규 근사에서 연속 수정이라고합니다.

이번에는, 이 연속 수정이 타당한가 어떤가를, $P(Z\leq x)$ 의 그래프를 $$\Phi\bigg(\dfrac{x - np}{\sqrt{np(1-p)}}\bigg),\Phi\bigg(\dfrac{x +\frac{1}{2} - np}{\sqrt{np(1-p)}}\bigg),\Phi\bigg(\dfrac{x + 1 - np}{\sqrt{np(1-p)}}\bigg)$$ 의 그래프와 각각 비교하여 확인해 본다. 이들은 모두 분산이 $np(1-p)$ 로, 평균은 각각 $$np,
np -\dfrac {1} {2}, np - 1 $ $의 정규 분포 분포 함수입니다.

정규 분포, 이항 분포는 scipy의 stats 모듈로 처리됩니다.
n = 1000000, p = 0.1.
from scipy.stats import binom, norm
import matplotlib.pyplot as plt
import numpy as np

n = 1000000
p = 0.1
x = np.arange(n/10, n/10 + 11)

fig = plt.figure(figsize=(12, 10))
ax = fig.add_subplot(1, 1, 1)

ax.plot(x, binom.cdf(x, n, p), label="true")
ax.plot(x, norm.cdf(x, loc=n*p, scale=np.sqrt(n*p*(1-p))), label="pred (loc = np)")
ax.plot(x, norm.cdf(x, loc=n*p-1/2, scale=np.sqrt(n*p*(1-p))), label="pred (loc = np - 1/2)")
ax.plot(x, norm.cdf(x, loc=n*p-1, scale=np.sqrt(n*p*(1-p))), label="pred (loc = np - 1)")

ax.get_xaxis().get_major_formatter().set_useOffset(False)
plt.legend()

plt.show()

1

그렇다면 확실히 x가 100000에서 100010의 범위에서 $P(Z\leq x)$ 에 가장 가까운 것은 $\Phi\bigg(\dfrac{x +\frac{1}{2} - np}{\sqrt {np (1-p)}}\bigg) $이며 연속 수정이 효과적임을 알 수 있습니다.
그러나 x의 범위를 변경하면,




그 결과, 연속 수정이 더 이상 의미가 없다는 것을 알 수 있습니다.
따라서 이번에는 연속 수정이 적용되는 범위가 어느 쪽까지인지를 살펴 보겠습니다.
$$ G =\bigg| P(Z\leq x) -\Phi\bigg(\frac{x +\frac{1}{2} - np}{\sqrt{np(1-p)}}\bigg )\bigg|$$
$$ H_1 =\bigg| P(Z\leq x) -\Phi\bigg(\frac{x - np}{\sqrt{np(1-p)}}\bigg)\bigg|$$
$$ H_2 =\bigg| P(Z\leq x) -\Phi\bigg(\frac{x + 1 - np}{\sqrt{np(1-p)}}\bigg)\bigg|$$

로,
$$\frac{H_1}{G} - 1,\frac{H_2}{G} - 1$$
를 각각 플롯 해 보자. 이것은 $P(Z\leq x)$ 가 다른 정규 분포보다 $\Phi\bigg(\dfrac{x +\frac{1}{2} - np}{\sqrt {np (1-p)}}\bigg) $에 가까울 때 양수 값을 취하고, 가까울수록 값이 커야합니다.
from scipy.stats import binom, norm
import matplotlib.pyplot as plt
import numpy as np

n = 1000000
p = 0.1
x = np.arange(n/10 - 100, n/10 + 101)

fig = plt.figure(figsize=(12, 10))
ax = fig.add_subplot(1, 1, 1)

G = abs(binom.cdf(x, n, p) - norm.cdf(x, loc=n*p-1/2, scale=np.sqrt(n*p*(1-p))))
H_1 = abs(binom.cdf(x, n, p) - norm.cdf(x, loc=n*p, scale=np.sqrt(n*p*(1-p))))
H_2 = abs(binom.cdf(x, n, p) - norm.cdf(x, loc=n*p-1, scale=np.sqrt(n*p*(1-p))))

ax.plot(x, H_1 / G - 1, label="H_1 / G - 1")
ax.plot(x, H_2 / G - 1, label="H_2 / G - 1")

ax.get_xaxis().get_major_formatter().set_useOffset(False)
plt.legend()

plt.show()



확실히 100000 부근에서는 양의 값을 취하고 있다. 단 100000 그냥 가장 가까워지고 있다는 것은 아닌 것 같다.
x의 폭을 넓히면



x = 99700, 100300에서 가장 연속적인 수정이 적용된 것 같습니다.
그렇다면 다른 범위에서 어떻게됩니까?



x = 99500 에서 $\frac{H_1}{G} - 1$ 는 음수가 되어 연속 수정이 꺼져 있음을 알 수 있다. 이것은 $H_1$ 가 정확히 0이 되었음, 즉 $\Phi\bigg(\dfrac{x - np}{\sqrt{np(1-p)}}\bigg)$ 와 $P( Z\leq x) $의 위치 관계가 역전되었음을 의미합니다.



x가 100000보다 큰 경우에도 대칭입니다.
이상으로부터 n = 1000000, p = 0.1 인 경우, 이항 분포의 정규 근사에서의 연속 보정은 x가 99500에서 100500의 범위에서 유효하다는 것이 확인되었다.



「통계학」(일본 통계 학회 편) P.26, 27 

좋은 웹페이지 즐겨찾기