표준 정규 분포의 사분위 범위의 도출을 시작으로 정교하게
목표
표준 정규 분포의 사분위 범위 도출
흔히 통계학의 책의 부록에 관한 「표준 정규 분포표」의 수치의 엄밀한 계산 방법
계산 절차
우선, 제1사분위수를 $Q_1$, 제3사분위수를 $Q_3$로 두면, 표준 정규 분포의 확률밀도 함수이다
$$ f(x)=\frac{1}{\sqrt{2\pi}}exp\left(-\frac{x^2}{2}\right)$$
반대로 다음 관계가 성립합니다.
$$\int_{-\infty}^{Q_1} f(x)\dx=\frac{1}{4}$$
$$\int_{-\infty}^{Q_3} f(x)\dx=\frac{3}{4}$$
그리고 이 2식의 차이를 취하면,
\begin{align}
\int_{-\infty}^{Q_3} f(x) \ dx-\int_{-\infty}^{Q_1} f(x) \ dx&=\int_{Q_1}^{Q_3} f(x) \ dx \\
&=\frac{1}{2}
\end{align}
여기서 표준 정규 분포이므로 평균 $\mu=0$가 성립합니다. 상수 c를 사용하여,
$$Q_1=\mu-c=-c$$
$$Q_3=\mu+c=c$$
라고 표현할 수 있기 때문에
\begin{align}
\int_{Q_1}^{Q_3} f(x) \ dx&=\int_{-c}^{c} f(x) \ dx\\ &=\frac{1}{2}
\end{align}
됩니다.
여기서 오차 함수 erf $ (x) $를 사용하여,
\begin{align}
\int_{-c}^{c} exp\left(-\frac{x^2}{2}\right) \ dx&=\left[\frac{\pi}{2} erf\left(\frac{x}{\sqrt{2}}\right)\right]_{-c}^{c}\\
&= \sqrt{2\pi} erf\left(\frac{c}{\sqrt{2}}\right)
\end{align}
라고 표시됩니다( Wolfram Alpha 씨, 감사합니다) 때문에, 이하의 등식이 성립합니다.
$$erf\left(\frac{c}{\sqrt{2}}\right)=\frac{1}{2}$$
여기서 오차 함수에 포함되는 c를 구하고 싶습니다만, 부분 적분 등의 해석 어프로치에서는 전혀 치아가 서 있지 않습니다. 여기서 적분의 늪에 들어가는 것입니다. 어떤 정책으로 구할까요?
오류 함수에 대한 방정식을 프로그래밍 방식으로
이번에는 Numpy를 모듈로 사용합니다.
다행히 numpy에는 오차 함수가 이미 짜넣어져 있기 때문에 굉장히 편해집니다.
(Scipy에서도 마찬가지로 할 수있는 것 같습니다.)
나중에 함수의 시각화도 하기 때문에 matplotlib도 넣을 때입니다.
import numpy as np
import matplotlib.pyplot as plt
그런데, 여기로부터 하기의 등식이 성립되는 $c$를 요구하려고 생각합니다. $$erf\left(\frac{c}{\sqrt{2}}\right)=\frac{1}{2}$$
그런데이 오차 함수는
$$erf(x)=\frac{2}{\sqrt{\pi}}\int_{0}^{x}exp\left(-t^2\right)dt$$
라는 형태로 표현됩니다. 이 오차 함수가 어떤 함수형인지 시각화해 보면
fig = plt.figure(figsize = (6, 4))
ax = fig.add_subplot(111)
x=np.linspace(-2.0,2.0,2000000)
y=np.erf(x/np.sqrt(2))
ax.set_xlabel("x", fontsize = 14)
ax.set_ylabel("erf(x)", fontsize = 14)
plt.plot(x, y, ls="-", label="erf(x)", color="red")
plt.title("Error function")
plt.legend()
plt.show()
<출력 결과>
Sigmoid 함수 같은 개략으로, 협의 단조 증가하고 있네요.
그래서 다음과 같은 접근법으로 c를 푸십시오.
①
표준 정규분포이므로 표준편차의 특징
②$ erf (\frac{c}{\sqrt{2}}) <\frac{1}{2} $ 미만이 되는 동안은 계산을 실행시켜, 적분값을 증가시켜 가, $ erf (\frac {c}{\sqrt{2}}) ≒\frac{1}{2} $가 되는 빠듯한 값 c를 구한다.
이것은 오차 함수의 프로그램과 마찬가지로 코딩됩니다.
for c in np.arange(-1.000000,1.000000):
while np.erf(c/np.sqrt(2)) < 1/2:
c=c+0.000001
break
print(c)
<출력 결과>
0.6744900000064764
시각화도 실행해 보면,
fig = plt.figure(figsize = (6, 4))
ax = fig.add_subplot(111)
x=np.linspace(-1.0,1.0,1000000)
y=np.erf(x/np.sqrt(2))
ax.set_xlabel("c", fontsize = 14)
ax.set_ylabel("erf score", fontsize = 14)
plt.plot(x, y, ls="-", label="erf(c/√2)")
ax.axhline(0.5, ls = "-.", color = "green", label="erf score = 1/2")
plt.title("Error function")
plt.legend()
plt.show()
<출력 결과>
(USE OF STANDARD DEVIATION)
두 선의 교차점의 c 값은 이전 출력 결과의 0.67449...에 해당합니다.
마지막
프로그램 결과로부터, $c=0.674490$...이 되기 때문에, 사분위 범위는
\begin{align}
c-(-c)&=2c \\
&= 2*(0.674490...) \\
&≒ 1.349
\end{align}
따라서 표준 정규 분포의 사분위 범위는 $1.349$로 구해집니다.
[2022/01/17 16:45 추가]
현재는 Python의 scipy 패키지의 special
에 의해, 아래와 같이 간단하게 오차 함수를 거치므로 상기와 같은 대등한 분할은 필요 없습니다.
from scipy import special
import matplotlib.pyplot as plt
x = np.linspace(-1.00, 1.00)
plt.plot(x, special.erf(x))
plt.xlabel('x')
plt.ylabel('erf(x)')
plt.show()
Reference
이 문제에 관하여(표준 정규 분포의 사분위 범위의 도출을 시작으로 정교하게), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/DecaltingMs/items/eb6dc14b62e6bb255c31
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
우선, 제1사분위수를 $Q_1$, 제3사분위수를 $Q_3$로 두면, 표준 정규 분포의 확률밀도 함수이다
$$ f(x)=\frac{1}{\sqrt{2\pi}}exp\left(-\frac{x^2}{2}\right)$$
반대로 다음 관계가 성립합니다.
$$\int_{-\infty}^{Q_1} f(x)\dx=\frac{1}{4}$$
$$\int_{-\infty}^{Q_3} f(x)\dx=\frac{3}{4}$$
그리고 이 2식의 차이를 취하면,
\begin{align}
\int_{-\infty}^{Q_3} f(x) \ dx-\int_{-\infty}^{Q_1} f(x) \ dx&=\int_{Q_1}^{Q_3} f(x) \ dx \\
&=\frac{1}{2}
\end{align}
여기서 표준 정규 분포이므로 평균 $\mu=0$가 성립합니다. 상수 c를 사용하여,
$$Q_1=\mu-c=-c$$
$$Q_3=\mu+c=c$$
라고 표현할 수 있기 때문에
\begin{align}
\int_{Q_1}^{Q_3} f(x) \ dx&=\int_{-c}^{c} f(x) \ dx\\ &=\frac{1}{2}
\end{align}
됩니다.
여기서 오차 함수 erf $ (x) $를 사용하여,
\begin{align}
\int_{-c}^{c} exp\left(-\frac{x^2}{2}\right) \ dx&=\left[\frac{\pi}{2} erf\left(\frac{x}{\sqrt{2}}\right)\right]_{-c}^{c}\\
&= \sqrt{2\pi} erf\left(\frac{c}{\sqrt{2}}\right)
\end{align}
라고 표시됩니다( Wolfram Alpha 씨, 감사합니다) 때문에, 이하의 등식이 성립합니다.
$$erf\left(\frac{c}{\sqrt{2}}\right)=\frac{1}{2}$$
여기서 오차 함수에 포함되는 c를 구하고 싶습니다만, 부분 적분 등의 해석 어프로치에서는 전혀 치아가 서 있지 않습니다. 여기서 적분의 늪에 들어가는 것입니다. 어떤 정책으로 구할까요?
오류 함수에 대한 방정식을 프로그래밍 방식으로
이번에는 Numpy를 모듈로 사용합니다.
다행히 numpy에는 오차 함수가 이미 짜넣어져 있기 때문에 굉장히 편해집니다.
(Scipy에서도 마찬가지로 할 수있는 것 같습니다.)
나중에 함수의 시각화도 하기 때문에 matplotlib도 넣을 때입니다.
import numpy as np
import matplotlib.pyplot as plt
그런데, 여기로부터 하기의 등식이 성립되는 $c$를 요구하려고 생각합니다. $$erf\left(\frac{c}{\sqrt{2}}\right)=\frac{1}{2}$$
그런데이 오차 함수는
$$erf(x)=\frac{2}{\sqrt{\pi}}\int_{0}^{x}exp\left(-t^2\right)dt$$
라는 형태로 표현됩니다. 이 오차 함수가 어떤 함수형인지 시각화해 보면
fig = plt.figure(figsize = (6, 4))
ax = fig.add_subplot(111)
x=np.linspace(-2.0,2.0,2000000)
y=np.erf(x/np.sqrt(2))
ax.set_xlabel("x", fontsize = 14)
ax.set_ylabel("erf(x)", fontsize = 14)
plt.plot(x, y, ls="-", label="erf(x)", color="red")
plt.title("Error function")
plt.legend()
plt.show()
<출력 결과>
Sigmoid 함수 같은 개략으로, 협의 단조 증가하고 있네요.
그래서 다음과 같은 접근법으로 c를 푸십시오.
①
표준 정규분포이므로 표준편차의 특징
②$ erf (\frac{c}{\sqrt{2}}) <\frac{1}{2} $ 미만이 되는 동안은 계산을 실행시켜, 적분값을 증가시켜 가, $ erf (\frac {c}{\sqrt{2}}) ≒\frac{1}{2} $가 되는 빠듯한 값 c를 구한다.
이것은 오차 함수의 프로그램과 마찬가지로 코딩됩니다.
for c in np.arange(-1.000000,1.000000):
while np.erf(c/np.sqrt(2)) < 1/2:
c=c+0.000001
break
print(c)
<출력 결과>
0.6744900000064764
시각화도 실행해 보면,
fig = plt.figure(figsize = (6, 4))
ax = fig.add_subplot(111)
x=np.linspace(-1.0,1.0,1000000)
y=np.erf(x/np.sqrt(2))
ax.set_xlabel("c", fontsize = 14)
ax.set_ylabel("erf score", fontsize = 14)
plt.plot(x, y, ls="-", label="erf(c/√2)")
ax.axhline(0.5, ls = "-.", color = "green", label="erf score = 1/2")
plt.title("Error function")
plt.legend()
plt.show()
<출력 결과>
(USE OF STANDARD DEVIATION)
두 선의 교차점의 c 값은 이전 출력 결과의 0.67449...에 해당합니다.
마지막
프로그램 결과로부터, $c=0.674490$...이 되기 때문에, 사분위 범위는
\begin{align}
c-(-c)&=2c \\
&= 2*(0.674490...) \\
&≒ 1.349
\end{align}
따라서 표준 정규 분포의 사분위 범위는 $1.349$로 구해집니다.
[2022/01/17 16:45 추가]
현재는 Python의 scipy 패키지의 special
에 의해, 아래와 같이 간단하게 오차 함수를 거치므로 상기와 같은 대등한 분할은 필요 없습니다.
from scipy import special
import matplotlib.pyplot as plt
x = np.linspace(-1.00, 1.00)
plt.plot(x, special.erf(x))
plt.xlabel('x')
plt.ylabel('erf(x)')
plt.show()
Reference
이 문제에 관하여(표준 정규 분포의 사분위 범위의 도출을 시작으로 정교하게), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/DecaltingMs/items/eb6dc14b62e6bb255c31
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure(figsize = (6, 4))
ax = fig.add_subplot(111)
x=np.linspace(-2.0,2.0,2000000)
y=np.erf(x/np.sqrt(2))
ax.set_xlabel("x", fontsize = 14)
ax.set_ylabel("erf(x)", fontsize = 14)
plt.plot(x, y, ls="-", label="erf(x)", color="red")
plt.title("Error function")
plt.legend()
plt.show()
for c in np.arange(-1.000000,1.000000):
while np.erf(c/np.sqrt(2)) < 1/2:
c=c+0.000001
break
print(c)
fig = plt.figure(figsize = (6, 4))
ax = fig.add_subplot(111)
x=np.linspace(-1.0,1.0,1000000)
y=np.erf(x/np.sqrt(2))
ax.set_xlabel("c", fontsize = 14)
ax.set_ylabel("erf score", fontsize = 14)
plt.plot(x, y, ls="-", label="erf(c/√2)")
ax.axhline(0.5, ls = "-.", color = "green", label="erf score = 1/2")
plt.title("Error function")
plt.legend()
plt.show()
프로그램 결과로부터, $c=0.674490$...이 되기 때문에, 사분위 범위는
\begin{align}
c-(-c)&=2c \\
&= 2*(0.674490...) \\
&≒ 1.349
\end{align}
따라서 표준 정규 분포의 사분위 범위는 $1.349$로 구해집니다.
[2022/01/17 16:45 추가]
현재는 Python의 scipy 패키지의
special
에 의해, 아래와 같이 간단하게 오차 함수를 거치므로 상기와 같은 대등한 분할은 필요 없습니다.from scipy import special
import matplotlib.pyplot as plt
x = np.linspace(-1.00, 1.00)
plt.plot(x, special.erf(x))
plt.xlabel('x')
plt.ylabel('erf(x)')
plt.show()
Reference
이 문제에 관하여(표준 정규 분포의 사분위 범위의 도출을 시작으로 정교하게), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/DecaltingMs/items/eb6dc14b62e6bb255c31텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)