En statistique, les conséquences des événements qui se produisent dans le monde sont appelées ** variables aléatoires **. Et c'est la ** distribution de probabilité ** qui nous donne la vraisemblance de chaque variable stochastique.
La forme de la distribution de probabilité à laquelle appartient la variable de probabilité change en fonction du type d'événement dont elle résulte. Vous trouverez ci-dessous un résumé des distributions probabilistes couramment utilisées dans les statistiques, avec du code en Python qui dessine la distribution probabiliste.
Le résultat d'un événement est $ X $, qui a des valeurs discrètes. Comme exemple de chaque distribution, le graphique de la ** fonction de masse de probabilité ** est présenté.
La fonction de masse stochastique est une fonction qui donne à chaque $ X $ une probabilité.
Supposons qu'un événement X ne puisse avoir que deux résultats: $ X = 0 $ ou $ X = 1 $. Alors, si $ P (X = 1) = p $, la variable de probabilité $ X $ suit la ** distribution de Bernoulli **.
Si la variable de probabilité $ X $ est la probabilité $ p $ [distribution de Bernouy](https://ja.wikipedia.org/wiki/%E3%83%99%E3%83%AB%E3%83%8C%E3 Si vous suivez% 83% BC% E3% 82% A4% E5% 88% 86% E5% B8% 83) ($ X $ ~ $ B (p) $), alors:
\begin{align}
P(X=1) &= p \\
P(X=0) &= 1 - p \\
E[X] &= p \\
Var(X) &= p(1-p)
\end{align}
A ce moment, $ E [X] $ représente la moyenne et $ Var (X) $ représente la variance.
Par exemple, une fois que vous passez un test avec un taux de réussite de 30%, la fonction de masse de probabilité du résultat est affichée.
bernoulli.py
## Bernoulli distribution ---------------------------------------------
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import bernoulli
# probability that X=1
p = 0.3
# possible outcomes
x = [0,1]
# visualize
fig, ax = plt.subplots(1,1)
ax.plot(x, bernoulli.pmf(x, p), 'bo', ms=8)
ax.vlines(x, 0, bernoulli.pmf(x,p), colors='b', lw=5, alpha=0.5)
ax.set_xlabel('X')
ax.set_ylabel('probability')
ax.set_title('bernoulli pmf')
ax.set_ylim((0,1))
ax.set_aspect('equal')
La distribution diagonale a généralisé la distribution de Bernoulli. Chose. C'est juste la somme des essais de Bernouy $ N $. Représente une distribution de probabilité dans laquelle un événement $ X $ avec une probabilité de $ p $ se produit $ k $ fois sur des essais $ N $.
Lorsque $ X $ ~ $ Bin (N, p) $
\begin{align}
P(X=k|p) &= \binom{N}{k} p^{k}(1-p)^{N-k} \\
E[X] &= np \\
Var(X) &= np(1-p)
\end{align}
À titre d'exemple, voici une fonction de masse probabiliste qui exprime la probabilité de réussir un test avec un taux de réussite de 30% cinq fois.
binomial.py
## Binomial distribution ---------------------------------------------
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import binom
# probability that X=1
p = 0.3
# the number of trials
N = 5
# X=1 happens k times
k = np.arange(N+1)
# visualize
fig, ax = plt.subplots(1,1)
ax.plot(k, binom.pmf(k, N, p), 'bo', ms=8)
ax.vlines(k, 0, binom.pmf(k, N, p), colors='b', lw=5, alpha=0.5)
ax.set_xlabel('k')
ax.set_ylabel('probability (X=1)')
ax.set_title('binomial pmf')
ax.set_ylim((0,1))
[Distribution de Poisson](https://ja.wikipedia.org/wiki/%E3%83%9D%E3%82%A2%E3%82%BD%E3%83%B3%E5%88%86%E5% B8% 83) est utilisé pour décrire le nombre de fois qu'un événement se produit. Le seul paramètre est $ \ lambda $, qui représente la fréquence moyenne de l'événement.
Quand $ X \ sim Pois (\ lambda) $
\begin{align}
P(X=k|\lambda) &= \frac{\lambda^{k} e^{-\lambda}}{k!} \hspace{15pt} for \hspace{10pt} k = 0, 1, 2, ...\\
E[X] &= \lambda \\
Var(X) &= \lambda
\end{align}
La distribution de Poisson est caractérisée par moyenne = variance = $ \ lambda $.
Un exemple est la fréquence de déclenchement des cellules nerveuses. On sait que l'activité de mise à feu des cellules nerveuses est approximativement un processus de Poisson, et en supposant que le taux de déclenchement moyen d'une cellule nerveuse est de 5 (fois / s), le nombre de tirs de cette cellule nerveuse par seconde est le suivant. La distribution de probabilité est la suivante.
poisson.py
## Poisson distribution --------------------------------------------
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import poisson
# rate parameter
mu = 5
# possible counts
k = np.arange(poisson.ppf(0.01, mu), poisson.ppf(0.99, mu))
# visualize
fig, ax = plt.subplots(1,1)
ax.plot(k, poisson.pmf(k, mu), 'bo', ms=8)
ax.vlines(k, 0, poisson.pmf(k, mu), colors='b', lw=5, alpha=0.5)
ax.set_xlabel('k')
ax.set_ylabel('probability')
ax.set_title('poisson pmf')
Le résultat d'un événement est que $ X $ prend des valeurs continues plutôt que des valeurs discrètes. À titre d'exemple de chaque distribution, le graphique de la ** fonction de densité de probabilité ** est présenté.
La fonction de densité de probabilité, contrairement à la fonction de masse de probabilité, est une fonction qui donne à chaque $ X $ sa vraisemblance relative (vraisemblance relative). La probabilité que $ X $ prenne la plage $ a \ leq X \ leq b $ est calculée par l'aire de la fonction de densité de probabilité dans cette plage, c'est-à-dire l'intégrale $ \ int_ {a} ^ {b} f (X) dX $. Peut être fait. Par définition de probabilité, l'aire de la plage entière $ - \ inf \ leq X \ leq \ inf $ de la fonction de densité de probabilité est 1.
Distribution exponentielle montre qu'un événement se produit plusieurs fois. Lorsque vous vous réveillez, il décrit le temps écoulé entre les événements. Le point est la répartition du temps d'attente.
Plus statistiquement, il représente le temps entre les processus de Poisson. Par conséquent, le paramètre, comme Poisson, est $ \ lambda $, qui représente la fréquence moyenne.
Quand $ X \ sim Exp (\ lambda) $
\begin{align}
f(x|\lambda) &= \lambda e^{-\lambda x} \hspace{15pt} (x \geq 0) \\
E[X] &= \frac{1}{\lambda} \\
Var(X) &= \frac{1}{\lambda^{2}}
\end{align}
En d'autres termes, si un événement est un processus de Poisson, le temps d'attente moyen d'un événement au suivant est de $ 1 / \ lambda $.
Ce qui suit montre la distribution du temps entre le déclenchement de la cellule nerveuse et le prochain déclenchement sous forme de distribution exponentielle.
exponential.py
## Exponential distribution --------------------------------------------
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import expon
# rate parameter
mu = 5
# possible waiting time
k = np.linspace(expon.ppf(0.01, loc=0, scale=1/mu), expon.ppf(0.99, loc=0, scale=1/mu), 100)
# visualize
fig, ax = plt.subplots(1,1)
ax.plot(k, expon.pdf(k, loc=0, scale=1/mu), 'r-', lw=5, alpha=0.5)
ax.set_xlabel('waiting time')
ax.set_ylabel('f(x)')
ax.set_title('exponential pdf')
La distribution uniforme est la forme la plus simple de distribution. Cependant, il renvoie la même valeur de probabilité pour toute variable de probabilité $ x $ dans la plage spécifiée, il s'agit donc d'une distribution de probabilité essentielle lorsque les résultats possibles sont également probables.
Lorsque $ X $ ~ $ U [a, b] $, ce qui suit est vrai.
\begin{align}
f(x) &= \frac{1}{b - a} \hspace{15pt} if \hspace{15pt} a \leq x \leq b \\
f(x) &= 0 \hspace{45pt} otherwise \\
E[X] &= \frac{a + b}{2} \\
Var(X) &= \frac{(b - a)^{2}}{12}
\end{align}
Aussi, pour la moyenne de distribution uniforme, "la somme des moyennes est la moyenne des sommes" et "le produit des moyennes est la moyenne des produits" (cependant, lorsque les événements sont indépendants).
\begin{align}
E[X+Y] &= E[X] + E[Y] \\
E[XY] &= E[X]E[Y] \hspace{20pt} (if \hspace{5pt} X \perp Y)
\end{align}
À titre d'exemple, voici une fonction de densité de probabilité lorsqu'un résultat expérimental doit prendre l'une des trois à quatre valeurs consécutives, et chaque probabilité est également probable.
uniform.py
## Uniform distribution ---------------------------------------------
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import uniform
# range
a = 3
b = 4 - a
x = np.linspace(uniform.ppf(0.01, loc=a, scale=b), uniform.ppf(0.99, loc=a, scale=b), 100)
# visualize
fig, ax = plt.subplots(1,1)
ax.plot(x, uniform.pdf(x, loc=a, scale=b), 'r-', alpha=0.6, lw=5)
ax.set_xlabel('X')
ax.set_ylabel('P(X)')
ax.set_title('uniform pdf')
Distribution gamma Représente la distribution de la latence totale lorsqu'un événement se produit $ n $ fois. Par conséquent, si $ n = 1 $, la distribution gamma correspond à la distribution exponentielle. Il existe deux paramètres: $ \ alpha = n $, $ \ beta = \ lambda $. $ \ lambda $ est la fréquence moyenne des événements, comme les distributions de Poisson et exponentielles.
Pour $ X \ sim Gamma (\ alpha, \ beta) $, ce qui suit est valable.
\begin{align}
f(x|\alpha, \beta) &= \frac{\beta^{\alpha}}{\Gamma(\alpha)}x^{\alpha-1}e^{-\beta x} \hspace{20pt} (x \geq 0) \\
E[X] &= \frac{\alpha}{\beta} \\
Var[X] &= \frac{\alpha}{\beta^{2}} \\
\end{align}
La ** $ \ Gamma (・) $ ** qui apparaît dans la formule est appelée la ** fonction gamma **, et est en fait un système général du multiplicateur $ (!) $. La formule suivante est valable.
if \hspace{10pt} n > 0 \\
\Gamma(n) = (n-1)!
Cette fonction gamma est utilisée pour modéliser une distribution asymétrique à droite, mais c'est aussi une distribution que l'on voit souvent dans les statistiques car elle est liée à la puissance.
Vous trouverez ci-dessous la distribution gamma lorsque $ \ alpha = 7, \ beta = 5 $. Interprétez-la comme la distribution du temps d'attente total pour que les cellules nerveuses de l'exemple se déclenchent 7 fois.
gamma.py
## Gamma distribution --------------------------------------------
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import gamma
# total number of events
n = 7
# rate parameter
mu = 5
# possible waiting time
x = np.linspace(gamma.ppf(0.01, n, loc=0, scale=1/mu), gamma.ppf(0.99, n, loc=0, scale=1/mu), 100)
# visualize
fig, ax = plt.subplots(1,1)
ax.plot(x, gamma.pdf(x, n, loc=0, scale=1/mu), 'r-', lw=5, alpha=0.5)
ax.set_xlabel('total waiting time until the neuron fires 7 times')
ax.set_ylabel('f(x)')
ax.set_title('gamma pdf')
Distribution bêta est de 0 $ \ leq X \ leq Utilisé pour représenter la variable $ X $, qui vaut 1 $. Un En d'autres termes, la probabilité elle-même peut être modélisée.
Pour $ X \ sim Beta (\ alpha, \ beta) $, ce qui suit est valable.
\begin{align}
f(x|\alpha, \beta) &= \frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha) \Gamma(\beta)}x^{\alpha-1}(1 - x)^{\beta - 1} \hspace{10pt} (0 \leq x \leq 1) \\
E[X] &= \frac{\alpha}{\alpha + \beta} \\
Var[X] &= \frac{\alpha \beta}{(\alpha + \beta)^{2}(\alpha + \beta + 1)}
\end{align}
À première vue, c'est une formule compliquée, mais étonnamment, lorsque $ \ alpha = \ beta = 1 $, la distribution bêta correspond à la distribution uniforme $ U (0,1) $.
À titre d'exemple, regardons la distribution bêta lorsque $ \ alpha = \ beta = 0,5 $. La distribution bêta peut exprimer diverses formes en fonction des paramètres, mais dans ce cas, elle devient une distribution caractéristique comme une vallée (?).
beta.py
## Beta distribution --------------------------------------------
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import beta
# parameters
a = 0.5
b = 0.5
# range
x = np.linspace(beta.ppf(0.01, a, b), beta.ppf(0.99, a, b), 100)
# visualize
fig, ax = plt.subplots(1,1)
ax.plot(x, beta.pdf(x, a, b), 'r-', lw=5, alpha=0.5)
ax.set_xlabel('X')
ax.set_ylabel('f(x)')
ax.set_title('beta pdf')
La distribution bêta est essentiellement «lorsque les variables de probabilité $ X (0 \ leq X \ leq 1) $ qui suivent une distribution uniforme sont disposées par ordre décroissant, la distribution du $ p $ ème nombre à partir du bas est la distribution bêta $ Beta (p ,, q) Cela signifie "devenir $". Cependant, au moins l'utilisation principale dans les statistiques est la mise à jour bayésienne en tant que distribution naturelle commune des avantages, donc l'important n'est pas cela, mais la variété des formes que la distribution bêta peut prendre. Ci-dessous, j'ai tracé un dessin de la distribution bêta avec une combinaison de divers paramètres.
C'est enfin distribution normale (distribution gaussienne). ** Théorème central limite ** (quelle que soit la distribution de la population, la distribution de l'erreur moyenne réelle de la moyenne de l'échantillon se rapproche de la distribution normale s'il y a suffisamment d'essais), mais aussi les statistiques. C'est une distribution de probabilité qui ne peut être évitée en science.
Lorsque $ X \ sim N (\ mu, \ sigma ^ {2}) $, ce qui suit est vrai.
\begin{align}
f(X|\mu, \sigma^{2}) &= \frac{1}{\sqrt{2 \pi \sigma^{2}}} exp{^\frac{(x - \mu)^{2}}{2 \sigma^2}} \\
E[X] &= \mu \\
Var(X) &= \sigma^{2}
\end{align}
La distribution normale contient 99% ou plus des données $ X $ dans une plage de 3 fois l'écart type $ \ sigma $. Par conséquent, si une variable est en dehors de la plage de 3 fois l'écart type $ \ sigma $, elle est déterminée comme étant ** aberrante **.
En outre, pour plusieurs distributions normales indépendantes, ce qui suit est vrai.
if \hspace{10pt} X1 \sim N(\mu_1, \sigma_1^{2}) \perp X2 \sim N(\mu_2, \sigma_2^{2}) \\
\\
X1 + X2 \sim N(\mu_1 + \mu_2, \sigma_1^{2} + \sigma_2^{2})
La somme des variables obtenues à partir de distributions normales indépendantes suit une nouvelle distribution normale avec la somme originale des moyennes et la somme des variances.
A titre d'exemple du graphique, $ \ mu = 0, \ sigma ^ {2} = 1 $, c'est-à-dire ** distribution normale standard (distribution z) **.
normal.py
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import norm
# mean
mu = 0
# standard deviation
sd = 1
# range
x = np.linspace(norm.ppf(0.01, loc=mu, scale=sd), norm.ppf(0.99, loc=mu, scale=sd), 100)
# visualize
fig, ax = plt.subplots(1,1)
ax.plot(x, norm.pdf(x, loc=mu, scale=sd), 'r-', lw=5, alpha=0.5)
ax.set_xlabel('X')
ax.set_ylabel('f(x)')
ax.set_title('normal pdf')
Il convient de rappeler que dans la distribution normale standard, la valeur à la fin de la plage contenant 95% des données est ** $ \ pm 1,96 $ **. Les valeurs qui dépassent cette valeur sont des caractères rares (environ 2,5% du total) qui correspondent à une valeur d'écart de 70 ou plus du côté +.
À propos, lors du calcul de la valeur de l'écart, le score du test est standardisé pour être $ N (50, 10 ^ {2}) $. Voici la formule de conversion des points de test $ x_i $ en valeur d'écart $ T_i $ lorsque la distribution des scores de test est $ N (\ mu_x, \ sigma_x ^ {2}) $.
T_i = \frac{10(x_i - \mu_x)}{\sigma_x} + 50
Le dernier est T distribution. Le test T est un moyen pratique de tester si les valeurs moyennes des deux groupes sont significativement différentes, et il est abusé sans être bien compris ~~ surtout dans le monde bio ~~, donc ici encore T Je voudrais revoir ce qu'est la distribution.
Supposons que les données expérimentales $ X $ soient obtenues à partir d'une population qui suit la distribution normale $ N (\ mu, \ sigma ^ {2}) $.
X \sim N(\mu, \sigma^{2})
À ce moment, la valeur moyenne des données expérimentales $ X $ $ \ override {X} $ a été obtenue à partir de la même distribution de probabilité dans laquelle $ X = X_1, X_2, ..., X_n $ étaient ** indépendants les uns des autres (indépendants et). En raison de la nature de la distribution normale indépendante, elle est considérée comme distribuée de manière identique; iid) **
\begin{align}
\Sigma_{i=1}^{n} X_i &\sim N(n*\mu, n*\sigma^{2}) \\
\frac{1}{n}\Sigma_{i=1}^{n} X_i &\sim N(\mu, \frac{\sigma^{2}}{n}) \\
\overline{X} &\sim N(\mu, \frac{\sigma^{2}}{n}) \\
\frac{\overline{X} - \mu}{\sigma /\sqrt{n}} &\sim N(0,1)
\end{align}
Il peut être transformé. À ce stade, si la valeur moyenne des données standardisées est supérieure à 1,96 $ ou inférieure à -1,96 $, qui est la valeur de bord contenant 95% des données dans la distribution normale standard, ** moyenne de l'échantillon $ \ override {X On peut dire que} $ est très éloigné de la moyenne de la population ** ………… est le ** test Z **.
En pratique, l'écart-type de la population $ \ sigma $ est souvent inconnu des données de l'échantillon (le test Z n'est pas éligible) et à la place ** l'écart-type de la population estimé à partir de l'échantillon (variance sans biais) S Utilisation **. Normalement, l'écart type est calculé en ajoutant les carrés de la différence entre les données et la moyenne, en divisant par le nombre de données $ n $ et en prenant la racine carrée, mais dans le calcul de la distribution non biaisée, $ n-1 au lieu de $ n $. Divisez par $.
S = \sqrt{\Sigma_{i}(X_i - \overline{X})^{2}/(n-1)}
Avec ce processus simple, vous pouvez ** faire correspondre la valeur attendue de l'écart-type de la population estimée à partir de l'échantillon avec l'écart-type de la population **.
Cependant, une fois que vous l'avez dérangé jusqu'à présent, le $ \ override {X} $ standardisé ne suivra plus une distribution normale. Au lieu de cela, il suit une distribution t avec ** degrés de liberté $ n-1 $ **.
Lorsque $ Y \ sim t_ {\ gamma} $, ce qui suit est vrai.
\begin{align}
f(y) &= \frac{\Gamma(\frac{\gamma + 1}{2})}{\Gamma(\frac{\gamma}{2})\sqrt{\gamma \pi}}(1 + \frac{y^{2}}{\gamma})^{-\frac{\gamma + 1}{2}} \\
E[Y] &= 0 \hspace{10pt} if \hspace{10pt} \gamma \geq 1 \\
Var[Y] &= \frac{\gamma}{\gamma-2} \hspace{10pt} if \hspace{10pt} \gamma \geq 2 \\
\end{align}
Si la valeur $ t $ convertie à partir de la moyenne expérimentale $ \ override {x} $ est plus grande ou plus petite que la valeur de bord qui contient 95% des données totales dans la distribution T déterminée par le degré de liberté des données. Le test T permet de réaliser un test significatif sur la différence entre la moyenne de la population et l'échantillon.
Sous forme de graphique, je vais mettre une distribution T avec 15 degrés de liberté. La distribution T a également une forme proche d'une distribution normale, mais tend à être un peu plus large. Lorsque le degré de liberté augmente, il se rapproche d'une distribution normale.
t.py
## t distribution --------------------------------------------
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import t
# degree of freedom
df = 15
# range
x = np.linspace(t.ppf(0.01, df), t.ppf(0.99, df), 100)
# visualize
fig, ax = plt.subplots(1,1)
ax.plot(x, t.pdf(x, df), 'r-', lw=5, alpha=0.5)
ax.set_xlabel('y')
ax.set_ylabel('f(y)')
ax.set_title('t pdf')
Nous avons résumé les distributions de probabilités qui apparaissent souvent dans les statistiques et l'analyse des données, mais il existe bien sûr de nombreux autres types de distributions de probabilités. Si j'ai le temps, j'aimerais en ajouter.