[PYTHON] Leiten Sie den Quadrantenbereich der Standardnormalverteilung von Anfang an sorgfältig ab

Ziel

Ableitung des Quadrantenbereichs der Standardnormalverteilung Genaue Berechnungsmethode für den numerischen Wert der "Standardnormalverteilungstabelle", die häufig dem Anhang des Statistikbuchs beigefügt ist

Berechnungsverfahren

Wenn der erste Quadrant $ Q_1 $ und der dritte Quadrant $ Q_3 $ ist, handelt es sich vorerst um eine Wahrscheinlichkeitsdichtefunktion der Standardnormalverteilung. $ f(x)= \frac{1}{\sqrt{2\pi}}exp\left(-\frac{x^2}{2}\right)$ Für gilt die folgende Beziehung.

\int_{-\infty}^{Q_1} f(x) \ dx=\frac{1}{4}
\int_{-\infty}^{Q_3} f(x) \ dx=\frac{3}{4}

Und wenn Sie den Unterschied zwischen diesen beiden Formeln nehmen,


\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}

Da es sich um eine Standardnormalverteilung handelt, gilt hier der Durchschnitt $ \ mu = 0 $. Unter Verwendung der Konstante c,

Q_1=\mu-c=-c
Q_3=\mu+c=c

Weil es ausgedrückt werden kann als

\begin{align}
\int_{Q_1}^{Q_3} f(x) \ dx&=\int_{-c}^{c} f(x) \ dx\\ &=\frac{1}{2}
\end{align}

Wird sein. Hier wird mit der Fehlerfunktion 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}

(Dank Wolfram Alpha) gilt also die folgende Gleichung. $erf\left(\frac{c}{\sqrt{2}}\right)=\frac{1}{2}$

Hier würde ich gerne c in der Fehlerfunktion finden, aber Analyseansätze wie die teilweise Integration sind völlig unpraktisch. Hier stecken Sie im Sumpf der Integration fest. Welche Art von Politik sollten Sie verlangen?

Formulieren Sie programmgesteuert Gleichungen für Fehlerfunktionen

Dieses Mal werden wir Numpy als Modul verwenden. Glücklicherweise ist in numpy bereits eine Fehlerfunktion integriert, sodass die Verwendung sehr einfach ist. (Es scheint, dass Scipy dasselbe tun kann.)

Ich werde die Funktion später auch visualisieren, also werde ich auch matplotlib einschließen.

import numpy as np
import matplotlib.pyplot as plt

Von hier aus möchte ich $ c $ finden, für das die folgende Gleichung gilt. $ erf \ left (\ frac {c} {\ sqrt {2}} \ right) = \ frac {1} {2} $

Diese Fehlerfunktion übrigens $erf(x)=\frac{2}{\sqrt{\pi}}\int_{0}^{x}exp\left(-t^2\right)dt$ Es wird in Form von ausgedrückt. Wenn Sie versuchen zu visualisieren, um welche Art von Funktion es sich bei dieser Fehlerfunktion handelt

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()

erf(x).png

Es ist eine allgemeine Form wie die Sigmoid-Funktion und nimmt im engeren Sinne monoton zu.

Lösen Sie also c mit dem folgenden Ansatz. ① Da es sich um eine Standardnormalverteilung handelt, ist der Bereich von c von den Merkmalen der Standardabweichung (VERWENDUNG DER STANDARDABWEICHUNG) [-1,1] Erhöhen Sie dann um $ 10 ^ {-6} $ gemäß der Reihenfolge der Verteilungstabelle. ② $ erf (\ frac {c} {\ sqrt {2}}) <\ frac {1} {2} Wenn es kleiner als $ ist, führen Sie die Berechnung aus und erhöhen Sie den integrierten Wert, und $ erf (\ frac) {c} {\ sqrt {2}}) ≒ \ frac {1} {2} Ermitteln Sie den Last-Minute-Wert c, der $ ist.

Codieren Sie dies auf die gleiche Weise wie beim Programmieren der Fehlerfunktion.

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

Wenn ich versuche, es zu visualisieren,

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()
![erf(x)2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223549/d2d3d5cf-d0f5-e72e-06c8-3e9c4e61e40a.png) Der Wert von c am Schnittpunkt der beiden Linien entspricht dem vorherigen Ausgabeergebnis von 0,67449 ...

letzte

Aus dem Programmergebnis ergibt sich $ c = 0,674490 $ ..., also ist der Quadrantenbereich

\begin{align}
c-(-c)&=2c \\ 
&= 2*(0.674490...) \\ 
&≒ 1.349
\end{align}

Daher beträgt der Quadrantenbereich der Standardnormalverteilung 1,349 USD.

Recommended Posts