[PYTHON] Dérivez soigneusement la plage de quadrants de la distribution normale standard depuis le début

Cible

Dérivation de la plage de quadrants de la distribution normale standard Méthode de calcul exacte de la valeur numérique du "tableau de distribution normale standard" qui est souvent jointe à l'annexe du livre de statistiques

Procédure de calcul

Pour le moment, si le premier quadrant est $ Q_1 $ et le troisième quadrant est $ Q_3 , il s'agit d'une fonction de densité de probabilité de la distribution normale standard. $ f(x)= \frac{1}{\sqrt{2\pi}}exp\left(-\frac{x^2}{2}\right)$$ Car, la relation suivante tient.

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

Et si vous faites la différence entre ces deux formules,


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

Ici, puisqu'il s'agit d'une distribution normale standard, la moyenne $ \ mu = 0 $ est valable. En utilisant la constante c,

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

Parce qu'il peut être exprimé comme

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

Sera. Ici, en utilisant la fonction d'erreur 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}

(Merci à Wolfram Alpha), donc l'équation suivante est valable. $erf\left(\frac{c}{\sqrt{2}}\right)=\frac{1}{2}$

Ici, je voudrais trouver c inclus dans la fonction d'erreur, mais les approches d'analyse telles que l'intégration partielle sont complètement incommodes. C'est là que vous vous retrouvez coincé dans le marais de l'intégration. Quel type de politique devriez-vous demander?

Formuler par programme des équations pour les fonctions d'erreur

Cette fois, nous utiliserons Numpy comme module. Heureusement, numpy a déjà une fonction d'erreur intégrée, donc c'est vraiment facile à utiliser. (Il semble que Scipy puisse faire de même.)

Je vais également visualiser la fonction plus tard, donc j'inclurai également matplotlib.

import numpy as np
import matplotlib.pyplot as plt

Maintenant, à partir d'ici, je voudrais trouver $ c $ pour lequel l'équation suivante est valable. $ erf \ left (\ frac {c} {\ sqrt {2}} \ right) = \ frac {1} {2} $

Au fait, cette fonction d'erreur $erf(x)=\frac{2}{\sqrt{\pi}}\int_{0}^{x}exp\left(-t^2\right)dt$ Il est exprimé sous la forme de. Si vous essayez de visualiser le type de fonction de cette fonction d'erreur

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

<Résultat de sortie>

erf(x).png

C'est une forme générale comme la fonction sigmoïde, et elle augmente de manière monotone dans un sens étroit.

Donc, résolvez c avec l'approche suivante. ① Puisqu'il s'agit d'une distribution normale standard, la plage de c à partir des caractéristiques de l'écart type (USE OF STANDARD DEVIATION) [-1,1] Ensuite, augmentez de 10 $ ^ {-6} $ selon l'ordre de la table de distribution. ② $ erf (\ frac {c} {\ sqrt {2}}) <\ frac {1} {2} Tant qu'il est inférieur à $, exécutez le calcul et augmentez la valeur intégrée, et $ erf (\ frac) {c} {\ sqrt {2}}) ≒ \ frac {1} {2} Trouvez la valeur de dernière minute c qui est $.

Codez ceci de la même manière que lors de la programmation de la fonction d'erreur.

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)

<Résultat de sortie> 0.6744900000064764

Quand j'essaye de le visualiser,

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

<Résultat de sortie> erf(x)2.png La valeur de c à l'intersection des deux lignes correspond au résultat de sortie précédent de 0,67449 ...

dernier

D'après le résultat du programme, $ c = 0,674490 $ ..., donc la plage de quadrants est

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

Par conséquent, la plage de quadrants de la distribution normale standard est de 1,349 $.

Recommended Posts

Dérivez soigneusement la plage de quadrants de la distribution normale standard depuis le début
Notes d'apprentissage depuis le début de Python 1
Omettre la nomenclature depuis le début de la chaîne
Notes d'apprentissage depuis le début de Python 2
Battre la fonction de densité de probabilité de la distribution normale
Trouver le début de l'avenomics à partir du grossissement NT 1
Le début de cif2cell
Apprenez Nim avec Python (dès le début de l'année).
Étude depuis le début de Python Hour1: Hello World
Étapes pour calculer la probabilité d'une distribution normale
Étude de Python Hour8: Utilisation de packages
Vérification de la distribution normale
Remarque DJango: depuis le début (Simplification et fractionnement d'URLConf)
First Python 3 ~ Le début de la répétition ~
DJango Memo: Depuis le début (préparation)
Tester l'adéquation de la distribution
[Python] Note: Fonction auto-conçue pour trouver la zone de distribution normale