1. Statistiques apprises avec Python 2. Distribution des probabilités [Compréhension approfondie de scipy.stats]

1_2_01.PNG

(1) Types de distribution de probabilité

Distribution de probabilité probability distribution Méthode Les données
1 Distribution super géométrique Hypergeometric distribution scipy.stats.hypergeom Type discret
2 Distribution de Bernoulli Bernoulli distribution scipy.stats.bernoulli Type discret
3 Distribution binaire binomial distribution scipy.stats.binom Type discret
4 Distribution de Poisson Poisson distribution scipy.stats.poisson Type discret
5 Distribution géométrique Geometric Distribution scipy.stats.geom Type discret
6 Distribution binomiale négative Negative Binomial Distribution scipy.stats.nbinom Type discret
7 Distribution uniforme uniform distribution scipy.stats.uniform Type discret
8 distribution normale normal distribution scipy.stats.norm Type continu
9 Distribution exponentielle exponential distribution scipy.stats.expon Type continu
10 Distribution gamma gamma distribution scipy.stats.gamma Type continu
11 Distribution bêta beta distribution scipy.stats.betabinom Type continu
12 Distribution de Cauchy Cauchy distribution scipy.stats.cauchy Type continu
13 Enregistrer la distribution normale lognormal distribution scipy.stats.lognorm Type continu
14 Distribution de Pareto Pareto distribution scipy.stats.pareto Type continu
15 Distribution Wibble Weibull distribution scipy.stats.dweibull Type continu

⑵ Fonctions de diverses méthodes

#Bibliothèque de calculs numériques
import numpy as np
from scipy import stats

#Bibliothèque pour dessiner des graphiques
import matplotlib.pyplot as plt
%matplotlib inline

#Un module qui rend matplotlib compatible avec l'affichage japonais
!pip install japanize-matplotlib
import japanize_matplotlib

➀ rvs (variables aléatoires) Variables probabilistes

#Générer des nombres pseudo-aléatoires qui suivent une distribution normale avec des RV
norm_rvs = stats.norm.rvs(loc=50, scale=20, size=1000, random_state=0) #Valeur attendue=50,écart-type=20,Quantité=1000

#Visualisation (exprimée en histogramme)
plt.hist(norm_rvs, bins=10, alpha=0.3, ec='blue')
plt.xlabel("classe", fontsize=13)
plt.ylabel("la fréquence", fontsize=13)

plt.show()

1_2_02.PNG

➁ pdf (Fonction de densité de probabilité) Fonction de densité de probabilité

#Générer une séquence d'égalité
X = np.arange(start=1, stop=7.1, step=0.1)

#Générer une fonction de densité de probabilité en pdf
norm_pdf = stats.norm.pdf(x=X, loc=4, scale=0.8) #Valeur attendue=4,écart-type=0.8 

#Visualisation
plt.plot(X, norm_pdf)
plt.xlabel("Variable de probabilité X", fontsize=13)
plt.ylabel("Densité de probabilité pdf", fontsize=13)
plt.show()

1_2_03.PNG

  • Pour tenter, vérifions la densité de probabilité lorsque la variable de probabilité x = 5.
#Calculez la densité de probabilité lorsque la variable de probabilité 5
x = 5
y = stats.norm.pdf(x=x, loc=4, scale=0.8) #Valeur attendue=4,écart-type=0.8
print("Variable probabiliste x=Densité de probabilité à 5:", y)

#Tracer sur le graphique de la fonction de densité de probabilité
plt.plot(X, norm_pdf)
plt.plot(x, y, 'bo') #Placez les points bleus

plt.vlines(x, 0.0, y, lw=2, linestyles='dashed') #Ligne verticale
plt.hlines(y, 1.0, x, lw=2, linestyles='dashed') #Horizon

plt.xlabel("Variable de probabilité X", fontsize=13)
plt.ylabel("Densité de probabilité pdf", fontsize=13)

plt.show()

1_2_04.PNG

  • ** La fonction de densité de probabilité pdf est une méthode pour les données continues, et la fonction de masse de probabilité pmph suivante est utilisée pour les données discrètes. </ font> **

➂ pmf (Fonction de masse de probabilité) Fonction de masse de probabilité

  • Notation: pmf (k, n, p, loc = 0)
  • ** La masse de probabilité ** représente la ** facilité d'apparition relative ** pour chaque élément discret de la variable de probabilité X.
  • Pour le dire clairement, la ** fonction de masse de probabilité est une fonction ** qui calcule la masse de probabilité en prenant des données de type discret </ font> comme argument.
  • Ici, en utilisant la ** distribution binaire ** comme exemple, "lorsque 5 essais avec une probabilité de succès de 40% sont effectués, la probabilité de chaque succès (0 à 4 fois)" est indiquée.
#Probabilité de succès
p = 0.4
#Nombre d'essais
n = 5
#Nombre de succès
k = np.arange(0, 5) # array([0, 1, 2, 3, 4])

#Calculez la probabilité de chaque succès avec pmf
binom_pmf = stats.binom.pmf(k, n, p) #Nombre de succès=0~4,Nombre d'essais=5,Probabilité de succès=0.4

#Visualisation
plt.plot(k, binom_pmf, 'bo', ms=8)
plt.vlines(k, 0, binom_pmf, colors='b', lw=3, alpha=0.5)

plt.xticks(k) #échelle de l'axe des x

plt.xlabel("Variable de probabilité X", fontsize=13)
plt.ylabel("Fonction de masse probabiliste pmph", fontsize=13)

plt.show()

1_2_14.PNG

➃ logpdf (Log de la fonction de densité de probabilité)

  • Notation: logpdf (x, loc = 0, échelle = 1)
  • ** La fonction logarithmique de densité de probabilité ** est le logarithme de la densité de probabilité ** avec la base e.
  • Nombre de Napier $ e = 2,7182818284 ... $ est la valeur de $ a $ lorsque le nombre transcendantal est multiplié par $ a $ pour obtenir la densité de probabilité. La formule est $ e ^ a = $ pdf.
#Générer une séquence d'égalité
X = np.arange(start=1, stop=7.1, step=0.1)

#Générer un journal de la fonction de densité de probabilité avec logpdf
norm_logpdf = stats.norm.logpdf(x=X, loc=4, scale=0.8) #Valeur attendue=4,écart-type=0.8

#Visualisation
plt.plot(X, norm_logpdf)
plt.xlabel("Variable de probabilité X", fontsize=13)
plt.ylabel("Fonction de densité de probabilité log logpdf", fontsize=13)
plt.show()

1_2_05.PNG

  • Pour tenter, vérifions la variable de probabilité x = 4, qui montre la valeur maximale de la valeur logarithmique de la densité de probabilité dans la figure ci-dessus.
  • En guise de procédure, obtenez d'abord la valeur de densité de probabilité log ** de la variable de probabilité ** x = 4, puis calculez la densité de probabilité de ** x = 4, puis prenez sa valeur logarithmique ** et comparez les deux. Je vais.
#Obtenez la densité de probabilité maximale du journal
logpdf_max = np.max(norm_logpdf) 
print('x=Densité de probabilité log de 4:', logpdf_max)

#Calculer la densité de probabilité
x = 4
v_pdf = stats.norm.pdf(x=x, loc=4, scale=0.8) #Valeur attendue=4,écart-type=0.8

#Calculer la logarithmique de la densité de probabilité
v_pdf_log = np.log(v_pdf)
print('x=Log de densité de probabilité de 4:', v_pdf_log)

#Visualisation
plt.plot(X, norm_logpdf)
plt.plot(4, logpdf_max, 'bo') #Placez les points bleus

logpdf_min = np.min(norm_logpdf) #Valeur minimale de la densité de probabilité logarithmique(Pour dessiner)
plt.vlines(x, logpdf_max, logpdf_min, lw=2, linestyles='dashed') #Ligne verticale
plt.hlines(logpdf_max, 1.0, x, lw=2, linestyles='dashed') #Horizon

plt.xlabel("Variable de probabilité X", fontsize=13)
plt.ylabel("Fonction de densité de probabilité log logpdf", fontsize=13)

plt.show()

1_2_06.PNG

➄ cdf (Fonction de distribution cumulative) Fonction de distribution cumulative

  • Notation: cdf (x, loc = 0, échelle = 1)
  • ** La fonction de distribution cumulative ** calcule la probabilité que la variable de probabilité $ X $ soit inférieure ou égale à une certaine valeur $ x $ **.
  • Par exemple, la probabilité que "le nombre de lancers soit de 3 ou moins" lors du lancement d'un dé est la somme de toutes les densités de probabilité de 1 à 3.
#Générer une séquence d'égalité sur l'axe des x
X = np.linspace(start=1, stop=7, num=100)

#Générer une fonction de distribution cumulative avec cdf
norm_cdf = stats.norm.cdf(x=X, loc=4, scale=0.8) #Valeur attendue=4,écart-type=0.8

#x avec cdf=Calculez la probabilité cumulée de 5 ou moins
under_5 = stats.norm.cdf(x=5, loc=4, scale=0.8) #Valeur attendue=4,écart-type=0.8
print('Probabilité de 5 ou moins:', under_5)

#Visualisation
plt.plot(X, norm_cdf)
plt.plot(5, under_5, 'bo') #Placez les points bleus

plt.vlines(5, 0.0, under_5, lw=2, linestyles='dashed') #Ligne verticale
plt.hlines(under_5, 1.0, 5, lw=2, linestyles='dashed') #Horizon

plt.xlabel("Variable de probabilité X", fontsize=13)
plt.ylabel("Densité de probabilité cumulative cdf", fontsize=13)

plt.show()

1_2_07.PNG

  • La figure ci-dessous montre les points de la variable de probabilité x = 5 sur la fonction de densité de probabilité avec exactement les mêmes paramètres.
  • La fonction de distribution cumulative correspond à la zone bleu clair de cette figure.

1_2_08.PNG

➅ sf (Fonction de survie) Fonction de survie

  • Notation: sf (x, loc = 0, échelle = 1)
  • ** La fonction de survie **, contrairement à la fonction de distribution cumulative cdf, ** la probabilité que la variable de probabilité $ X $ soit d'une certaine valeur $ x $ ou plus </ font> ** Calculer.
  • ** Parfois défini comme "1-cdf" **, mais ** sf peut être plus précis ** scipy.org https://docs.scipy.org/ Il peut être trouvé dans doc / scipy / reference / generated / scipy.stats.norm.html.

1_2_15.PNG

#Générer une séquence d'égalité sur l'axe des x
X = np.linspace(start=1, stop=7, num=100)

#Générer une fonction de survie avec sf
norm_sf = stats.norm.sf(x=X, loc=4, scale=0.8) #Valeur attendue=4,écart-type=0.8

#x avec sf=Calculer la probabilité cumulée de 5 ou plus
upper_5 = stats.norm.sf(x=5, loc=4, scale=0.8) #Valeur attendue=4,écart-type=0.8
print('Probabilité de 5 ou plus:', upper_5)

#Visualisation
plt.plot(X, norm_sf)
plt.plot(5, upper_5, 'bo') #Placez les points bleus

plt.vlines(5, 0.0, upper_5, lw=2, linestyles='dashed') #Ligne verticale
plt.hlines(upper_5, 1.0, 5, lw=2, linestyles='dashed') #Horizon

plt.xlabel("Variable de probabilité X", fontsize=13)
plt.ylabel("Fonction de survie SF", fontsize=13)

plt.show()

1_2_09.PNG

  • La figure ci-dessous montre les points de la variable de probabilité x = 5 sur la fonction de densité de probabilité avec exactement les mêmes paramètres.
  • La fonction de survie correspond à la zone bleu clair de la figure.

1_2_10.PNG

➆ ppf (Fonction du point de pourcentage) Fonction du point de pourcentage

  • Notation: ppf (q, loc = 0, échelle = 1) ** La fonction de point de pourcentage ** est l'inverse de la fonction de distribution cumulative cdf, et si vous spécifiez la ** fonction de distribution cumulative comme q%, elle renvoie une variable ** qui prend cette valeur.
  • Par conséquent, ppf (0,25) correspond au 1er quadrant, ppf (0,5) correspond au 2ème quadrant, qui est la valeur médiane, et ppf (0,75) correspond au 3ème quadrant.
#Générer une séquence d'égalité sur l'axe des x
X = np.arange(start=1, stop=7, step=0.1)

#Générer une fonction de densité de probabilité en pdf
norm_pdf = stats.norm.pdf(x=X, loc=4, scale=0.8) #Valeur attendue=4,écart-type=0.8

#Obtenir la variable correspondant à la fonction de distribution cumulée 75% avec ppf
q_75 = stats.norm.ppf(q=0.75, loc=4, scale=0.8) #Valeur attendue=4,écart-type=0.8
print('Fonction de distribution cumulative Variable de probabilité de 75%:', q_75)

#Obtenez la densité de probabilité de la variable avec pdf
v = stats.norm.pdf(x=q_75, loc=4, scale=0.8)
print('Fonction de distribution cumulative Densité de probabilité de 75%:', v)

#Visualisation
plt.plot(X, norm_pdf)
plt.plot(q_75, v, 'bo') #Placez les points bleus

plt.vlines(q_75, 0.0, v, lw=2, linestyles='dashed') #Ligne verticale
plt.hlines(v, 1.0, q_75, lw=2, linestyles='dashed') #Horizon

plt.xlabel("Variable de probabilité X", fontsize=13)
plt.ylabel("Fonction de densité de probabilité pdf", fontsize=13)

plt.show()

1_2_11.PNG

➇ isf (fonction de survie inverse)

  • Notation: ʻisf (q, loc = 0, échelle = 1) ` ** La fonction de survie inverse ** est l'inverse de la fonction de survie sf, mais ce que vous faites est l'opposé de la fonction de point de pourcentage ppf. ** Si le reste de la fonction de survie est spécifié comme q%, une variable ** qui prend cette valeur est renvoyée.
  • Par conséquent, le quadrant est l'opposé de la fonction de point de pourcentage ppf, isf (0,25) est le troisième quadrant, isf (0,5) est également le deuxième quadrant et isf (0,75) est le premier. Correspond au quadrant.
#Générer une séquence d'égalité sur l'axe des x
X = np.arange(start=1, stop=7, step=0.1)

#Générer une fonction de densité de probabilité en pdf
norm_pdf = stats.norm.pdf(x=X, loc=4, scale=0.8) #Valeur attendue=4,écart-type=0.8

#Obtenir la variable correspondant à la fonction de survie inverse 25% avec isf
q_25 = stats.norm.isf(q=0.25, loc=4, scale=0.8) #Valeur attendue=4,écart-type=0.8
print('Fonction de survie inverse Variable de probabilité ponctuelle de 25%:', q_25)

#Obtenez la densité de probabilité de la variable avec pdf
v = stats.norm.pdf(x=q_25, loc=4, scale=0.8)
print('Fonction de survie inverse Densité de probabilité de 25%:', v)

#Visualisation
plt.plot(X, norm_pdf)
plt.plot(q_25, v, 'bo') #Placez les points bleus

plt.vlines(q_25, 0.0, v, lw=2, linestyles='dashed') #Ligne verticale
plt.hlines(v, 1.0, q_25, lw=2, linestyles='dashed') #Horizon

plt.xlabel("Variable de probabilité X", fontsize=13)
plt.ylabel("Fonction de densité de probabilité pdf", fontsize=13)

plt.show()

1_2_12.PNG

➈ intervalle (points finaux de la plage qui contient alpha pour cent de la distribution) Estimation d'intervalle

  • Notation: ʻinterval (alpha, loc = 0, scale = 1) `
  • Dans la ** distribution empirique ** calculée à partir de données réelles, ni la moyenne ni l'écart type ne sont toujours inconnus. Je ne sais pas vraiment si la moyenne obtenue à partir de l'échantillon peut être approximée à la ** vraie population $ θ $ ** de la population.
  • Par conséquent, ** La recherche de l'intervalle incluant la population de $ θ $ </ font> avec une certaine probabilité est appelée estimation d'intervalle **.
#Générer une séquence d'égalité sur l'axe des x
X = np.arange(start=1, stop=7, step=0.1)

#Générer une fonction de densité de probabilité en pdf
norm_pdf = stats.norm.pdf(x=X, loc=4, scale=0.8) #Valeur attendue=4,écart-type=0.8

#Récupère la variable correspondant à l'intervalle de confiance 95% par intervalle
lower, upper = stats.norm.interval(alpha=0.95, loc=4, scale=0.8) #Coefficient de confiance=0.95,Valeur attendue=4,écart-type=0.8
print('Limite inférieure de l'intervalle de confiance à 95%:', lower)
print('Limite supérieure de l'intervalle de confiance à 95%:', upper)

#Obtenez la densité de probabilité de chaque variable avec pdf
v_lower = stats.norm.pdf(x=lower, loc=4, scale=0.8) #Valeur attendue=4,écart-type=0.8
v_upper = stats.norm.pdf(x=upper, loc=4, scale=0.8) #Valeur attendue=4,écart-type=0.8

#Visualisation
plt.plot(X, norm_pdf)
plt.plot(lower, 0.0, 'k|')
plt.plot(upper, 0.0, 'k|')

plt.vlines(lower, 0.0, v_lower, lw=0.8) #Ligne verticale de limite inférieure
plt.vlines(upper, 0.0, v_upper, lw=0.8) #Ligne verticale supérieure

plt.xlabel("Variable de probabilité X", fontsize=13)
plt.ylabel("Fonction de densité de probabilité pdf", fontsize=13)

plt.show()

1_2_13.PNG

  • Pour l'estimation d'intervalle, ** spécifiez d'abord la probabilité de l'intervalle contenant la population $ θ $ **. Dans cet exemple, il s'agit de «alpha = 0,95», qui est appelé le ** facteur de confiance **. 99%, 95% et 90% sont souvent utilisés, mais cela est facultatif.
  • Sous la probabilité spécifiée, ** les limites inférieure et supérieure de l'intervalle contenant la population $ θ $ ** seront calculées. Dans cet exemple, il y a 95% de chances que la population $ θ $ indique que la variable stochastique est comprise entre 2,43 et 5,57.

Épilogue

  • J'ai omis la fonction de distribution cumulative log logcdf, la fonction de survie log logsf, etc., mais je pense que celles qui semblent être utilisées fréquemment ont été supprimées.
  • En utilisant ceux-ci, je voudrais démêler les 15 types de distributions de probabilité énumérés ci-dessus un par un.

Recommended Posts